Type annotations in Dart allow you to explicitly declare the type of a variable, function parameter, or return value. This is part of Dart’s static typing system, which helps catch errors at compile time by ensuring that variables are used consistently with their declared types.
Type Annotations
Type annotations specify the data type of a variable or a function’s parameters and return type. This provides clarity and helps the compiler understand how the data should be handled.
1. Variable Declarations
When declaring variables, you can explicitly annotate their types:
int age = 25;
String name = 'Alice';
bool isValid = true;
Here:
int
specifies thatage
must hold an integer value.String
specifies thatname
must hold a string.bool
specifies thatisValid
must hold a boolean value.
2. Function Parameters and Return Types
You can annotate the types of a function’s parameters and return value:
int add(int a, int b) {
return a + b;
}
In this example:
- The function
add
takes twoint
parameters (a
andb
) and returns anint
.
Another example with a void
return type (indicating no return value):
void printMessage(String message) {
print(message);
}
Here, printMessage
takes a String
parameter and returns nothing (void
).
Type Inference
While Dart is statically typed, it also has a powerful type inference system. This means that if you don’t explicitly declare a type, Dart can often infer it from the context.
Variable Declarations with Inference
You can use var
to let Dart infer the type based on the assigned value:
dartCopy codevar age = 25; // Dart infers 'int'
var name = 'Alice'; // Dart infers 'String'
var isValid = true; // Dart infers 'bool'
Although var
is used, Dart infers the type (int
, String
, bool
) and these variables cannot later hold a value of a different type.
Final and Const Variables
With final
and const
variables, type inference also works:
dartCopy codefinal age = 25; // Dart infers 'int'
const pi = 3.14; // Dart infers 'double'
Here:
final
means the variable can be set only once and cannot be reassigned.const
is similar tofinal
but also makes the value a compile-time constant.
Combining Type Annotations and Inference
You can mix explicit annotations with type inference, depending on your needs:
dartCopy codeint age = 25; // Explicit annotation
var name = 'Alice'; // Inferred annotation
Why Use Type Annotations?
- Clarity: They make your code more readable and clear about the intended data types.
- Safety: They help catch errors at compile time, reducing runtime errors.
- Flexibility: When you don’t need strict typing, type inference keeps your code concise while still being type-safe.