Java Pattern Matching

Java Pattern Matching

miniJUG

В Java появится паттерн-матчинг.

Паттерн-матчинг (сопоставление с образцом) является довольно популярной синтаксической конструкцией, которая есть практически во всех функциональных языках. За годы их существования эта конструкция уже настолько доказала свою пользу и необходимость, что начала проникать и в известные императивные языки. И теперь очередь дошла и до Java: паттерн-матчинг получил свой JEP и был включён в проект Amber, где ведётся исследование и разработка будущих языковых улучшений. Помимо паттерн-матчинга там также есть локальный вывод типов (var), data-классы, подчёркивания, улучшенные перечисления, перекрытия лямбда-параметров и т.д.

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

if (value instanceof Integer) {

int i = (Integer) value;

System.out.println(“int %d”, i);

}

Такая конструкция является довольно громоздкой и чреватой ошибками. Паттерн-матчинг решает эту проблему с помощью нового оператора matches:

if (value matches Integer i) {

System.out.println(“int %d”, i);

}

Кроме того, паттерн-матчинг можно будет сделать с помощью улучшенного оператора switch:

switch (value) {

case Integer i: System.out.println(“int %d”, i); break;

...

}

Также в будущем планируется развить идею паттерн-матчинга ещё больше и добавить матчинг с деструктуризацией, а также позволить оператору switch возвращать значение:

При всей своей привлекательности введение паттерн-матчинга порождает ряд вопросов, которые на данный момент ожидают ответа:

 Области видимости

 Перекрытие переменными паттерна других переменных

 Матчинг null’а

 Матчинг примитивных типов

 Матчинг generic-типов

Некоторые из этих вопросов кажутся действительно сложными, и это вызывает некое опасение, что паттерн-матчинг в Java может быть отложен на неопределённое время или полностью отвергнут, как это произошло с Enhanced Enums. Однако мы будем надеяться, что этого не произойдёт, и разработчики языка смогут решить вышеописанные проблемы.

Обсудить новость

Подписаться на канал в Telegram


Report Page