Оценок пока нет Переменные в языке Dart

Вот пример создания переменной и ее инициализации:

var name = 'Bob';

Переменные хранят ссылки. Переменная с именем name содержит ссылку на объект String со значением «Bob».

Тип переменной name выводится как String, но вы можете изменить этот тип, указав его. Если объект не ограничен одним типом, укажите объект Object или динамический тип dynamic, следуя рекомендациям по проектированию.

dynamic name = 'Bob';

Другой вариант — явно объявить тип, который будет выведен:

String name = 'Bob';
Примечание. На этой странице соблюдаются рекомендации руководства по стилю, касающиеся использования переменных var вместо аннотаций типов для локальных переменных.
Значение по умолчанию

Неинициализированные переменные имеют начальное значение null. Даже переменные с числовыми типами изначально равны нулю, потому что числа — как и все остальное в Dart — являются объектами.

int lineCount;
assert(lineCount == null);
Примечание: производственный код игнорирует вызов assert(). С другой стороны, во время разработки assert(условие) выдает исключение, если условие ложно. Для получения дополнительной информации см. Assert.
Данные final и const

Если вы никогда не собираетесь менять переменную, используйте final или const, либо вместо var, либо в дополнение к типу. Окончательная переменная может быть установлена ​​только один раз; константная переменная — это константа времени компиляции. (Константные переменные неявно являются окончательными.) Последняя переменная верхнего уровня или класса инициализируется при первом использовании.

Примечание. Переменные экземпляра могут быть final, но не const. Переменные final экземпляра должны быть инициализированы до запуска тела конструктора — при объявлении переменной, параметром конструктора или в списке инициализатора конструктора. 

Вот пример создания и установки окончательной переменной:

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';

Вы не можете изменить значение окончательной переменной:

name = 'Alice'; // Error: a final variable can only be set once.

Используйте const для переменных, которые вы хотите быть константами во время компиляции. Если переменная const находится на уровне класса, пометьте ее как static const. Когда вы объявляете переменную, присвойте ей значение постоянной времени компиляции, такой как числовой или строковый литерал, константная переменная или результат арифметической операции с постоянными числами:

const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere

Ключевое слово const предназначено не только для объявления константных переменных. Вы также можете использовать его для создания постоянных значений, а также для объявления конструкторов, которые создают постоянные значения. Любая переменная может иметь постоянное значение.

