Skip to content

Функции и переменные

Мы изучили базовые типы данные и можем повторить и расширить знания.

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

Переменные в 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 происходит следующим образом:

Функции в 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
14 февр. 2025 г.
andron13