Функции и переменные
Мы изучили базовые типы данные и можем повторить и расширить знания.
Язык программирования Dart, как и многие другие языки, имеет свои особенности при работе с переменными и функциями. В этой статье мы рассмотрим, как создавать переменные, какие ключевые слова для этого используются, а также познакомимся с основами работы с функциями и их параметрами.
Переменные в Dart
В Dart переменные можно создавать с использованием нескольких ключевых слов, в зависимости от типа данных, который будет храниться в переменной. Рассмотрим основные способы объявления переменных:
Определение, объявление, инициализация переменных
Definition, declaration, initialization
В Dart, как и в большинстве других языков переменные можно объявить, определить и инициализировать.
// Определение, объявление и инициализация переменных в Dart
void main() {
// Объявление и инициализация переменной с числовым значением
int age = 30;
// Объявление и инициализация переменной с текстовым значением
String name = "Иван";
// Объявление переменной без инициализации, позже присваиваем значение
double height;
height = 1.75;
// Вывод значений переменных
print("Имя: $name, Возраст: $age, Рост: $height");
}
С определением чуть сложнее, для этого нам надо не определять тип данных. И здесь на помощь приходит ключевое слово var.
1. var
— автоматический тип
Когда вы используете ключевое слово var
, Dart автоматически определяет тип переменной на основе присваиваемого значения:
var number = 10; // Тип будет автоматически определен как int
var name = 'Alice'; // Тип будет определен как String
var dynamicVar; // Тип будет определен как dynamic
var dynamicVar;. В этом случае переменная dynamicVar не имеет начального значения, поэтому её тип будет определён как dynamic. Это означает, что переменная может хранить значения любого типа в дальнейшем. При этом можно присваивать значения разных типов в одну переменную:
dynamic — это специальный тип в Dart, который позволяет переменной принимать любые значения, но с потерей статической типизации и проверок типов на этапе компиляции.
2. final — константа, доступная только для чтения
- Переменная, объявленная как final, может быть присвоена только один раз, и её значение нельзя изменить после присваивания.
- final не делает переменную константой во время компиляции, это значение только для чтения, которое можно изменить в случае, если переменная инициализируется в конструкторе или позднее.
final String greeting = 'Hello, world!';
final int number;
number = 10;
number = 15; // Ошибка: нельзя изменить значение константы
Если тебе нужно, чтобы переменная была константой во время компиляции (то есть её значение известно на этапе компиляции), используй const вместо final.
3. const — компиляционная константа
Если значение переменной известно во время компиляции и не изменяется, используйте ключевое слово const. Переменная с таким типом должна быть инициализирована в момент объявления:
const double pi = 3.14159;
Тем кто приходит из других языков. В Dart константы пишутся с маленькой буквы, а не с большой, как в других языках. const PI - ошибка.
Функции в Dart
Функции в Dart играют важную роль, поскольку позволяют инкапсулировать логику и многократно её использовать. Создание функции в Dart происходит следующим образом:
1. Объявление функции
Чтобы объявить функцию, необходимо указать тип возвращаемого значения, имя функции и параметры (если они есть). Рассмотрим пример функции, которая возвращает сумму двух чисел:
int add(int a, int b) {
return a + b;
}
В этом примере функция add принимает два параметра типа int и возвращает их сумму, которая также имеет тип int.
2. Параметры функции
Параметры функций могут быть обязательными или необязательными. В Dart параметры передаются в функцию в позиционном или именованном виде.
2.1 Позиционные параметры
Это стандартный способ передачи параметров в функцию. Параметры передаются в том порядке, в котором они указаны:
void greet(String name, int age) {
print('Hello, $name! You are $age years old.');
}
2.2 Именованные параметры
Если вы хотите, чтобы параметры были переданы по имени, можно использовать именованные параметры. В Dart именованные параметры должны быть заключены в фигурные скобки {}:
void greet({required String name, required int age}) {
print('Hello, $name! You are $age years old.');
}
Чтобы вызвать эту функцию, параметры нужно передавать по имени:
greet(name: 'Alice', age: 25);
2.3 Опциональные параметры
Опциональные параметры можно указать с использованием квадратных скобок []. Эти параметры могут быть null, если они не переданы:
void greet(String name, [int? age]) {
if (age != null) {
print('Hello, $name! You are $age years old.');
} else {
print('Hello, $name!');
}
}
3. Функции без возвращаемого значения
Если функция не возвращает значения, вместо типа данных указывается void. Например:
void printMessage() {
print('This is a message.');
}
Заключение
В Dart работа с переменными и функциями достаточно гибкая и позволяет создавать как простые, так и сложные конструкции. Выбор между var, final и const зависит от нужд вашего приложения, а типизация помогает сделать код более читаемым и удобным для разработки.
Домашнее задание
1. Функция для вычисления разности двух чисел
Задача: Напишите функцию, которая принимает два числа в виде именованных параметров и возвращает их разность (первое минус второе).
calculateDifference(a: 10, b: 5) → 5
calculateDifference(a: 5, b: 10) → -5
calculateDifference(a: 7, b: 7) → 0
2. Приветствие пользователя по имени и возрасту
Задача: Напишите функцию, которая принимает имя и возраст пользователя в виде именованных параметров и выводит сообщение с приветствием, например: “Привет, [имя]! Тебе [возраст] лет.”
greetUser(name: "Иван", age: 30) → "Привет, Иван! Тебе 30 лет."
greetUser(name: "Мария", age: 25) → "Привет, Мария! Тебе 25 лет."
3. Функция для вычисления площади круга
Задача: Напишите функцию, которая принимает радиус круга и вычисляет его площадь. Для этого используйте формулу: площадь = π * радиус^2.
calculateCircleArea(radius: 5) → 78.53981633974483
calculateCircleArea(radius: 2.5) → 19.634954084936208
4. Проверка, является ли число положительным, отрицательным или нулем
Задача: Напишите функцию, которая принимает число и возвращает строку: “Положительное”, “Отрицательное” или “Ноль” в зависимости от значения числа.
checkNumber(number: 5) → "Положительное"
checkNumber(number: -3) → "Отрицательное"
5. Функция для перевода температуры из градусов Цельсия в Фаренгейт
Задача: Напишите функцию, которая принимает температуру в градусах Цельсия и переводит её в градусы Фаренгейта по формуле: F = C * 9/5 + 32.
celsiusToFahrenheit(celsius: 0) → 32.0
celsiusToFahrenheit(celsius: 100) → 212.0
celsiusToFahrenheit(celsius: 25) → 77.0