👨‍💻
Flutter
  • 👨‍💻Flutter lessons
    • 🎨Flutter ui
      • 🚵‍♂️Travel app
        • 📱1. Lesson
        • 📱2.Lesson
      • 📚Books store
      • 🧑‍⚕️Doctor app
      • 🚖Taxi app
    • 🐦Основы Flutter
      • Page 1
      • Page 2
      • 🧑‍🏫Урок 1: Основные виджеты Flutter
        • Page
        • 🧩Container()
        • 🧩AppBar()
        • 🧩Text()
        • 🧩Icon()
        • 🧩Column()
        • 🧩Row()
        • 🧩TextButton()
        • 🧩ElevatedButton()
      • 🧑‍🏫Урок 2: Создаем UI
      • 🧑‍🏫Урок 3: Создаем UI
      • 🧑‍🏫Урок 4: Создаем UI
    • 🧩Основы dart
      • 🧑‍🏫01. Переменные часть 1
      • 🧑‍🏫01. Переменные часть 2
      • 🧑‍🏫02. Функции
      • 🧑‍🏫03. Условные операторы
      • 🧑‍🏫04. List
      • 🧑‍🏫05. Map
      • 🧑‍🏫06. Class
      • 🧑‍🏫07. Наследование
      • 🧑‍🏫08. Абстракция
      • 🧑‍🏫09. Интерфейсы
      • 🧑‍🏫10. Инкапсуляция
      • 🧑‍🏫11. Mixin
      • 🧑‍🏫12. Асинхронное программирование
      • 🧑‍🏫13. Streams
      • 🎯Final project
        • 🥦Grocery app
        • 🏠Home
    • ⚒️State management
      • ⬛Bloc
        • 1. Введение cubit
          • 1.1 Пример
          • 1.2 Пример
          • 1.3 Пример
          • 1.4 Пример
          • 1.5 Пример
        • 2. Введение в Bloc
      • 🌊Riverpod
    • 🏠Architechture
      • Clean Architechture
      • Bloc
    • 📲Locale storage
      • 🐝Hive
        • 🐝Ui
        • 🐝Hive - локальное хранилище: Введение
        • 🐝Hive - task app: часть 1
        • 🐝Hive - task app: часть 2
        • 🐝Hive - task app: часть 3
        • 🐝Hive - task app: часть 4
        • 🐝Hive - task app: часть 5
      • 🟩Sql
    • 📡Server
      • 📡Server - Lesson01 introduction
      • 📡Server - Lesson02 get data
      • 📡Server - Lesson03 News App get data
    • 🖥️Готовый backend
      • Firebase
      • Supabase
  • 🎯Dart practise
    • 🧑‍💻Переменные
      • 🧑‍💻String
      • 🧑‍💻int
      • 🧑‍💻double
      • 🧑‍💻bool
    • 🧑‍💻Функции
      • 🧑‍💻Обычные функции
      • 🧑‍💻Порядковые параметры
      • 🧑‍💻Обязательные параметры
      • 🧑‍💻Параметры по умолчанию
      • 🧑‍💻Функции-стрелки
      • 🧑‍💻Возвращаемые функции
    • 🧑‍💻Условные операторы
      • 🧑‍💻if/else
      • 🧑‍💻switch/case
      • 🧑‍💻тернарный оператор
    • 🧑‍💻Структура данных
      • 🧑‍💻List
      • 🧑‍💻Map
      • 🧑‍💻Set
    • 🧑‍💻ООП
  • 🧩Flutter Widgets
    • 💻Все виджеты
    • 🎞️Анимации
      • 🧩AnimatedContainer
      • 🧩AnimatedOpacity
      • 🧩AnimatedAlign
      • 🧩AnimatedCrossFade
      • 🧩Hero
      • 🧩AnimatedBuilder
      • 🧩AnimatedPositioned
      • 🧩AnimatedSwitcher
    • 🏗️Манипуляция пространством
      • 🧩Padding
      • 🧩SizedBox
      • 🧩Align
      • 🧩Center
      • 🧩Expanded
      • 🧩Flexible
      • 🧩Spacer
      • 🧩Column
      • 🧩Stack
      • 🧩Row
    • ✍️Отображение текста
      • 🧩RichText
      • 🧩FittedBox
      • 🧩SelectableText
      • 🧩Text
    • 📸Отображение изображений
      • 🧩Image()
      • 🧩Image.network
      • 🧩Image.asset
      • 🧩Image.file
      • 🧩Image.memory
      • 🧩FadeInImage
      • 🧩NetworkImage
      • 🧩AssetImage
    • 📃Списки и прокрутка
      • 🧩ListView()
      • 🧩ListView.builder()
      • 🧩GridView()
      • 🧩GridView.builder()
      • 🧩PageView()
      • 🧩SingleChildScrollView
      • 🧩CustomScrollView
      • 🧩ReorderableListView
      • 🧩NestedScrollView
    • ⌨️Кнопки
      • 🧩TextButton()
      • 🧩ElevatedButton()
      • 🧩IconButton()
      • 🧩DropDownButton()
      • 🧩FloatingActionButton
      • 🧩Checkbox
      • 🧩Radio
      • 🧩Switch
      • 🧩Slider
    • 📝Формы и ввод данных
      • 🧩TextField()
      • 🧩TextFormField
      • 🧩Form
      • 🧩FormField
      • 🧩DatePicker
      • 🧩TimePicker
    • 🧑‍🏫Диалоги и всплывающие окна
      • 🧩AlertDialog
      • 🧩SimpleDialog
      • 🧩BottomSheet
      • 🧩ExpansionPanel
      • 🧩SnackBar
      • 🧩PopupMenuButton
      • 🧩Tooltip
      • 🧩Dialog
    • 🛣️Навигация
      • 🧩BottomNavigationBar()
      • 🧩Navigator
      • 🧩Drawer
      • 🧩TabBar
    • 📱Отображение на экране
      • 🧩Scaffold
      • 🧩Container()
      • 🧩AppBar()
      • 🧩Icon()
      • 🧩Stepper()
  • 🎮Flutter Flame
    • Введение в разработку игр
  • 🔬Flutter projects
  • 🧑‍🎓Homeworks for everyday
    • 🧑‍🎓0. Переменные
    • 🧑‍🎓1. Функции - 1
    • 🧑‍🎓2. Функции - 2
    • 🧑‍🎓3. Условные операторы
    • 🧑‍🎓4. List
    • 🧑‍🎓5. Map
    • 🧑‍🎓6. class
    • 🐝Hive -
    • 🐝Hive clean architecture
    • 📡HTTP
    • 📡HTTP clean architecture
    • 💾Firebase
    • 💾Firebase clean architecture
