Variables
Init
var name = 'Test';
Object name = 'Test';
var hex = 0xDEADBEEF;
var number = 1;
double d = 0.1;
num x = 1; // x — is double and int
x += 0.1;
String name = 'Test';
int? lineCount; // default: null
assert(lineCount == null);
Late/Lazy
Dart подсветит, если посчитает, что вы объявили переменную (не nullable). Чтобы указать, что переменная будет проинициализирована позже, можно пометить ее ключевым словом late
.
late String descr;
void main() {
descr = 'Test';
print(descr);
}
late
используют в двух случаях:
Если инициализация переменной слишком дорогостоящая операция
Мы инициализируем инстанс переменной, и этот инициализатор нуждается в доступе к
this
(то есть, переменная должна быть проинициализирована после вызова конструктора и инициализации всего объекта).
По факту, инициализация произойдет только при обращении к переменной (lazy
)
late String temperature = _readThermometer(); // Lazily initialized
Const & Final
Если вы не собираетесь менять значение переменной, объявляем ее как final. const — это частный случай final-переменной, она получает свое значение на этапе компиляции.
const bar = 1000000;
const double atm = 1.01325 * bar;
final name = 'Bob';
final String 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
— индикатор того, что значение никогда не используется. Часто используется для типа возвращаемого значения.
Converting
// String -> int
var one = int.parse('1');
assert(one == 1);
// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);
// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');
// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');
Strings
var s = 'some string';
var s1 = 'some s=$s';
var s2 = 'some s=${s}';
var s1 = '''
You can create
multi-line strings like this one.
''';
var s2 = """This is also a
multi-line string.""";
// Create row string — r; Runes
var 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.
Maps
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
var gifts = Map<String, String>();
Last updated