Почему WordPress переворачивает условные операторы?

5 янв. 2013 г., 01:40:24
Просмотры: 611
Голосов: 7

В основном коде WordPress часто можно увидеть следующее:

if (1 == $someVar)

вместо такого варианта:

if ($someVar == 1)

Не знаю, является ли первый способ стилем кодирования, характерным для WordPress, но я заметил его только в коде WP (как в ядре, так и в сторонних плагинах).

20
Комментарии

Условия Йоды это.

fuxia fuxia
5 янв. 2013 г. 01:44:51

Второй способ легче для восприятия; первый помогает избежать ошибки с одиночным =

shea shea
5 янв. 2013 г. 01:50:01

Хм... почему это не по теме? Из комментариев к моему вопросу я узнал, что в WordPress рекомендуется использовать условия Йоды согласно [Кодексу] ( http://codex.wordpress.org/WordPress_Coding_Standards#Yoda_Conditions)

akTed akTed
5 янв. 2013 г. 03:01:47

@AKTed Это не по теме, потому что вопрос не специфичен для WordPress, это вопрос по PHP. Из FAQ: не специфично для WordPress (даже если возникает в его контексте)

Milo Milo
5 янв. 2013 г. 03:28:21

@Milo: Сначала я так подумал, но это действительно специфично для WordPress в контексте того, что WordPress включает это в свой Кодекс как то, как они хотят, чтобы это делалось. Это можно квалифицировать как вопрос по PHP, но мой вопрос был именно о том, что я заметил это в коде WP очень часто.

akTed akTed
5 янв. 2013 г. 04:56:20

@toscho & Milo: Мой вопрос соответствует [faq] в двух аспектах: 1. Он удовлетворяет разделу "WordPress - Stack Exchange предназначен для разработчиков и администраторов WordPress, чтобы задавать вопросы о:"... разработке и лучших практиках управления 2. Поскольку WordPress указывает условия Yoda в разделе Coding Standards Codex как предпочтительный метод кодирования, он не попадает под раздел faq "не специфичные для WordPress (даже если они происходят в его контексте)"

akTed akTed
5 янв. 2013 г. 05:12:06

@AKTed Пожалуйста, используйте [meta] для обсуждения нашей области.

fuxia fuxia
5 янв. 2013 г. 06:23:02

@toscho: У меня недостаточно репутации, чтобы спросить на Meta. Кроме того, ваше сообщение "закрыто как не по теме..." говорит мне оставлять "комментарии..." прямо здесь! Хотя я уверен, что это стандартное сообщение StackExchange для закрытия этого вопроса, по сути это вы это говорите. Так что мне делать? Я пока не могу использовать WP Meta, и, видимо, я не должен обсуждать это здесь (хотя "вы" сказали мне это делать!)?

akTed akTed
6 янв. 2013 г. 06:20:15

@AKTed Тебе нужно 5 баллов. Не говори, что это слишком много. :)

fuxia fuxia
6 янв. 2013 г. 06:23:11

Я настолько новенький здесь, что у меня их ещё нет :(

akTed akTed
6 янв. 2013 г. 06:23:45

И тому, кто поставил минус моему вопросу, почему? Потому что ты знал то, чего не знал я? Если так, то каждый вопрос должен быть заминусован. Фу, зря потратил время на эту ерунду.

akTed akTed
6 янв. 2013 г. 06:25:49

Иногда люди ставят минусы, если вопрос не особенно полезен для сайта. Не принимайте это слишком близко к сердцу; у вас же нет репутации, которую можно потерять ;)

shea shea
6 янв. 2013 г. 06:30:41

@bungeshea Извините, но этот тег не для этого. На самом деле, его здесь вообще не должно быть.

kaiser kaiser
6 янв. 2013 г. 06:54:58

Этот вопрос действительно соответствует теме, так как относится к документированным стандартам кодирования WordPress. Вопрос открыт заново и был дан соответствующий ответ.

EAMann EAMann
7 янв. 2013 г. 18:38:49

Вот так, отличный заголовок, отличный ответ, плюсы, Путь Stack ;)

brasofilo brasofilo
7 янв. 2013 г. 18:51:39

@brasofilo У меня сложилось впечатление, что "Путь Stack" был проиллюстрирован в этой ветке комментариев, по крайней мере до тех пор, пока EAMann не дал Ответ. :)

akTed akTed
7 янв. 2013 г. 18:54:37

@EAMann Формат ZIP тоже упоминается в Codex, так что это по теме здесь, верно?

fuxia fuxia
8 янв. 2013 г. 02:16:07

@toscho Сам формат ZIP — нет. Но вопросы о сжатии/распаковке файлов непосредственно из WordPress — потенциально да.

EAMann EAMann
8 янв. 2013 г. 02:22:27

Ладно, обычно я выступаю в роли "полиции тематики", но даже для меня это слишком педантично. Я бы сказал, что вопрос, который так точно соответствует WordPress Coding Standards, не только соответствует тематике WPSE, но и предоставляет отличную возможность подробно разъяснить соответствующий стандарт кодирования WordPress. Это была подача прямо по центру; к счастью, @EAMann это распознал и выбил мяч за пределы поля.

Chip Bennett Chip Bennett
9 янв. 2013 г. 01:43:16
Показать остальные 15 комментариев
Все ответы на вопрос 1
1
12

Этот стиль написания кода известен как Условие Йоды (Yoda Condition), и он не является специфичным для WordPress. Я использовал тот же стиль в коде на C++, C# и даже JavaScript.

Главное преимущество Условия Йоды в том, что оно предотвращает случайное присваивание значения из-за опечатки. Рассмотрим следующую (часто встречающуюся в реальном коде) опечатку:

if ( $some_variable = 1 ) {
    // ...
}

Это выражение всегда будет оцениваться как true, но имеет дополнительный эффект присваивания значения 1 переменной $some_variable. Хотя иногда это делается намеренно. В WordPress, в частности, вы часто можете увидеть:

if ( $post = some_function( $_POST['id'] ) ) {
    // ...
} else {
    // ...
}

Цель этого кода как раз в присваивании нового значения переменной $post, и он работает, потому что функция some_function() возвращает false в случае ошибки.

Условия Йоды (перестановка порядка оператора сравнения ==) защищают вас от случайного присваивания значений, когда вы этого не планировали. Если вы допустите ошибку и поставите только один = в коде, вы получите ошибку, потому что нельзя присваивать значение обычному литералу:

if ( 1 = $some_variable ) {
    // ...
}

Как я уже сказал, это не является уникальным для WordPress или даже для PHP, однако это часть обязательных стандартов кодирования WordPress. Если вы пишете плагин или тему для общего распространения или участвуете в разработке ядра, вам нужно знать, что такое Условия Йоды и как их использовать.

7 янв. 2013 г. 18:38:07
Комментарии

Спасибо за очень подробный ответ, очень признателен.

akTed akTed
7 янв. 2013 г. 18:50:04