Powered by GitBook
On this page
  • Темы:
  • Что такое функция?
  • Возвращаемая функция
  • Примеры с String, int, bool, и Widget
  1. Flutter lessons
  2. Основы dart

02. Функции

Previous01. Переменные часть 2Next03. Условные операторы

Last updated 6 months ago

Темы:

Что такое функция?

Функция — это как рецепт или инструкция для выполнения какого-то конкретного действия. Например, если ты хочешь приготовить чай, то у тебя есть пошаговая инструкция, как это сделать: нагреть воду, положить чайный пакетик, добавить сахар. Функция в программировании работает точно так же: мы создаем "инструкцию" для выполнения определенного действия, и каждый раз, когда нужно, можем её "вызвать" и получить результат.

Зачем нужна функция?

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

Как создать функцию в 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:

  1. Обязательные параметры — такие параметры нужно передавать обязательно.

  2. Необязательные параметры — их можно пропустить, и у них могут быть значения по умолчанию.

  3. Значения по умолчанию — полезны, когда тебе нужно стандартное значение, если параметр не указан.

Эти примеры показывают, как функции взаимодействуют с Flutter-кодом, помогая создавать динамичные и удобные интерфейсы.

Возвращаемая функция

Возвращаемая функция — это функция, которая не просто выполняет действие, но и возвращает результат. Например, если тебе нужно что-то посчитать, ты можешь использовать возвращаемую функцию, которая после вычислений отдаст тебе результат. В Dart, чтобы указать, что функция что-то возвращает, вместо void мы пишем тип данных, который она вернет, например int, String, bool, или Widget.

Аналогия

Представь, что функция — это калькулятор. Когда ты вводишь числа и нажимаешь «=», калькулятор выполняет свои действия и возвращает тебе результат (например, сумму или разницу чисел). Если бы калькулятор просто выполнял операции, но не показывал результат, это не имело бы смысла. Возвращаемая функция работает так же: она производит расчеты или действия и возвращает результат, который ты можешь использовать в другом месте.

Теперь давай посмотрим на примеры в Flutter, каждый из которых будет использовать возвращаемые функции для разных типов данных.

Примеры с String, int, bool, и Widget

1. Пример с возвращаемым 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 (форматированное сообщение)

Функция возвращает строку с форматом сообщения.

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 (простое сложение)

Функция возвращает сумму двух чисел.

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 (длина строки)

Функция возвращает количество символов в строке.

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 (проверка числа)

Функция проверяет, является ли число четным.

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 (проверка возраста)

Функция проверяет, совершеннолетний ли пользователь.

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 (заголовок с текстом)

Функция возвращает виджет 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 (кнопка)

Функция возвращает виджет 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 (контейнер с цветом)

Функция возвращает виджет 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 методе для отображения данных на экране. Возвращаемые функции помогают делать код более гибким, повторно использовать элементы и легко изменять отображение, просто изменяя параметры функции.

👨‍💻
🧩
🧑‍🏫
Что такое функция?
Как создать функцию?
Примеры:
Возвращаемая функция: