0Pricing
Java Academy · Урок

switch как выражение

Возвращайте значения из switch

«switch как выражение» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Операторы и выражения

Оператор выполняет действие. Выражение выдаёт значение. Современная Java позволяет использовать switch как выражение, поэтому его результат можно напрямую присвоить переменной.

Присваивание результата switch

Когда switch находится справа от =, каждая ветка задаёт значение. В стрелочной форме значение после -> возвращается автоматически.

public class Main {
    public static void main(String[] args) {
        int day = 6;
        String type = switch (day) {
            case 6, 7 -> "Weekend";
            default -> "Weekday";
        };
        System.out.println(type);
    }
}

Точка с запятой после блока

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

public class Main {
    public static void main(String[] args) {
        int n = 2;
        int doubled = switch (n) {
            case 1 -> 2;
            case 2 -> 4;
            default -> 0;
        };
        System.out.println(doubled);
    }
}

Полнота вариантов

Выражение switch должно охватывать каждое возможное значение. Для большинства типов это означает необходимость включить ветку default, иначе код не скомпилируется.

public class Main {
    public static void main(String[] args) {
        int score = 85;
        char grade = switch (score / 10) {
            case 10, 9 -> 'A';
            case 8 -> 'B';
            case 7 -> 'C';
            default -> 'F';
        };
        System.out.println(grade);
    }
}

Для перечислений default не нужен

Если в switch по перечислению охвачены все константы, компилятор знает, что варианты исчерпаны. Ветка default становится необязательной.

public class Main {
    enum Dir { NORTH, SOUTH, EAST, WEST }
    public static void main(String[] args) {
        Dir d = Dir.EAST;
        String label = switch (d) {
            case NORTH -> "Up";
            case SOUTH -> "Down";
            case EAST -> "Right";
            case WEST -> "Left";
        };
        System.out.println(label);
    }
}

Непосредственный возврат

Метод может напрямую return выражение switch, что позволяет создавать краткие методы поиска.

public class Main {
    static int sides(String shape) {
        return switch (shape) {
            case "triangle" -> 3;
            case "square" -> 4;
            case "pentagon" -> 5;
            default -> 0;
        };
    }
    public static void main(String[] args) {
        System.out.println(sides("square"));
    }
}

Числовые результаты

Ветки могут возвращать числа, выполнять арифметические операции или вызывать методы. Каждая ветка должна выдавать значение того же типа, что и присваиваемая переменная.

public class Main {
    public static void main(String[] args) {
        int month = 2;
        int days = switch (month) {
            case 2 -> 28;
            case 4, 6, 9, 11 -> 30;
            default -> 31;
        };
        System.out.println("Days: " + days);
    }
}

Использование результата на месте

Значение выражения switch можно использовать сразу, например внутри вызова println.

public class Main {
    public static void main(String[] args) {
        int code = 1;
        System.out.println("Status: " + switch (code) {
            case 0 -> "OK";
            case 1 -> "Warning";
            default -> "Error";
        });
    }
}

Согласованность типов

Все ветки должны использовать один тип результата. Если одна ветка возвращает int, а другая — String, код не скомпилируется. Следите, чтобы типы в ветках совпадали.

public class Main {
    public static void main(String[] args) {
        int n = 3;
        double factor = switch (n) {
            case 1 -> 0.5;
            case 2 -> 1.0;
            default -> 1.5;
        };
        System.out.println(factor);
    }
}

Замена цепочек тернарных операторов

Выражение switch часто читается понятнее вложенных тернарных операторов, когда одно значение преобразуется во множество результатов.

public class Main {
    public static void main(String[] args) {
        int rating = 4;
        String stars = switch (rating) {
            case 1 -> "*";
            case 2 -> "**";
            case 3 -> "***";
            case 4 -> "****";
            default -> "*****";
        };
        System.out.println(stars);
    }
}

Сочетание с переменными

Результат выражения switch можно использовать в дальнейших вычислениях, как и любое другое значение.

public class Main {
    public static void main(String[] args) {
        int tier = 2;
        int discount = switch (tier) {
            case 1 -> 5;
            case 2 -> 10;
            default -> 0;
        };
        int price = 100 - discount;
        System.out.println("Price: " + price);
    }
}

Проверка знаний

Почему выражение switch обычно должно включать ветку default?

Итоги

Вы научились использовать switch как выражение:

  • Оно выдаёт значение, которое можно присвоить или вернуть
  • Завершайте присваивание точкой с запятой
  • Оно должно охватывать все варианты (обычно требуется default)
  • Для перечислений, охватывающих все константы, default не нужен
  • Все ветки должны иметь один и тот же тип результата

Часто задаваемые вопросы

Урок «switch как выражение» бесплатный?

Да — полный текст урока «switch как выражение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «switch как выражение»?

Возвращайте значения из switch Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «switch как выражение»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Стиль switch со стрелкой
  2. switch как выражение
  3. Ключевое слово yield
  4. Варианты с несколькими метками
← Назад к Java Academy