0Pricing
Java Academy · Урок

Варианты с несколькими метками

Объединяйте несколько меток

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

Объединение меток

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

Метки, разделённые запятыми

Запишите значения одно за другим, разделяя их запятыми, перед ->. Если совпадёт хотя бы одно из них, выполнится эта ветка.

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

Определение гласных

Классический пример: объединить все гласные в одну ветку вместо написания пяти отдельных вариантов.

public class Main {
    public static void main(String[] args) {
        char c = 'o';
        switch (c) {
            case 'a', 'e', 'i', 'o', 'u' -> System.out.println("Vowel");
            default -> System.out.println("Consonant");
        }
    }
}

Несколько меток в выражениях

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

public class Main {
    public static void main(String[] args) {
        int month = 7;
        String season = switch (month) {
            case 12, 1, 2 -> "Winter";
            case 3, 4, 5 -> "Spring";
            case 6, 7, 8 -> "Summer";
            default -> "Autumn";
        };
        System.out.println(season);
    }
}

Объединение строковых меток

Строковые значения также можно объединять. Здесь несколько вариантов написания команды сопоставляются с одним действием.

public class Main {
    public static void main(String[] args) {
        String cmd = "quit";
        switch (cmd) {
            case "quit", "exit", "q" -> System.out.println("Closing");
            case "help", "h" -> System.out.println("Showing help");
            default -> System.out.println("Unknown command");
        }
    }
}

Объединение меток перечисления

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

public class Main {
    enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
    public static void main(String[] args) {
        Day d = Day.SAT;
        String kind = switch (d) {
            case SAT, SUN -> "Rest";
            default -> "Work";
        };
        System.out.println(kind);
    }
}

Без повторяющихся меток

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

public class Main {
    public static void main(String[] args) {
        int n = 2;
        switch (n) {
            case 1, 2 -> System.out.println("Low");
            case 3, 4 -> System.out.println("High");
            default -> System.out.println("Other");
        }
    }
}

По сравнению со старым проваливанием

В старом синтаксисе с двоеточиями объединение требовало размещать пустые варианты с проваливанием один над другим перед одним общим телом. Синтаксис с запятыми гораздо понятнее и предотвращает случайное проваливание.

public class Main {
    public static void main(String[] args) {
        int code = 3;
        switch (code) {
            case 1, 3, 5, 7, 9 -> System.out.println("Odd");
            case 0, 2, 4, 6, 8 -> System.out.println("Even");
        }
    }
}

Объединение с блоками

Вариант с объединёнными метками тоже может использовать тело-блок. Любая совпавшая метка запускает весь блок.

public class Main {
    public static void main(String[] args) {
        char grade = 'B';
        switch (grade) {
            case 'A', 'B' -> {
                System.out.println("Pass");
                System.out.println("Well done");
            }
            default -> System.out.println("Try again");
        }
    }
}

Сочетание с yield

Объединённые метки и yield работают вместе, когда общей ветке требуются вычисления.

public class Main {
    public static void main(String[] args) {
        int n = 4;
        int points = switch (n) {
            case 1, 2, 3 -> 10;
            case 4, 5, 6 -> {
                int bonus = n * 2;
                yield 20 + bonus;
            }
            default -> 0;
        };
        System.out.println(points);
    }
}

Преимущество для читаемости

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

public class Main {
    public static void main(String[] args) {
        int http = 204;
        String group = switch (http / 100) {
            case 1, 2, 3 -> "OK-ish";
            case 4, 5 -> "Error";
            default -> "Unknown";
        };
        System.out.println(group);
    }
}

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

Как в современной Java заставить несколько значений выполнять одну и ту же ветку switch?

Итоги

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

  • Перечисляйте значения через запятую перед ->
  • Это работает с типами int, символами, строками и перечислениями
  • В отличие от старого синтаксиса, случайного проваливания нет
  • Каждая метка может появиться только один раз
  • При необходимости сочетайте их с блоками и yield

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

Урок «Варианты с несколькими метками» бесплатный?

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

Чему я научусь в уроке «Варианты с несколькими метками»?

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

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

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

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

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

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

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

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

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