🧑‍🏫03. Условные операторы

Темы:

Условные операторы в программировании — это способы задать программе разные действия в зависимости от условий. Они помогают "проверить" ситуации и сделать правильный выбор, как, например, на развилке дорог: если нам нужно налево, мы идем налево, а если направо — идем направо.

Зачем нужны условные операторы?

Представь, что ты выбираешь, какую обувь надеть. Если на улице дождь, ты выбираешь резиновые сапоги, а если солнечно — кроссовки. Условные операторы помогают программе делать такие же выборы: выполнять одну задачу, если что-то правда, и другую — если нет.

Основные условные операторы в Dart:

  1. if / else

  2. Тернарный оператор

  3. switch / case


1. if / else

if и else позволяют программе проверять, истинно ли условие, и выполнять определенные действия в зависимости от этого.

Аналогия

Представь, что ты решаешь, что надеть:

  • Если на улице тепло, ты надеваешь футболку.

  • Если холодно, надеваешь свитер.

Пример 1 использования if / else в коде

int temperature = 15;

void checkTemperature() {
  if (temperature > 20) {
    print("Надень футболку");
  } else {
    print("Надень свитер");
  }
}

Здесь if проверяет, больше ли температура 20 градусов. Если да, то выводится сообщение “Надень футболку”, если нет — “Надень свитер”.

Пример 2: if / else в Flutter

В этом примере мы проверяем, является ли число четным или нечетным, используя if / else. На экране отображается результат.

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: IfElseExample(),
    );
  }
}

class IfElseExample extends StatefulWidget {
  @override
  _IfElseExampleState createState() => _IfElseExampleState();
}

class _IfElseExampleState extends State<IfElseExample> {
  int number = 4;

  String checkEvenOdd(int num) {
    if (num % 2 == 0) {
      return "Четное число";
    } else {
      return "Нечетное число";
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('If/Else Example')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Число: $number'),
            SizedBox(height: 20),
            Text(checkEvenOdd(number), style: TextStyle(fontSize: 24)),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  number++;
                });
              },
              child: Text('Увеличить число'),
            ),
          ],
        ),
      ),
    );
  }
}

Объяснение:

  • Функция checkEvenOdd(int num) проверяет, является ли число четным или нечетным.

  • На экране отображается текущее число и его статус (четное или нечетное).

  • Кнопка "Увеличить число" увеличивает number, и экран обновляется.


2. Тернарный оператор

Тернарный оператор — это сокращенная версия if / else. Он использует ? и : для проверки условия и выполнения действий.

Аналогия

Представь, что ты выбираешь десерт:

  • Если есть пирог, ты его берешь.

  • Если пирога нет, ты берешь мороженое.

Пример 1 использования тернарного оператора в коде

bool hasCake = true;
String dessert = hasCake ? "Пирог" : "Мороженое";
print("Выбранный десерт: $dessert");

Здесь hasCake — это условие. Если оно истинно, выбирается "Пирог", иначе — "Мороженое".

Пример 2: Тернарный оператор в Flutter

Этот пример проверяет, является ли пользователь совершеннолетним, используя тернарный оператор, и отображает сообщение на экране.

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TernaryOperatorExample(),
    );
  }
}

class TernaryOperatorExample extends StatefulWidget {
  @override
  _TernaryOperatorExampleState createState() => _TernaryOperatorExampleState();
}

class _TernaryOperatorExampleState extends State<TernaryOperatorExample> {
  int age = 16;

  String checkAge(int age) => age >= 18 ? "Совершеннолетний" : "Несовершеннолетний";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Ternary Operator Example')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Возраст: $age'),
            SizedBox(height: 20),
            Text(checkAge(age), style: TextStyle(fontSize: 24)),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  age++;
                });
              },
              child: Text('Увеличить возраст'),
            ),
          ],
        ),
      ),
    );
  }
}

Объяснение:

  • Функция checkAge(int age) использует тернарный оператор, чтобы вернуть "Совершеннолетний" или "Несовершеннолетний".

  • На экране отображается возраст и его статус.

  • Кнопка увеличивает возраст, обновляя экран.


3. switch / case

switch / case используется, когда нужно проверить одно и то же значение на несколько возможных вариантов. Он помогает упростить код, если if / else начинает разрастаться.

Аналогия

Представь, что у тебя есть расписание на неделю, и в зависимости от дня недели ты выполняешь разные задачи:

  • В понедельник — тренировка.

  • Во вторник — занятия.

  • В среду — встречи.

Пример использования switch / case в коде

String day = "Понедельник";

void checkSchedule() {
  switch (day) {
    case "Понедельник":
      print("Сегодня тренировка");
      break;
    case "Вторник":
      print("Сегодня занятия");
      break;
    case "Среда":
      print("Сегодня встречи");
      break;
    default:
      print("Свободный день");
  }
}

Здесь switch проверяет значение переменной day и выводит сообщение в зависимости от дня.

Пример 2: switch / case в Flutter

Этот пример показывает дни недели в зависимости от выбранного дня, используя switch / case.

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SwitchCaseExample(),
    );
  }
}

class SwitchCaseExample extends StatefulWidget {
  @override
  _SwitchCaseExampleState createState() => _SwitchCaseExampleState();
}

class _SwitchCaseExampleState extends State<SwitchCaseExample> {
  int dayNumber = 1;

  String getDayOfWeek(int day) {
    switch (day) {
      case 1:
        return "Понедельник";
      case 2:
        return "Вторник";
      case 3:
        return "Среда";
      case 4:
        return "Четверг";
      case 5:
        return "Пятница";
      case 6:
        return "Суббота";
      case 7:
        return "Воскресенье";
      default:
        return "Неизвестный день";
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Switch Case Example')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Номер дня: $dayNumber'),
            SizedBox(height: 20),
            Text(getDayOfWeek(dayNumber), style: TextStyle(fontSize: 24)),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  dayNumber = dayNumber < 7 ? dayNumber + 1 : 1;
                });
              },
              child: Text('Следующий день'),
            ),
          ],
        ),
      ),
    );
  }
}

Объяснение:

  • Функция getDayOfWeek(int day) использует switch / case, чтобы возвращать день недели в зависимости от значения dayNumber.

  • На экране отображается номер дня и соответствующее название дня недели.

  • Кнопка "Следующий день" увеличивает номер дня, обновляя экран.


Основные моменты:

  • if / else: проверка условий с двумя вариантами (или больше с else if).

  • Тернарный оператор: короткий способ проверки, подходит для простых условий.

  • switch / case: удобен для множественного выбора, особенно если одно значение может иметь несколько вариантов.

Last updated