Статьи

Стандарты кодирования WordPress: троичный оператор и условия Yoda

На данный момент в серии мы рассмотрели много вопросов. До сих пор мы обсуждали следующие темы:

  • Соглашения об именах и аргументы функций
  • Использование одинарных и двойных кавычек
  • Отступы, использование пробелов и пробелы
  • Стиль скобок, регулярные выражения и теги PHP

Много вещей, верно?

В этой конкретной статье я подумала, что нам будет легче, прежде чем перейти к последней теме. Таким образом, мы рассмотрим две действительно простые темы (которые часто либо игнорируются, либо слишком усложняются).

В частности, мы поговорим о троичном операторе и поговорим об условиях Йоды.


Когда речь заходит о написании кода на основе WordPress, Стандарты кодирования строго говорят, что мы должны в первую очередь стремиться к читабельности. Прямо из Кодекса:

В целом, удобочитаемость важнее, чем ум или краткость.

Но в этом есть небольшой нюанс. Некоторые разработчики считают, что троичный оператор немного расходится с этим конкретным принципом именно потому, что это еще один способ написания оператора if/else , и если разработчик не знаком с написанием или чтением троичного оператора, он нарушение этого принципа.

Мы рассмотрим это более подробно в данный момент.


Во-первых, для тех, кто не знаком, троичный оператор — это упрощенный способ написания условного оператора if/else . Обычно он используется только в тех случаях, когда условное выражение имеет простейшую форму, и только в том случае, if имеется один блок if и единственный блок else .

Например, предположим, что у нас есть такое условие:

1
2
3
4
5
6
7
8
9
$uses_gasoline = null;
 
if ( ‘hybrid’ == $car_type ) {
    $uses_gasoline = false;
} else {
    $uses_gasoline = true;
}
 
echo $uses_gasoline;

Конечно, это немного надуманный пример, но вы поняли. В конце концов, я просто пытаюсь продемонстрировать, как преобразовать подобное условие в форму, используемую троичным оператором.

В соответствии с примером выше, вы можете сделать следующее:

1
2
$uses_gasoline = ‘hybrid’ == $car_type ?
echo $uses_gasoline;

Есть смысл? Важно отметить: троичный оператор проверяет истинность (а не ложь, очевидно).

Что бы это ни стоило, я считаю, что это очень похоже на чтение предложения. В первом пункте задается вопрос (очевидно, пунктирный знак вопроса), причем два возможных ответа возвращаются на основе оценки условного выражения.

Существует одно предостережение для проверки на истинность, все это задокументировано в Кодексе:

Исключением будет использование ! empty() ! empty() , так как тестирование на ложность здесь, как правило, более интуитивно понятно.

По моему опыту, это был единственный раз, чтобы использовать отрицательную оценку в условных. Все время, проведенное с троичным оператором, я обнаружил, что проверка на ложность часто затрудняет расшифровку троичной оценки.

Кроме того, я обнаружил, что лучше всего предоставить одну оценку и, возможно, две оценки при очень простых и ясных обстоятельствах.

Кроме этого, вы можете использовать троичный оператор в своей повседневной работе на WordPress.


Если вы внимательно следите, вы заметите, что я сделал то, что большинство языков программирования (или даже платформы на основе PHP вне WordPress) не делают регулярно:

Условное сравнение было сделано путем сравнения значения с переменной; не наоборот.

Традиционно мы увидим что-то вроде этого:

1
2
3
4
5
6
7
8
9
$uses_gasoline = null;
 
if ( $car_type == ‘hybrid’ ) {
    $uses_gasoline = false;
} else {
    $uses_gasoline = true;
}
 
echo $uses_gasoline;

И соответствующий троичный оператор будет выглядеть примерно так:

1
2
$uses_gasoline = $car_type == ‘hybrid’ ?
echo $uses_gasoline;

Так что, если большинство языков программирования и платформ не используют условия Yoda, то почему WordPress?

Согласно Кодексу:

В приведенном выше примере, если вы пропустите знак равенства (признайте, что это случается даже с самым опытным из нас), вы получите ошибку разбора, потому что вы не можете присвоить константу, такую ​​как true . Если бы оператор был наоборот ( $the_force = true ) , присваивание было бы совершенно правильным, возвращая 1 , в результате чего оператор if оценивался бы как true , и вы могли бы некоторое время преследовать эту ошибку.

На мой взгляд, это действительно очень хорошее объяснение для проведения подобных сравнений, особенно в динамически типизированных языках, таких как PHP и JavaScript.

Независимо от того, согласны ли вы с этим подходом или нет, он является частью стандарта, и вы увидите, что он будет использоваться в ядре WordPress, темах, плагинах, статьях и многом другом.

Для этого я настоятельно рекомендую начать внедрять в свою работу.


Как я уже упоминал в начале, этот конкретный пост будет гораздо проще и понятнее, чем некоторые другие материалы, которые мы рассмотрели в этой серии.

На данный момент у нас есть только еще одна важная тема: запросы к базе данных.

После этого мы сделаем обзор всех тем, которые мы наметили в этой серии, чтобы обобщить принципы, которые мы подробно изложили в стандартах кодирования.

Но сначала перейдем к запросам к базе данных.