🧑🏫02. Функции
Темы:
Что такое функция?
Функция — это как рецепт или инструкция для выполнения какого-то конкретного действия. Например, если ты хочешь приготовить чай, то у тебя есть пошаговая инструкция, как это сделать: нагреть воду, положить чайный пакетик, добавить сахар. Функция в программировании работает точно так же: мы создаем "инструкцию" для выполнения определенного действия, и каждый раз, когда нужно, можем её "вызвать" и получить результат.
Зачем нужна функция?
Функция помогает избегать повторений и делает код организованным и понятным. Вместо того чтобы писать одни и те же действия много раз, ты можешь создать функцию и просто вызывать её там, где нужно.
Как создать функцию в Dart
В Dart функция начинается с ключевого слова void
(если она не возвращает никакого значения) или с указания типа данных, если функция должна что-то вернуть (например, число или текст). Затем идет имя функции, круглые скобки для параметров (если они есть), и фигурные скобки {}
для действий, которые она выполняет.
Пример простой функции:
void sayHello() {
print("Hello, world!");
}
Здесь void
указывает, что функция ничего не возвращает, sayHello
— имя функции, а print("Hello, world!")
— это то, что она делает.
Теперь давай посмотрим на примеры в Flutter с различными параметрами и настройками:
Примеры:
Пример 1: Функция без параметров
void showGreeting() {
print("Привет, Flutter!");
}
@override
Widget build(BuildContext context) {
showGreeting(); // Вызов функции
return Text("Смотри консоль для приветствия");
}
Здесь showGreeting
просто выводит сообщение. В Flutter можно вызвать её в любом месте, где это необходимо.
Пример 2: Функция с обязательным параметром
Параметры – это как ингредиенты для рецепта. Когда функция нуждается в каком-то конкретном значении, это можно передать через параметр.
void greetUser(String name) {
print("Привет, $name!");
}
@override
Widget build(BuildContext context) {
greetUser("Алиса"); // Передаем "Алиса" как обязательный параметр
return Text("Смотри консоль для приветствия");
}
Здесь greetUser
принимает имя как обязательный параметр name
. Функция не выполнится правильно без этого параметра.
Пример 3: Функция с необязательным параметром
Иногда параметр можно пропустить — это необязательный параметр, и он указывается в квадратных скобках []
.
void greet([String name = "друг"]) {
print("Привет, $name!");
}
@override
Widget build(BuildContext context) {
greet(); // Выводит "Привет, друг!"
greet("Алиса"); // Выводит "Привет, Алиса!"
return Text("Смотри консоль для приветствия");
}
В этом примере, если greet
вызывается без имени, по умолчанию будет использовано значение "друг".
Пример 4: Функция с несколькими параметрами, включая обязательный и необязательный
Ты можешь использовать и обязательные, и необязательные параметры в одной функции.
void orderCoffee(String type, [String size = "средний"]) {
print("Вы заказали $size $type кофе.");
}
@override
Widget build(BuildContext context) {
orderCoffee("капучино"); // Выводит "Вы заказали средний капучино кофе."
orderCoffee("латте", "большой"); // Выводит "Вы заказали большой латте кофе."
return Text("Смотри консоль для заказа");
}
Здесь type
обязателен, а size
необязателен и имеет значение по умолчанию "средний".
Пример 5: Функция с несколькими параметрами, указание на действие
Когда функции должны что-то выполнять в интерфейсе, они могут управлять поведением виджетов.
void showMessage(String message) {
print(message);
}
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
showMessage("Кнопка была нажата!"); // Функция вызывается при нажатии кнопки
},
child: Text("Нажми меня"),
);
}
Здесь функция showMessage
вызывается, когда кнопка нажата, и выводит сообщение в консоль.
Резюме
Функции помогают структурировать код, избегая повторений. Вот основные типы параметров в Dart:
Обязательные параметры — такие параметры нужно передавать обязательно.
Необязательные параметры — их можно пропустить, и у них могут быть значения по умолчанию.
Значения по умолчанию — полезны, когда тебе нужно стандартное значение, если параметр не указан.
Эти примеры показывают, как функции взаимодействуют с Flutter-кодом, помогая создавать динамичные и удобные интерфейсы.
Возвращаемая функция
Возвращаемая функция — это функция, которая не просто выполняет действие, но и возвращает результат. Например, если тебе нужно что-то посчитать, ты можешь использовать возвращаемую функцию, которая после вычислений отдаст тебе результат. В Dart, чтобы указать, что функция что-то возвращает, вместо void
мы пишем тип данных, который она вернет, например int
, String
, bool
, или Widget
.
Аналогия
Представь, что функция — это калькулятор. Когда ты вводишь числа и нажимаешь «=», калькулятор выполняет свои действия и возвращает тебе результат (например, сумму или разницу чисел). Если бы калькулятор просто выполнял операции, но не показывал результат, это не имело бы смысла. Возвращаемая функция работает так же: она производит расчеты или действия и возвращает результат, который ты можешь использовать в другом месте.
Теперь давай посмотрим на примеры в Flutter, каждый из которых будет использовать возвращаемые функции для разных типов данных.
Примеры с String
, int
, bool
, и Widget
String
, int
, bool
, и Widget
1. Пример с возвращаемым String
String
Представим, что функция возвращает имя пользователя.
import 'package:flutter/material.dart';
class UserNameScreen extends StatefulWidget {
@override
_UserNameScreenState createState() => _UserNameScreenState();
}
class _UserNameScreenState extends State<UserNameScreen> {
String getUserName() {
return "Alice";
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("User Name"),
),
body: Center(
child: Text("Привет, ${getUserName()}!"),
),
);
}
}
Здесь функция getUserName()
возвращает строку "Alice"
. Этот текст используется в виджете Text
, чтобы показать приветствие.
2. Пример с возвращаемым String
(форматированное сообщение)
String
(форматированное сообщение)Функция возвращает строку с форматом сообщения.
import 'package:flutter/material.dart';
class WelcomeScreen extends StatefulWidget {
@override
_WelcomeScreenState createState() => _WelcomeScreenState();
}
class _WelcomeScreenState extends State<WelcomeScreen> {
String createWelcomeMessage(String name) {
return "Добро пожаловать, $name!";
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Welcome"),
),
body: Center(
child: Text(createWelcomeMessage("Боб")),
),
);
}
}
Функция createWelcomeMessage
принимает параметр name
и возвращает приветственное сообщение.
3. Пример с возвращаемым int
(простое сложение)
int
(простое сложение)Функция возвращает сумму двух чисел.
import 'package:flutter/material.dart';
class SumScreen extends StatefulWidget {
@override
_SumScreenState createState() => _SumScreenState();
}
class _SumScreenState extends State<SumScreen> {
int add(int a, int b) {
return a + b;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Сумма чисел"),
),
body: Center(
child: Text("Сумма 3 и 5: ${add(3, 5)}"),
),
);
}
}
Функция add
принимает два числа и возвращает их сумму.
4. Пример с возвращаемым int
(длина строки)
int
(длина строки)Функция возвращает количество символов в строке.
import 'package:flutter/material.dart';
class StringLengthScreen extends StatefulWidget {
@override
_StringLengthScreenState createState() => _StringLengthScreenState();
}
class _StringLengthScreenState extends State<StringLengthScreen> {
int getStringLength(String text) {
return text.length;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Длина строки"),
),
body: Center(
child: Text("Длина строки 'Flutter': ${getStringLength("Flutter")}"),
),
);
}
}
Функция getStringLength
возвращает длину переданной строки.
5. Пример с возвращаемым bool
(проверка числа)
bool
(проверка числа)Функция проверяет, является ли число четным.
import 'package:flutter/material.dart';
class EvenNumberScreen extends StatefulWidget {
@override
_EvenNumberScreenState createState() => _EvenNumberScreenState();
}
class _EvenNumberScreenState extends State<EvenNumberScreen> {
bool isEven(int number) {
return number % 2 == 0;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Проверка четности"),
),
body: Center(
child: Text("Число 4 четное? ${isEven(4)}"),
),
);
}
}
Функция isEven
возвращает true
, если число четное, и false
— если нечетное.
6. Пример с возвращаемым bool
(проверка возраста)
bool
(проверка возраста)Функция проверяет, совершеннолетний ли пользователь.
import 'package:flutter/material.dart';
class AgeCheckScreen extends StatefulWidget {
@override
_AgeCheckScreenState createState() => _AgeCheckScreenState();
}
class _AgeCheckScreenState extends State<AgeCheckScreen> {
bool isAdult(int age) {
return age >= 18;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Проверка возраста"),
),
body: Center(
child: Text("Возраст 20 лет: Совершеннолетний? ${isAdult(20)}"),
),
);
}
}
Функция isAdult
возвращает true
, если возраст равен или больше 18.
7. Пример с возвращаемым Widget
(заголовок с текстом)
Widget
(заголовок с текстом)Функция возвращает виджет Text
с заданным текстом.
import 'package:flutter/material.dart';
class HeaderScreen extends StatefulWidget {
@override
_HeaderScreenState createState() => _HeaderScreenState();
}
class _HeaderScreenState extends State<HeaderScreen> {
Widget buildHeader(String text) {
return Text(text, style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Заголовок"),
),
body: Center(
child: buildHeader("Заголовок страницы"),
),
);
}
}
Функция buildHeader
возвращает виджет Text
с заданным стилем.
8. Пример с возвращаемым Widget
(кнопка)
Widget
(кнопка)Функция возвращает виджет ElevatedButton
.
import 'package:flutter/material.dart';
class ButtonScreen extends StatefulWidget {
@override
_ButtonScreenState createState() => _ButtonScreenState();
}
class _ButtonScreenState extends State<ButtonScreen> {
Widget buildButton(String label) {
return ElevatedButton(
onPressed: () {
print("Кнопка нажата");
},
child: Text(label),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Кнопка"),
),
body: Center(
child: buildButton("Нажми меня"),
),
);
}
}
Функция buildButton
возвращает кнопку ElevatedButton
с заданным текстом.
9. Пример с возвращаемым Widget
(контейнер с цветом)
Widget
(контейнер с цветом)Функция возвращает виджет Container
с заданным цветом.
import 'package:flutter/material.dart';
class ColorBoxScreen extends StatefulWidget {
@override
_ColorBoxScreenState createState() => _ColorBoxScreenState();
}
class _ColorBoxScreenState extends State<ColorBoxScreen> {
Widget buildColorBox(Color color) {
return Container(
width: 100,
height: 100,
color: color,
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Цветной блок"),
),
body: Center(
child: buildColorBox(Colors.blue),
),
);
}
}
Функция buildColorBox
возвращает контейнер (Container
) с заданным цветом.
Объяснение
Каждая функция возвращает результат, который используется в build
методе для отображения данных на экране. Возвращаемые функции помогают делать код более гибким, повторно использовать элементы и легко изменять отображение, просто изменяя параметры функции.
Last updated