Выражения, переменные и константы (MDFD0102)
Теперь, когда вы настроили среду разработки Dart, пришло время начать писать код Dart!
Следуйте примерам кодирования в этой главе. Просто создайте проект для собственного использования и вводите код по мере работы с примерами.
Комментирующий код
Dart, как и большинство других языков программирования, позволяет документировать ваш код с помощью комментариев. Они позволяют вам писать текст непосредственно рядом с вашим кодом, а компилятор игнорирует его.
Глубина и сложность кода, который вы пишете, могут скрыть детали общей картины того, почему вы написали свой код определенным образом или даже какую проблему решает ваш код. Чтобы предотвратить это, рекомендуется документировать то, что вы написали, чтобы следующий пользователь, который пройдет через ваш код, смог понять смысл вашей работы. В конце концов, этот следующий человек может стать вами в будущем!
Первый способ написать комментарий в Dart — начать строку с двух косых черт:
// This is a comment. It is not executed.
Это однострочный комментарий.
Вы можете складывать однострочные комментарии, чтобы можно было писать многострочные комментарии, как показано ниже:
// This is also a comment,
// over multiple lines.
Вы также можете создавать блоки комментариев, помещая текст вашего комментария между /*
и*/
:
/* This is also a comment. Over many...
many...
many lines. */
Начало обозначается /*
, а конец обозначается */
.
Dart также позволяет вам вставлять комментарии, например, так:
/* This is a comment.
/* And inside it is
another comment. */
Back to the first. */
В дополнение к этим двум способам написания комментариев, в Dart также есть третий тип, называемый комментариями к документации. Однострочные комментарии к документации начинаются с ///
, в то время как комментарии к блочной документации заключены между /**
и */
. Вот пример каждого:
/// I am a documentation comment
/// at your service.
/**
* Me, too!
*/
Комментарии к документации очень полезны, потому что вы можете использовать их для создания … как вы уже догадались … документации! Вы захотите добавлять комментарии к документации в свой код всякий раз, когда у вас есть общедоступный API, чтобы пользователи и вы сами в будущем знали, как работает ваш API. Хотя в этой книге не будет углубляться в это, комментарии к документации даже поддерживают форматирование Markdown, чтобы вы могли добавлять в свои комментарии такие элементы, как примеры кода или ссылки.
Примечание: API, или интерфейс прикладного программирования, — это код, которым вы делитесь с другими людьми или программами. Вы узнаете, как создать свой собственный API в Dart Apprentice: за пределами основ.
Документация Flutter и Dart хорошо известна своими подробными комментариями. И поскольку код для Flutter и Dart с открытым исходным кодом, простой просмотр его — отличный способ узнать, как написаны замечательные комментарии к документации.
На самом деле, вы можете попробовать просмотреть эту документацию прямо сейчас. Возьмите программу Hello Dart из главы 1 “Привет, Дарт!”.:
void main() {
print('Hello, Dart!');
}
В VS Code введите ключевое слово Command+Click на компьютере Mac или Control+Click на компьютере PCprint
. VS Code приведет вас к исходному коду для этого ключевого слова, и вы увидите комментарии к документации дляprint
:
Кстатиprint
, это еще один полезный инструмент при написании Dart-кода.
Выходные данные для печати
print
будет выводить все, что вы хотите, на консоль отладки.
Например, рассмотрим следующий код:
print('Hello, Dart Apprentice reader!');
Запустите этот код, и он выведет приятное сообщение на консоль отладки, например:
Добавление print
операторов в ваш код — это простой способ отслеживать, что происходит в определенной точке вашего кода. Позже, когда вы будете готовы перейти на следующий уровень отладки, вы можете ознакомиться с некоторыми более подробными пакетами ведения журнала на pub.dev.
Вы можете напечатать любое выражение в Dart. Однако, чтобы узнать, что такое выражение, продолжайте читать.
Заявления и выражения
Два важных слова, которые вы часто услышите в документации по языку программирования, — это оператор и выражение. Полезно понимать разницу между ними.
Заявления
Оператор — это команда, то, что вы приказываете компьютеру выполнить. В Dart все простые операторы заканчиваются точкой с запятой. Вы уже видели это в print
заявлении:
print('Hello, Dart Apprentice reader!');
Точка с запятой справа завершает оператор.
Люди, переходящие с языков, которые не требуют точек с запятой, могут подумать, что они не нужны. Однако из-за особого синтаксиса и особенностей Dart точки с запятой дают компилятору контекст, необходимый для правильного понимания кода.
В дополнение к простым операторам, Dart также содержит сложные операторы и блоки кода, которые используют фигурные скобки, но нет необходимости добавлять точки с запятой после фигурных скобок.
Одним из примеров сложного утверждения является if
утверждение:
if (someCondition) {
// code block
}
В строках с открывающими или закрывающими фигурными скобками точка с запятой не требуется. Вы узнаете больше об if
операторах и других операторах потока управления в главе 5 “Поток управления”.
Выражения
В отличие от утверждения, выражение не делает что-то; это что—то. То есть выражение — это значение или нечто, что может быть вычислено как значение.
Вот несколько примеров выражений в Dart:
42
3 + 2
'Hello, Dart Apprentice reader!'
x
Значения могут быть числами, текстом или каким-либо другим типом. Они могут быть даже переменными, такими как x
, значение которых неизвестно до времени выполнения.
Далее вы увидите еще много примеров выражений.
Арифметические операции
В этом разделе вы узнаете о различных арифметических операциях, которые предлагает Dart, увидев, как они применяются к числам. В последующих главах вы узнаете об операциях с типами, выходящими за рамки простых чисел.
Простые операции
Каждая операция в Dart использует символ, известный как оператор, для обозначения типа выполняемой операции. Вспомните четыре арифметических действия, которым вы научились в раннем школьном возрасте: сложение, вычитание, умножение и деление. Для выполнения этих простых операций Dart использует следующие операторы:
- Добавить:
+
- Вычтите:
-
- Умножать:
*
- Разделить:
/
Эти операторы используются следующим образом:
2 + 6
10 - 2
2 * 4
24 / 3
Каждая из этих строк является выражением, потому что каждая из них может быть вычислена с точностью до значения. В этих случаях все четыре выражения имеют одинаковое значение: 8
. Обратите внимание, что код выглядит так же, как если бы вы записывали операции ручкой и бумагой.
Проверьте ответы самостоятельно в VS Code, используя print
инструкцию:
print(2 + 6);
Примечание: Если вы напечатаете результат выражения
24 / 3
в VS Code, вы увидите8.0
, а не8
. Это потому, что вывод оператора деления равен adouble
. Подробнее об этом вы узнаетеdouble
позже в этой главе и в главе 3 “Типы и операции”.С другой стороны, если вы печатаете
24 / 3
на dartpad.dev, вы увидите только8
. Это потому, что в Интернете Dart компилирует ваш код в JavaScript, а JavaScript не делает различий между8
и8.0
.
Dart игнорирует пробелы, поэтому вы можете удалить пробелы, окружающие оператор:
2+6
Однако часто легче читать выражения, когда у вас есть пробелы с обеих сторон. Фактически, инструмент форматирования dart в Dart SDK отформатирует ваш код в соответствии со стандартными правилами форматирования пробелов. В VS Code вы можете подать dart format
заявку с помощью сочетания клавиш Shift + Option + F на Mac или Shift + Alt + F на ПК. В зависимости от настроек VS Code сохранение файла также может вызвать автоматическое форматирование.
Примечание: Эта книга не всегда будет явно указывать вам
print(X)
, гдеX
находится какое-либо выражение Dart, о котором вы изучаете, но вы должны предварительно сделать это самостоятельно, чтобы проверить значение.
Десятичные числа
Во всех приведенных выше операциях используются целые числа, более формально известные как целые числа. Однако, как вы знаете, не каждое число является целым.
Например, рассмотрим следующее:
22 / 7
Если вы привыкли к другому языку, который по умолчанию использует целочисленное деление, вы можете ожидать, что результат будет 3
. Однако Dart дает вам стандартный десятичный ответ:
3.142857142857143
Если вы действительно хотели выполнить целочисленное деление, то вы могли бы использовать ~/
оператор:
22 ~/ 7
Это приводит к результату 3
.
~/
Оператор официально называется оператором усечения деления, когда применяется к числам. Если прищуриться, тильда выглядит как слоновий хобот, так что это может помочь вам вспомнить, что она делает. Или нет.
Евклидова операция по модулю
В Dart также есть более сложные операции, которые вы можете использовать. Все они являются стандартными математическими операциями, просто не такими распространенными, как другие. Вы взглянете на них сейчас.
Первым из них является евклидова операция по модулю. Это сложное название для простой задачи. При делении знаменатель переходит в числитель целое число раз плюс остаток. Этот остаток — это то, что вычисляет евклидова операция по модулю. Например, 10 по модулю 3 равно 1, потому что 3 трижды превращается в 10 с остатком 1.
В Dart евклидов оператор по модулю является %
символом. Вы используете это так:
28 % 10
В этом случае результат равен 8, потому что 10 дважды переходит в 28 с остатком 8.
Порядок выполнения операций
Конечно, вполне вероятно, что при вычислении значения вам потребуется использовать несколько операторов. Вот пример того, как это сделать в Dart:
((8000 / (5 * 10)) - 32) ~/ (29 % 5)
Обратите внимание на использование круглых скобок, которые в Dart служат двум целям: дать понять любому, кто читает код, включая вас, что вы имели в виду, и устранить неоднозначность предполагаемого порядка операций.
Например, рассмотрим следующее:
350 / 5 + 2
Равно ли это 72
(350, деленное на 5, плюс 2) или 50
(350, деленное на 7)? Те из вас, кто обращал внимание в школе, кричат: “72”! И ты прав.
Dart использует те же рассуждения и достигает этого с помощью так называемого приоритета операторов. Оператор деления (/
) имеет более высокий приоритет, чем оператор сложения (+
), поэтому в этом примере код сначала выполняет операцию деления.
Если вы хотите, чтобы Dart сначала выполнил сложение — то есть, чтобы выражение возвращалось 50
вместо 72
— тогда вы могли бы использовать круглые скобки, например:
350 / (5 + 2)
Правила приоритета такие же, как вы изучали в школе. Умножение и деление имеют равный приоритет. Сложение и вычитание имеют одинаковый приоритет друг перед другом, но имеют более низкий приоритет, чем умножение и деление.
Операторы ~/
и %
имеют тот же приоритет, что и операции умножения и деления. Если вы когда-либо не уверены в том, какой приоритет имеет оператор, вы всегда можете использовать круглые скобки, чтобы быть уверенным, что выражение вычисляется так, как вы хотите.
Математические функции
Dart также имеет большой набор математических функций. Никогда не знаешь, когда тебе понадобится напрячь тригонометрические мышцы, особенно если ты профессионал в дартсе и пишешь сложные анимации!
Чтобы использовать эти математические функции, добавьте следующий импорт в начало вашего файла:
import 'dart:math';
dart:math
является одной из основных библиотек Dart. Добавление import
инструкции сообщает компилятору, что вы хотите использовать что-то из этой библиотеки.
Теперь вы можете написать следующее:
sin(45 * pi / 180)
// 0.7071067811865475
cos(135 * pi / 180)
// -0.7071067811865475
Они преобразуют угол из градусов в радианы, а затем вычисляют синус и косинус соответственно. Обратите внимание, как оба используютpi
, что постоянный Dart предоставляет вам. Мило!
Примечание: Помните, что если вы хотите увидеть значения этих математических выражений, вам нужно поместить их в
print(sin(45 * pi / 180));
Тогда есть это:
sqrt(2)
// 1.4142135623730951
Это вычисляет квадратный корень из 2
.
Не упомянуть об этом было бы стыдно:
max(5, 10)
// 10
min(-5, -10)
// -10
Они вычисляют максимальное и минимальное из двух чисел соответственно.
Если вы особенно предприимчивы, вы даже можете объединить эти функции следующим образом:
max(sqrt(2), pi / 2)
// 1.5707963267948966
Упражнение
Выведите значение из 1
квадратного корня из 2
. Подтвердите, что он равен синусу 45°
.
Это ваше первое упражнение. Ответы на эти вопросы вы можете найти в папке с заданиями в дополнительных материалах, прилагаемых к этой книге.
Присвоение имен данным
В самом простом смысле компьютерное программирование — это манипулирование данными, потому что все, что вы видите на экране, можно свести к числам. Иногда вы представляете данные и работаете с ними в виде различных типов чисел, но в других случаях данные поступают в более сложных формах, таких как текст, изображения и коллекции.
В вашем коде Dart вы можете присвоить каждой части данных имя, которое вы можете использовать для ссылки на эту часть данных позже. Имя содержит связанный с ним тип, который указывает, к какому типу данных относится имя, например, к тексту, числам или дате. Вы узнаете о некоторых основных типах в этой главе, и вы столкнетесь со многими другими типами на протяжении всей книги.
Переменные
Взгляните на следующее:
int number = 10;
Этот оператор объявляет переменную, вызываемую number
типа int
. Затем он устанавливает значение переменной в число 10
. int
Часть инструкции известна как аннотация типа, которая явно сообщает Dart, что это за тип.
Примечание: Возвращаясь к операторам, вот еще один. Знак равенства,
=
, известен как оператор присваивания, поскольку он присваивает значение переменной. Это отличается от знака равенства, с которым вы знакомы по математике. Этот знак равенства больше похож на==
оператор равенства в Dart, о котором вы узнаете в главе 5 “Поток управления”.
Переменная называется переменной, потому что ее значение может изменяться. Если вы хотите изменить значение переменной, то вы можете просто присвоить ей другое значение того же типа:
int number = 10;
number = 15;
number
начиналось как 10
, но затем сменилось на 15
.
Тип int
может хранить целые числа. Способ хранения десятичных чисел выглядит следующим образом:
double apple = 3.14159;
Это похоже на int
пример. На этот раз, однако, переменной является a double
, тип, который может хранить десятичные дроби с высокой точностью.
Читателям, знакомым с объектно-ориентированным программированием, будет интересно узнать, что 10
3.14159
и любое другое значение, которое вы можете присвоить переменной, являются объектами в Dart. На самом деле, в Dart нет примитивных типов переменных, которые существуют в некоторых языках. Все является объектом. Хотя int
и double
выглядят как примитивы, они являются подклассами num
, которые являются подклассом Object
.
Используя числа в качестве объектов, это позволяет вам делать некоторые интересные вещи:
10.isEven
// true
3.14159.round()
// 3
Примечание: Не волнуйтесь, если вы не знакомы с объектно-ориентированным программированием. Вы узнаете все об этом по мере прохождения этой серии книг.
Безопасность типа
Dart — это типобезопасный язык. Это означает, что как только вы сообщите Dart тип переменной, вы не сможете изменить его позже. Вот пример:
int myInteger = 10;
myInteger = 3.14159; // No, no, no. That's not allowed :]
3.14159
является a double
, но вы уже определили myInteger
как an int
. Никакие изменения не допускаются!
Безопасность типов Dart сэкономит вам бесчисленное количество часов при написании кода, поскольку компилятор немедленно сообщит вам, когда вы попытаетесь присвоить переменной неправильный тип. Это избавит вас от необходимости исправлять ошибки после сбоев во время выполнения.
Конечно, иногда полезно иметь возможность присваивать связанные типы одной и той же переменной. Это все еще возможно. Например, вы могли бы решить проблему выше, где вы хотите myNumber
сохранить как целое число, так и значение с плавающей запятой, например:
num myNumber;
myNumber = 10; // OK
myNumber = 3.14159; // OK
myNumber = 'ten'; // No, no, no.
num
Тип может быть либо an int
, либо a double
, поэтому первые два назначения работают. Однако строковое значение 'ten'
имеет другой тип, поэтому компилятор жалуется.
Теперь, если вам нравится жить в опасности, вы можете отбросить безопасность на ветер и использовать dynamic
type. Это позволяет вам назначить любой тип данных, который вам нравится, вашей переменной, и компилятор ни о чем вас не предупредит.
dynamic myVariable;
myVariable = 10; // OK
myVariable = 3.14159; // OK
myVariable = 'ten'; // OK
Но, честно говоря, не делай этого. Друзья не позволяют друзьям использовать dynamic
. Твоя жизнь слишком ценна для этого.
В главе 3 “Типы и операции” вы узнаете больше о типах.
Вывод типа
Дарт умен во многих отношениях. Вам даже не нужно указывать тип переменной, и Dart все равно может понять, что вы имеете в виду. var
Ключевое слово говорит Дарту: “Используйте любой подходящий тип”.
var someNumber = 10;
Нет необходимости указывать Dart, что 10
это целое число. Dart определяет тип и делает someNumber
int
. Тем не менее, безопасность типа по-прежнему применяется:
var someNumber = 10;
someNumber = 15; // OK
someNumber = 3.14159; // No, no, no.
Попытка установить someNumber
значение a double
приведет к ошибке. Ваша программа даже не будет компилироваться. Быстрый улов; сэкономленное время. Спасибо, Дарт!
Константы
Dart имеет два разных типа “переменных”, значения которых никогда не меняются. Они объявляются с const
final
помощью ключевых слов и, и в следующих разделах будет показана разница между ними.
Постоянные константы
Переменные, значение которых можно изменять, называются изменяемыми данными. Изменяемые файлы, безусловно, имеют свое место в программах, но также могут создавать проблемы. Легко потерять все места в вашем коде, которые могут изменить значение определенной переменной. По этой причине вы должны использовать константы, а не переменные, когда это возможно. Эти неизменяемые переменные известны как неизменяемые данные.
Чтобы создать константу в Dart, используйте const
ключевое слово:
const myConstant = 10;
Так жеvar
, как и в случае, Dart использует вывод типа, чтобы определить, что myConstant
это an int
.
Как только вы объявили константу, вы не можете изменить ее данные. Например, рассмотрим следующий пример:
const myConstant = 10;
myConstant = 0; // Not allowed.
Предыдущий код выдает ошибку:
Constant variables can't be assigned a value.
В VS Code вы бы увидели ошибку, представленную таким образом:
Если вы думаете, что “постоянная переменная” звучит немного оксюморонно, просто помните, что это в хорошей компании: виртуальная реальность, продвинутый БАЗОВЫЙ, читаемый Perl и интернет-безопасность.
Конечные константы
Часто вы знаете, что вам понадобится константа в вашей программе, но вы не знаете, каково ее значение во время компиляции. Вы узнаете значение только после запуска программы. Константа такого типа известна как константа времени выполнения.
В Dart const
используется только для констант времени компиляции; то есть для значений, которые могут быть определены компилятором до запуска программы.
Если вы не можете создать const
переменную, потому что вы не знаете ее значение во время компиляции, тогда вы должны использовать final
ключевое слово, чтобы сделать его константой времени выполнения. Есть много причин, по которым вы можете не знать значение до тех пор, пока ваша программа не будет запущена. Например, вам может потребоваться получить значение с сервера, или запросить настройки устройства, или попросить пользователя ввести свой возраст.
Вот еще один пример значения во время выполнения:
final hoursSinceMidnight = DateTime.now().hour;
DateTime.now()
это функция Dart, которая сообщает вам текущую дату и время выполнения кода. Добавление hour
к этому показывает количество часов, прошедших с начала дня. Поскольку этот код будет выдавать разные результаты в зависимости от времени суток, это, безусловно, значение времени выполнения. Итак, чтобы создать hoursSinceMidnight
константу, вы должны использовать final
ключевое слово вместо const
.
Если вы попытаетесь изменить final
константу после того, как она уже была установлена:
hoursSinceMidnight = 0;
это приведет к следующей ошибке:
The final variable 'hoursSinceMidnight' can only be set once.
На самом деле вам не нужно слишком беспокоиться о разнице между const
final
константами и . Как правило, const
сначала попробуйте, и если компилятор жалуется, то сделайте этоfinal
. Преимущество использования const
заключается в том, что оно дает компилятору свободу вносить внутренние оптимизации в код перед его компиляцией.
Однако, независимо от того, какая у вас переменная, вы должны уделять особое внимание тому, как вы ее называете.
Использование значимых имен
Всегда старайтесь выбирать значимые имена для ваших переменных и констант. Хорошие имена действуют как документация и делают ваш код легким для чтения.
Хорошее имя конкретно описывает роль переменной или константы. Вот несколько примеров хороших имен:
personAge
numberOfPeople
gradePointAverage
Часто плохое имя просто недостаточно красноречиво. Вот несколько примеров плохих имен:
a
temp
average
Ключ в том, чтобы убедиться, что вы поймете, к чему относится переменная или константа, когда будете перечитывать их позже. Не совершайте ошибку, думая, что у вас безошибочная память! В компьютерном программировании принято оглядываться на свой собственный код уже через день или два и забывать, что он делает. Упростите себе задачу, дав своим переменным и константам понятные и точные имена.
Кроме того, обратите внимание, как написаны приведенные выше имена. В Dart это стандартно используется lowerCamelCase
для имен переменных и констант. Следуйте этим правилам, чтобы правильно прописать свои имена:
- Начинайте со строчной буквы.
- Если имя состоит из нескольких слов, соедините их вместе и начинайте каждое слово после первого с заглавной буквы.
- Относитесь к аббревиатурам как к словам, например,
sourceUrl
иurlDescription
.
Упражнения
Если вы не выполняли эти упражнения в VS Code, сейчас самое время создать новый проект и попробовать несколько упражнений, чтобы проверить себя!
- Объявите константу типа
int
calledmyAge
и установите для нее свой возраст. - Объявите переменную типа
double
calledaverageAge
. Изначально задайте переменной свой собственный возраст. Затем установите его на среднее значение вашего возраста и возраста вашего лучшего друга. - Создайте вызываемую константу
testNumber
и инициализируйте ее любым целым числом, которое вы хотите. Затем создайте другую вызываемую константуevenOdd
и установите ее равной поtestNumber
модулю2
. Теперь изменитеtestNumber
на другие числа. На что вы обращаетеevenOdd
внимание ?
Увеличение и уменьшение
Обычная операция, которая вам понадобится, — это иметь возможность увеличивать или уменьшать переменную. В Dart это достигается следующим образом:
var counter = 0;
counter += 1;
// counter = 1;
counter -= 1;
// counter = 0;
Переменная счетчика начинается как 0
. Приращение устанавливает его значение равным 1
, а затем при уменьшении его значение возвращается к 0
.
Операторы +=
and -=
аналогичны оператору присваивания (=
), за исключением того, что они также выполняют сложение или вычитание. Они принимают текущее значение переменной, добавляют или вычитают заданное значение и присваивают результат обратно переменной.
Другими словами, приведенный выше код является сокращением для следующего:
var counter = 0;
counter = counter + 1;
counter = counter - 1;
Если вам нужно только увеличить или уменьшить значение на 1
, то вы можете использовать операторы ++
или--
:
var counter = 0;
counter++; // 1
counter--; // 0
Операторы *=
и /=
выполняют аналогичные операции для умножения и деления соответственно:
double myValue = 10;
myValue *= 3; // same as myValue = myValue * 3;
// myValue = 30.0;
myValue /= 2; // same as myValue = myValue / 2;
// myValue = 15.0;
Деление в Dart приводит к результату с типом double
, поэтому myValue
не может быть an int
.
Проблемы
Прежде чем двигаться дальше, вот несколько заданий для проверки ваших знаний о переменных и константах. Лучше всего, если вы попытаетесь решить их самостоятельно, но решения доступны в дополнительных материалах к этой книге, если вы застряли.
Задача 1: Изменчивые собаки
Объявите int
переменную с именем dogs
и установите ее равной количеству собак, которыми вы владеете. Затем представьте, что вы купили нового щенка, и увеличьте dogs
переменную на единицу.
Задача 2: заставить его скомпилироваться
Учитывая следующий код:
age = 16;
print(age);
age = 30;
print(age);
Измените первую строку, чтобы код компилировался. Вы использовали var
, int
, final
или const
?
Задача 3: Вычислите ответ
Рассмотрим следующий код:
const x = 46;
const y = 10;
Определите, чему равен каждый ответ, когда вы добавляете следующие строки кода к приведенному выше коду:
const answer1 = (x * 100) + y;
const answer2 = (x * 100) + (y * 100);
const answer3 = (x * 100) + (y / 10);
Задача 4: Средний рейтинг
Объявите три вызываемые константы rating1
rating2
и rating3
типа double
и присвоите каждой значение. Вычислите среднее значение из трех и сохраните результат в именованной константе averageRating
.
Задача 5: Квадратные уравнения
Квадратное уравнение имеет вид
a⋅x² + b⋅x + c = 0
.
Значения x
которых удовлетворяют этому, могут быть решены с помощью уравнения
x = (-b ± sqrt(b² - 4⋅a⋅c)) / (2⋅a)
.
Объявите три константы с именем a
b
и c
типом double
. Затем вычислите два значения для x
использования приведенного выше уравнения (отметив, что ±
означает плюс или минус, поэтому по одному значению x
для каждого). Сохраняйте результаты в константах, вызываемых root1
и root2
типа double
.
Ключевые моменты
- Комментарии к коду обозначаются строкой, начинающейся с
//
, или несколькими строками, заканчивающимися/*
и*/
. - Комментарии к документации обозначаются строкой, начинающейся с
///
или несколькими строками, заканчивающимися/**
и*/
. - Вы можете использовать
print
для записи в консоль отладки. - Арифметическими операторами являются:
Addition: +
Subtraction: -
Multiplication: *
Division: /
Integer division: ~/
Modulo (remainder): %
- Dart имеет множество функций, в том числе
min
,max
,sqrt
,sin
иcos
. - Константы и переменные дают имена данным.
- Как только вы объявили константу, вы не можете изменить ее данные, но вы можете изменить данные переменной в любое время.
- Если можно определить тип переменной, вы можете заменить тип
var
ключевым словом. const
Ключевое слово используется для констант времени компиляцииfinal
, в то время как используется для констант времени выполнения.- Всегда давайте переменным и константам осмысленные имена, чтобы избавить себя и своих коллег от головной боли позже.
- Следующие операторы выполняют арифметические вычисления, а затем присваивают обратно переменной:
Add and assign: +=
Subtract and assign: -=
Multiply and assign: *=
Divide and assign: /=
Increment by 1: ++
Decrement by 1: --
Куда идти дальше?
В этой главе вы узнали, что комментарии к документации поддерживают форматирование Markdown. Если вы не знакомы с Markdown, вам стоит потратить время на его изучение. Dart поддерживает CommonMark, поэтому commonmark.org это хорошее место для начала.
Говоря о документации, вам также стоит выработать привычку читать исходный код. Читайте его, как книгу, будь то исходный код Dart и Flutter или сторонняя библиотека. Это часто научит вас гораздо большему, чем вы можете узнать из других источников.
В следующей главе вы еще глубже погрузитесь в систему типов Dart. Увидимся там!