Dart: basic program!

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

// Define a function.
printNumber(num aNumber) {
  print('The number is $aNumber.'); // Print to console.
}

// This is where the app starts executing.
main() {
  var number = 42; // Declare and initialize a variable.
  printNumber(number); // Call a function.
}

Поддерживаются однострочные // и многострочные /* … */ комментарии.

num, String, int, bool - встроенные типы данных.

42 - цифровой литерал (number literal), является константой во время компиляции.

print() - функция вывода в консоль.

'...' (or "...") - строковый литерал (string literal).

$variableName (or ${expression}) - строковая интерполяция (String interpolation): встраивает переменную или выражение в строковый литерал.

main() - специальная, обязательная функция верхнего уровня, точка входа в приложение.

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

  • Все что вы можете разместить в переменной - это объект. Каждый объект является экземпляром класса. Даже numbers, functions, and null являются объектами (objects). Все объекты наследуются от класса Object.
  • Указание статических типов (например, num в предыдущем примере кода) включает статическую проверку при отладке кода. (Вы можете заметить, что при отладке кода, переменные без указанного типа получают специальный тип: dynamic).
    Указание статических типов является необязательным в Dart 1.x, однако Dart стремится к тому, чтобы быть полностью безопасным языком.
  • В режиме strong mode статические проверки и проверки времени выполнения (static and runtime checks) гарантируют, что ваш код безопасен по типу, что помагает отловить ошибки во время разработки, а не во время выполнения. Strong mode является опциональным в Dart 1.x, однако является не опциональным в Dart 2.
  • Dart анализирует весь код перед его запуском. Вы можете предоставить советы Dart - например, используя типы или compile-time constants - чтобы отловить ошибки или ускорить выполнение кода.
  • Dart поддерживает функции верхнего уровня (такие как main()), а также функции, привязанные к классу или объекту (статические и методы объекта). Так же можно создавать функции внутри функций (вложенные или локальные функции).
  • Аналогично, Dart поддерживает переменные верхнего уровня, а также переменные, привязанные к классу или объекту (статические и переменные экземпляра). Переменные экземпляра иногда называются полями или свойствами.
  • В отличие от Java, Dart не имеет ключевых слов public, protected, and private. Если идентификатор начинается с символа подчеркивания _, он является private to its library.
  • Идентификаторы могут начинаться с буквы или _, за которыми может следовать любая комбинация этих символов плюс цифры.
  • Иногда имеет значение, является ли что-то выражением (expression) или опнратором (statement).
  • Инструменты Dart могут сообщать о двух типах проблем: предупреждениях и ошибках. Предупреждения (warnings) - это всего лишь признаки того, что ваш код может не работать, но они не препятствуют выполнению вашей программы. Ошибки (errors) могут быть compile-time or run-time. Ошибка compile-time предотвращает выполнение кода вообще; ошибка run-time приводит к возникновению исключения при выполнении кода.
  • Dart 1.x имеет два режима работы: production and checked. Рекомендуется разрабатывать и отлаживать в режиме checked, а развертывать в режиме production. Режим production - это режим выполнения по умолчанию программы Dart, оптимизированный для скорости работы. Режим производства игнорирует assert statements and static types. Режим checked - это удобный режим для разработки, который помогает обнаружить ошибки определенного типа во время выполнения. Например, если присваивается не числовое значение для переменной, объявленной как num, в этом режиме будет сгенерировано исключение (exception).

Go to Dart tutorial