var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`

Вы можете опустить const из инициализирующего выражения объявления const, как для baz выше. Для получения дополнительной информации см. НЕ используйте const с избыточностью.

Вы можете изменить значение неконечной, неконстантной переменной, даже если она имела постоянное значение:

foo = [1, 2, 3]; // Was const []

Вы не можете изменить значение переменной const:

baz = [42]; // Error: Constant variables can't be assigned a value.

Начиная с Dart 2.5, вы можете определять константы, которые используют проверку типов и приведение (is и as), коллекция if и коллекция for и спред — операторы распространения (... и ...?):

// Valid compile-time constants as of Dart 2.5.
const Object i = 3; // Where i is a const Object with an int value...
const list = [i as int]; // Use a typecast.
const map = {if (i is int) i: "int"}; // Use is and collection if.
const set = {if (list is List<int>) ...list}; // ...and a spread.

Для получения дополнительной информации об использовании const для создания постоянных значений см. Списки(Lists), Карты(Maps) и Классы(Classes).

Встроенные типы

Язык Dart имеет специальную поддержку для следующих типов:

  • numbers — числа;
  • strings — строки;
  • booleans — булевые значения;
  • lists (also known as arrays) — списки, который также упоминаются массивами;
  • sets — наборы;
  • maps — карты;
  • runes — нужны для выражения символов Юникода в строке;
  • symbols — символы.

Вы можете инициализировать объект любого из этих специальных типов, используя литерал. Например, «это строка» — строковый литерал, true — логический литерал.

Поскольку каждая переменная в Dart ссылается на объект — экземпляр класса — обычно вы можете использовать конструкторы для инициализации переменных. Некоторые из встроенных типов имеют свои собственные конструкторы. Например, вы можете использовать конструктор Map() для создания карты.

Числа — Numbers

Номера дротиков бывают двух видов:

int — целочисленные значения не более 64 бит, в зависимости от платформы. На виртуальной машине Dart значения могут быть от -263 до 263 — 1. В Dart, скомпилированном в JavaScript, используются числа JavaScript, допускающие значения от -253 до 253 — 1.

doube — 64-битные (с двойной точностью) числа с плавающей точкой, как указано в стандарте IEEE 754.

И int, и double являются подтипами num. Тип num включает в себя основные операторы, такие как +, -, / и *, а также, где вы найдете abs(), ceil() и floor(), среди других методов. (Битовые операторы, такие как >>, определены в классе int.) Если num и его подтипы не имеют того, что вы ищете, библиотека dart:math имеет.

Целые числа — это числа без десятичной точки. Вот несколько примеров определения целочисленных литералов:

var x = 1;
var hex = 0xDEADBEEF;

Если число включает в себя десятичную, это double. Вот несколько примеров определения двойных литералов:

double z = 1; // Equivalent to double z = 1.0.
Примечание к версии: До Dart 2.1 было ошибкой использовать целочисленный литерал в двойном контексте.

Вот как вы превращаете строку в число или наоборот:

// String to int
var one = int.parse('1');
assert(one == 1);

// String to double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);

// int to String
String oneAsString = 1.toString();
assert(oneAsString == '1');

// double to String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');

Тип int определяет традиционные побитовые операторы сдвига (<<, >>), AND (&) и OR (|). Например:

const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;
Строки — Strings

Строка Dart представляет собой последовательность кодовых единиц UTF-16. Вы можете использовать одинарные или двойные кавычки для создания строки:

var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";
var s3 = 'It\'s easy to escape the string delimiter.';
var s4 = "It's even easier to use the other delimiter.";

Вы можете поместить значение выражения в строку, используя ${expression}. Если выражение является идентификатором, вы можете пропустить {}. Чтобы получить строку, соответствующую объекту, Dart вызовет метод объекта toString().

var s = 'string interpolation';
assert('Dart has $s, which is very handy.' ==
    'Dart has string interpolation, ' +
        'which is very handy.');
assert('That deserves all caps. ' +
        '${s.toUpperCase()} is very handy!' ==
    'That deserves all caps. ' +
        'STRING INTERPOLATION is very handy!');
Примечание. Оператор == проверяет, эквивалентны ли два объекта. Две строки эквивалентны, если они содержат одинаковую последовательность единиц кода.

Вы можете объединять строки, используя примыкающие строковые литералы или оператор +:

var s1 = 'String '
    'concatenation'
    " works even over line breaks.";
assert(s1 ==
    'String concatenation works even over '
        'line breaks.');

var s2 = 'The + operator ' + 'works, as well.';
assert(s2 == 'The + operator works, as well.');

Другой способ создания многострочной строки: используйте тройную кавычку с одинарными или двойными кавычками:

var s1 = '''
You can create
multi-line strings like this one.
''';
var s2 = """This is also a
multi-line string.""";

Вы можете создать «сырую» строку, добавив к ней префикс r:

var s = r'In a raw string, not even \n gets special treatment.';

Посмотрите Руны для деталей о том, как выразить символы Unicode в строке.

Литеральные строки являются константами времени компиляции, если любое интерполированное выражение является константой времени компиляции, которая оценивается как нулевое или числовое, строковое или логическое значение.

// These work in a const string.
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';

// These do NOT work in a const string.
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = [1, 2, 3];

const validConstString = '$aConstNum $aConstBool $aConstString';
// const invalidConstString = '$aNum $aBool $aString $aConstList';

Для получения дополнительной информации об использовании строк см. Строки и регулярные выражения.

Булевые значения — Booleans

Для представления логических значений Dart имеет тип с именем bool. Только два объекта имеют тип bool: логические литералы true и false, которые являются константами времени компиляции.

Безопасность типов Dart означает, что вы не можете использовать код вроде if(nonbooleanValue) или assert(nonbooleanValue). Вместо этого явно проверьте значения, как тут:

// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty);

// Check for zero.
var hitPoints = 0;
assert(hitPoints <= 0);

// Check for null.
var unicorn;
assert(unicorn == null);

// Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
Списки — Lists

Возможно, самая распространенная коллекция почти в каждом языке программирования — это массив или упорядоченная группа объектов. В Dart массивы являются объектами List, поэтому большинство людей просто называют их списками.

var list = [1, 2, 3];
Примечание: Dart делает вывод, что список имеет тип List <int>. Если вы попытаетесь добавить нецелые объекты в этот список, анализатор или среда выполнения выдаст ошибку. Для получения дополнительной информации читайте о выводе типа.

Списки используют индексацию с нуля, где 0 — это индекс первого элемента, а list.length - 1 — это индекс последнего элемента. Вы можете получить длину списка и ссылаться на элементы списка так же, как в JavaScript:

var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);

list[1] = 1;
assert(list[1] == 1);

Чтобы создать список, который является константой времени компиляции, добавьте const перед литералом списка:

var constantList = const [1, 2, 3];
// constantList[1] = 1; // Uncommenting this causes an error.

В Dart 2.3 появился оператор распространения spread(...) и оператор распространения с нулевым значением (...?), Которые обеспечивают краткий способ вставки нескольких элементов в коллекцию.

Например, вы можете использовать спред — оператор распространения (...), чтобы вставить все элементы списка в другой список:

var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);

Если выражение справа от оператора распространения может быть нулевым, вы можете избежать исключений, используя оператор распространения с нулевым значением (...?):

var list;
var list2 = [0, ...?list];
assert(list2.length == 1);

Для получения более подробной информации и примеров использования оператора распространения, см. Предложение оператора распространения.

В Dart 2.3 также была представлена collection if и collection for, которые можно использовать для построения коллекций с использованием условий (if) и повторения (for).

Вот пример использования collection if создания списка с тремя или четырьмя элементами в нем:

var nav = [
  'Home',
  'Furniture',
  'Plants',
  if (promoActive) 'Outlet'
];

Вот пример использования collection if для управления элементами списка перед их добавлением в другой список:

var listOfInts = [1, 2, 3];
var listOfStrings = [
  '#0',
  for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');

Дополнительные сведения и примеры использования коллекции if и for см. В предложении коллекции потоков управления.

Тип List имеет много удобных методов для работы со списками. Для получения дополнительной информации о списках см. Генераторы Generics и коллекции Collections.

Наборы — Sets

Набор в Dart — это неупорядоченная коллекция уникальных предметов. Поддержка Dart для наборов обеспечивается литералами set и типом Set.

Примечание к версии: Хотя тип Set всегда был основной частью Dart, литералы набора были введены в Dart 2.2.

Вот простой набор Dart, созданный с использованием литерала набора:

var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
Примечание: Dart делает вывод, что данные в halogens имеют тип Set<String>. Если вы попытаетесь добавить неправильный тип значения в набор, анализатор или среда выполнения выдаст ошибку. Для получения дополнительной информации читайте о выводе типа.

Чтобы создать пустой набор, используйте {} с предшествующим аргументом типа или присвойте {} переменной типа Set:

var names = <String>{};
// Set<string> names = {}; // This works, too.
// var names = {}; // Creates a map, not a set.
ис для литералов карты аналогичен синтаксису для литералов наборов. Поскольку литералы карты были на первом месте, {} по умолчанию использует тип карты Map. Если вы забудете аннотацию типа {} или переменную, которой она назначена, Dart создаст объект типа Map <dynamic, dynamic>.

Добавьте элементы в существующий набор, используя методы add() или addAll():

var elements = <String>{};
elements.add('fluorine');
elements.addAll(['halogens']);
assert(elements.length == 5);

Используйте .length, чтобы получить количество предметов в наборе:

var elements = <String>{};
elements.add('fluorine');
elements.addAll(halogens);
assert(elements.length == 5);

Чтобы создать набор, который является константой времени компиляции, добавьте const перед литералом набора:

final constantSet = const {
  'fluorine',
  'chlorine',
  'bromine',
  'iodine',
  'astatine',
};
// constantSet.add('helium'); // Uncommenting this causes an error.

Начиная с Dart 2.3, наборы поддерживают операторы распространения (... и ...?) И коллекции if и for, как это делают списки. Для получения дополнительной информации см. Обсуждения оператора распространения списка и оператора сбора списка.

Для получения дополнительной информации о наборах см. Обобщения Generics и наборы Sets .

Карты — Maps

В общем, карта — это объект, который связывает ключи и значения. И ключи, и значения могут быть объектами любого типа. Каждый ключ встречается только один раз, но вы можете использовать одно и то же значение несколько раз. Поддержка Dart для карт обеспечивается литералами карты и типом Map.

var gifts = {
  // Key:    Value
  'first': 'partridge',
  'second': 'turtledoves',
  'fifth': 'golden rings'
};
var nobleGases = {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};
Примечание: Dart делает вывод, что gifts имеет тип Map<String,String>, а nobleGases имеет тип Map<int, String>. Если вы попытаетесь добавить неверный тип значения на карту, анализатор или среда выполнения выдаст ошибку. Для получения дополнительной информации читайте о выводе типа.

Вы можете создать те же объекты, используя конструктор Map:

var gifts = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

var nobleGases = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
даете увидеть new Map() вместо простой Map(). Начиная с Dart 2, ключевое слово new является необязательным. Для получения дополнительной информации см. Использование конструкторов.

Добавьте новую пару ключ-значение на существующую карту так же, как в JavaScript:

var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds'; // Add a key-value pair

Получить значение из карты так же, как в JavaScript:

var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');

Если вы ищете ключ, которого нет на карте, вы получите нулевое взамен:

var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);

Используйте .length, чтобы получить количество пар ключ-значение на карте:

var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);

Чтобы создать карту с постоянной времени компиляции, добавьте const перед литералом карты:

final constantMap = const {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

// constantMap[2] = 'Helium'; // Uncommenting this causes an error.

Начиная с Dart 2.3, карты поддерживают операторы распространения (... и ...?) И коллекции, если и для, как списки. Для получения подробной информации и примеров см. Предложение оператора распространения и предложение коллекций потока управления.

Для получения дополнительной информации о картах см. Обобщения Generics и Карты Maps.

Руны — Runes

В Dart руны — это кодовые позиции UTF-32 строки.

Unicode определяет уникальное числовое значение для каждой буквы, цифры и символа, используемых во всех мировых системах письма. Поскольку строка Dart представляет собой последовательность единиц кода UTF-16, для выражения 32-битных значений Unicode в строке требуется специальный синтаксис.

Обычный способ выражения кодовой позиции Unicode — это \uXXXX, где XXXX — это шестнадцатеричное 4-значное значение. Например, символ сердца () — это \u2665. Чтобы указать более или менее 4 шестнадцатеричных цифр, поместите значение в фигурные скобки. Например, смеющийся смайлик (?) — это \u{1f600}.

Класс String имеет несколько свойств, которые вы можете использовать для извлечения информации о рунах. Свойства codeUnitAt и codeUnit возвращают 16-битные единицы кода. Используйте свойство runes, чтобы получить руны строки.

Следующий пример иллюстрирует взаимосвязь между рунами, 16-разрядными кодовыми единицами и 32-разрядными кодовыми позициями

main() {
  var clapping = '\u{1f44f}';
  print(clapping);
  print(clapping.codeUnits);
  print(clapping.runes.toList());

  Runes input = new Runes(
      '\u2665  \u{1f605}  \u{1f60e}  \u{1f47b}  \u{1f596}  \u{1f44d}');
  print(new String.fromCharCodes(input));
}
Примечание. Будьте осторожны при манипулировании рунами с помощью операций со списком. Этот подход может легко сломаться, в зависимости от конкретного языка, набора символов и операции. Для получения дополнительной информации см. Как перевернуть строку в дротике? Переполнение стека.
Символы — Symbols

Объект Symbol представляет оператор или идентификатор, объявленный в программе Dart. Возможно, вам никогда не понадобится использовать символы, но они неоценимы для API, которые ссылаются на идентификаторы по имени, потому что минификация меняет имена идентификаторов, но не символы идентификаторов.

Чтобы получить символ для идентификатора, используйте символьный литерал, который просто пишется, как #, за которым следует идентификатор:

#radix
#bar

Символьные литералы являются константами времени компиляции.

Пожалуйста, оцените материал

WebSofter

Web - технологии