Код-стайл if…else конструкций
В принятом PSR-12 кодстайле if/else одни минусы, кто так придумал, почему везде так пишут, я не могу понять. Такой же стиль используется и в WP, и еще очень много где. Но давайте по порядку.
Минусы:
1) Невозможно по человечески написать комментарий к блоку
Да, комментарии к таким блокам пишутся очень редко и скорее это код который нужно отрефакторить (вынести в отдельный метод или что-то еще), но все же иногда пишутся и это выгляидт чудовищно!
Пример из ядра WP:
Еще пример.
Какой код по вашему выглядит логичнее и лучше читается?
if ( isset( $_GET['post_id'] ) ) { $calling_post_id = absint( $_GET['post_id'] ); } elseif ( count( $_POST ) ) { // Like for async-upload where $_GET['post_id'] isn't set. $calling_post_id = $post->post_parent; }
Или (тут вообще непонятно к какому блоку относится коммент, можно догадываться только вникнув в код).
if ( isset( $_GET['post_id'] ) ) { $calling_post_id = absint( $_GET['post_id'] ); // Like for async-upload where $_GET['post_id'] isn't set. } elseif ( count( $_POST ) ) { $calling_post_id = $post->post_parent; }
Многие предпочитают писать так:
if ( isset( $_GET['post_id'] ) ) { $calling_post_id = absint( $_GET['post_id'] ); } elseif ( count( $_POST ) ) { // Like for async-upload where $_GET['post_id'] isn't set. $calling_post_id = $post->post_parent; }
Я предпочитаю и пишу так (по-моему вопросов тут никаких не возникает и возникнуть не может):
if ( isset( $_GET['post_id'] ) ) { $calling_post_id = absint( $_GET['post_id'] ); } // Like for async-upload where $_GET['post_id'] isn't set. elseif ( count( $_POST ) ) { $calling_post_id = $post->post_parent; }
2) Свернуть любой блок просто невозможно!


А так все прекрасно сворачивается:


3) Неудобное удаление и комментирование
Невозможно удалять строками, потому что закрывающую скобку нужно оставить. Если блок нужно удалть, то можно случайно удалить скобку.
Да, любой статический анализатор или IDE это поймает и подсветит (хотя не всегда это заметишь), но это же просто потенциальная опасность и неудобство. Какой-нибудь хотфикс от новичка на сервере и получим fatal error из-за незакрытой скобки.
Кроме того во время работы бывает нужно закомментировать одно из условий и что-то проверить, и тут опять неудобства:
А так все удобно:
4) Читаемость
Это скорее вкусовщина, но все же.
При сворачивании всех блоков читаемость просто никакая
Я не знаю кто как, но я иногда сворачиваю весь код и разворачиваю основную часть, чтобы пройтись по логическим частям кода и быстро просмотреть из чего он состоит (методы, функции, конструкции if...else, и т.д.). Далее, если нужно разворачиваю вложенную часть чтобы прочитать что внутри.
Так вот при сворачивании таких конструкций, читать свернутое просто невозможно, а также нет возможности свернуть просмотренный блок вручную (можно только развернуть). Все это просто какой-то кошмар! В такие моменты я просто ненавижу этот стиль написание if...else.
А вот когда на отдельных строках, все читается отлично!
И прекрасно разворачивается и сворачивается.
Визуально новый блок начинается там же, где закончился старый.
С одной стороны логично - единая конструкция. А с другой, это все же разные логические части программы и зачем следующую часть начинать на той же строке, где заканчивается предыдущая. Это как писать вложенные друг в друга функции - плохая же практика.
Например, так же писать нехорошо:
$value = array_filter( array_map( 'sanitize_text_field', wp_list_pluck( $array, 'field' ) ) );
Тоже вроде единая конструкция, но такое лучше разделить на строки:
$value = wp_list_pluck( $array, 'field' ); $value = array_map( 'sanitize_text_field', $value ); $value = array_filter( $value );
Быстрое восприятие.
Опять же вкусовщина, но обратимся к логике абстрагируясь от вкусов.
Если чисто по левым символам ориентироваться (а глаз по идее так и делает когда быстро просматриваешь), то получается не очень, как по мне:

if } } } }
А так уже логично:

if } elseif } elseif } else }
Плюсы:
Компактность
Ну да, так оно компактнее. Но получается как писать текст без абзацев и переносов строк.
Других плюсов я не вижу.
Кто что думает? Напишите плз в комментах.