Как вы могли заметить, в последнее время мне очень часто приходится работать с Kotlin: Cron, Buggregator и конечно MetaStorm!
Синтаксис Kotlin очень нравится:
- C-like синтаксис, сразу всё понятно
- Как Java, только менее многословная, очень немногословная Java!
- Короткие синтаксические конструкции
- Система типов. Есть дженерики, но нет дизъюнкции и конъюнкции типов 😲
- Интересная схема “расширения” классов
В общем, когда изучал конструкции различных плагинов в Open source увидел, что в Котлине можно делать так:
$var = $nullableVar ?: return
Вместо привычного
$var = $nullableVar
if ($var == null) {
return
}
Вопрос 3-х строк, но написав подобное более 100 раз без этого сахарка уже не то.
Более того, помимо
return можно использовать и другие управляющие конструкции: break и continue.Возвращаясь к работе на PHP я уже по привычке начинаю так писать, но на PHP так писать нельзя. Пока что 😁
Я давно привык писать код с “early return”: когда в самом начале проверяется код на различные условия, а дальше выполняется логика метода с полностью валидным состоянием.
Подобные операции на пару десятков строк можно было бы схлопнуть несколько раз!
Лаконичный и выразительный код, это ускорение и упрощение чтения. Когда ты не дочитывая конструкции до конца уже понимаешь однозначность намерения, когда где-нибудь в неудобном месте не приходится дублировать десяток проверок, чтобы сделать наконец-то этот
return null;!Примеры:
$result = $condition ? $a : return;
$result = $conditionA ? $a : ($conditionB ? $b : break);
$result = $condition ?? return;
$result = $condition ?? break;
и любые другие комбинации ваших выражений, даже такие как эти:
"string" . 1 + throw throw throw throw throw throw new Exception("exception");
Да, синтаксически это полностью валидный код в PHP, хоть и выглядит как 💩
Я решил добавить пару подобных тест-кейсов в PHP: Pull request.
В общем, надеюсь скоро подобный код можно будет писать и
return, break и continue:
function test() {
return return return return return throw throw throw throw new Exception();
}
✔️ Подписка на PHP Internals
✔️ Попросить милостыню: https://news-web.php.net/php.internals/126252
✔️ Proof of Concept: https://github.com/php/php-src/pull/17647
🚫 RFC: как разрешат создавать RFC, так и создам
Как вы оцениваете такую возможность?
Когда-то было тоже самое с
throw конструкция. Пора и другим подтягиваться?—
@handle_topic