var name ='Test';Object name ='Test';var hex =0xDEADBEEF;var number =1;double d =0.1;num x =1; // x — is double and intx +=0.1;String name ='Test';int? lineCount; // default: nullassert(lineCount ==null);
Late/Lazy
Dart подсветит, если посчитает, что вы объявили переменную (не nullable). Чтобы указать, что переменная будет проинициализирована позже, можно пометить ее ключевым словом late.
Если инициализация переменной слишком дорогостоящая операция
Мы инициализируем инстанс переменной, и этот инициализатор нуждается в доступе к this (то есть, переменная должна быть проинициализирована после вызова конструктора и инициализации всего объекта).
По факту, инициализация произойдет только при обращении к переменной (lazy)
lateString temperature =_readThermometer(); // Lazily initialized
Const & Final
Если вы не собираетесь менять значение переменной, объявляем ее как final. const — это частный случай final-переменной, она получает свое значение на этапе компиляции.
const bar =1000000;constdouble atm =1.01325* bar;final name ='Bob';finalString nickname;nickname ='Bob';var foo =const [];final bar =const [];const baz = []; // Equivalent to `const []`
Build-in types
int, double
String
bool
List
Set
Map
Runes (умные char'ы)
Symbol
null (класс Null)
Другие типы, имеющие специальные роли в Dart:
Object — суперкласс для всех других классов в Dart, за исключением Null
Future и Stream — используется в асинхронных функциях
Iterable — используется в циклах for и в функциях-генераторах
Never — индикатор того, что функция может никогда не вернуть своего результата (например, из-за исключения)
dynamic — индикатор того, что мы хотим отключить статические проверки. Обычно, лучше использовать Object или Object?.
void — индикатор того, что значение никогда не используется. Часто используется для типа возвращаемого значения.
var s ='some string';var s1 ='some s=$s';var s2 ='some s=${s}';var s1 ='''You can createmulti-line strings like this one.''';var s2 ="""This is also amulti-line string.""";// Create row string — r; Runesvar s =r'In a raw string, not even \n gets special treatment.';
Lists
var list = [1, 2, 3];assert(list.length ==3);assert(list[1] ==2);list[1] =1;assert(list[1] ==1);var constantList =const [1, 2, 3];// constantList[1] = 1; // This line will cause an error.
Spread operator (...)
var list = [1, 2, 3];var list2 = [0, ...list];assert(list2.length ==4);var list;var list2 = [0, ...?list];assert(list2.length ==1);
if и for
var nav = ['Home','Furniture','Plants',if (promoActive) 'Outlet'];var listOfInts = [1, 2, 3];var listOfStrings = ['#0',for (var i in listOfInts) '#$i'];assert(listOfStrings[1] =='#1');
Sets
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};var names =<String>{};// Set<String> names = {}; // This works, too.// var names = {}; // Creates a map, not a set.