WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Код-стайл 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

}

Плюсы:

Компактность

Ну да, так оно компактнее. Но получается как писать текст без абзацев и переносов строк.

Других плюсов я не вижу.

Кто что думает? Напишите плз в комментах.

2 комментария
    Войти