Условия Йоды - Yoda conditions
В программирование жаргон, Условия Йоды (также называемый Обозначение Йоды) это стиль программирования где две части выражения перевернуты от типичного порядка в Условный оператор. Условие Йоды помещает постоянную часть выражения в левую часть условного оператора. Название этого стиля программирования происходит от Звездные войны персонаж по имени Йода, ВОЗ говорит на английском с нестандартным синтаксисом.
Условия Йоды являются частью Symfony[1] и WordPress[2] стандарты кодирования.
Пример
Обычно условный оператор записывается как:
если ($ значение == 42) { /* ... */ }// Читается как: «Если значение равно 42 ...»
Условия Йоды описывают то же выражение, но в обратном порядке:
если (42 == $ значение) { /* ... */ }// Читается так: "Если 42 равно значению ..."
Константа пишется слева от оператор сравнения, а переменная, значение которой сравнивается с константой, записывается справа. Этот порядок сопоставим с нестандартным англоязычным стилем Йоды, который примерно объект – субъект – глагол[3] (например, «Когда ты достигнешь девятисот лет, ты не будешь выглядеть так хорошо».[4][5]).
Преимущество
Обнаружение ошибок
Размещение постоянного значения в выражении не меняет поведения программа (если значения не оцениваются как ложные - см. ниже). В языках программирования, использующих один знак равенства (=
) за назначение а не для сравнения, возможный ошибка заключается в непреднамеренном присвоении значения вместо написания условного оператора.
если (мой номер = 42) { /* ... */ }// Это присваивает 42 myNumber вместо оценки желаемого условия
Используя условия Йоды:
если (42 = мой номер) { /* ... */ }// Это синтаксическая ошибка и не будет компилироваться
Поскольку 42 - это постоянный и не может быть изменена, эта ошибка будет пойманный посредством компилятор.
Булево myBoolean = истинный;если (myBoolean = ноль) { /* ... */ }// Это вызывает исключение NullPointerException в среде выполнения Java, но допустимо при компиляции.
Как избежать некоторых типов небезопасного нулевого поведения
Условия Йоды помогают справиться с небезопасным поведением в некоторых ситуациях.
Нить myString = ноль;если (myString.равно("foobar")) { /* ... */ }// Это вызывает исключение NullPointerException в Java
С условиями Йоды:
Нить myString = ноль;если ("фубар".равно(myString)) { /* ... */ }// Это неверно, как и ожидалось
Выражая математику
Условия Йоды легче понять, если выражение представляет действительная числовая линия.
если -1 <= Икс <= 1:
Без йоды условий:
если ((Икс >= -1) && (Икс <= 1)) { /* ... */ }
С условиями йоды:
если ((-1 <= Икс) && (Икс <= 1)) { /* ... */ }
Критика
Условия Йоды широко критикуются за ухудшение читабельности за счет увеличения когнитивная нагрузка чтения кода.[6][7][8]
Некоторые языки программирования (например, Быстрый и версии Python ниже 3.8) не допускают присвоения переменных в условных выражениях - например, требуя, чтобы присвоения не возвращали значение, или путем определения как части их грамматика инвариант, что условия не могут содержать операторы присваивания - в этом случае с этой ошибкой невозможно столкнуться (то есть она будет обнаружена как синтаксическая ошибка парсером до того, как программе когда-либо будет разрешено войти в время выполнения ).[9] Многие компиляторы выдают предупреждение для кода, например если (myNumber = 42)
(например, GCC -Стена
вариант предупреждает предлагать скобки вокруг присвоения, используемого как значение истинности), который предупреждает программиста о вероятной ошибке. В динамических языках, таких как JavaScript, линтеры например, ESLint может предупреждать о назначении внутри условного.[10]
Преимущество предотвращения нулевого поведения также можно рассматривать как недостаток, поскольку ошибки нулевого указателя могут быть скрыты и появятся в программе гораздо позже.
Еще один недостаток появляется в C ++ при сравнении неосновных типов, поскольку == является оператором и может не быть подходящего перегруженный оператор функция определена. Пример: Microsoft CComBSTR
сравнить с строковый литерал, записанный как if (L "Привет" == cbstrMessage)
, не отображается на функцию перегрузки.[11]
Рекомендации
- ^ "Стандарты кодирования (вклад в Symfony)". Symfony.com. Получено 2016-11-12.
- ^ «Стандарты кодирования PHP - сделайте ядро WordPress». make.wordpress.com. Получено 2019-08-15.
- ^ Пуллум, Джеффри К. (18 мая 2005 г.). «Трибуна анализирует синтаксис Йоды; я расскажу подробнее!». Itre.cis.upenn.edu. Журнал языков. Получено 2014-12-22.
Один из способов взглянуть на синтаксис Йоды - это то, что он показывает признаки предпочтения синтаксиса OSV (Object-Subject-Verb) в качестве основного порядка в простом предложении.
- ^ "The StarWars.com 10: Лучшие цитаты Йоды". starwars.com. Лукасфильм, ООО 26.11.2013. Получено 2014-12-22.
Когда тебе исполнится девятьсот лет, ты не будешь выглядеть так хорошо.
- ^ «Цитаты для Йоды (Персонаж)». imdb.com. Amazon. Получено 2014-12-22.
Когда девятисотлетнему * ты * достигнешь, выглядеть так же хорошо * ты * не будешь, хм?
- ^ «Быстрые советы по снижению когнитивной нагрузки на ваш код». 21 марта 2017 года.
- ^ «Почему, вероятно, не стоит использовать условия Йоды». 2 августа 2017 года.
- ^ «Условия Йоды: почему вы не должны их использовать». 16 августа 2017 года.
- ^ «Язык программирования Swift (Swift 3.0.1): основные операторы». Developer.apple.com. 2016-10-27. Получено 2016-11-12.
- ^ "запретить операторы присваивания в условных операторах". eslint.org. Получено 2017-02-17.
- ^ «CComBSTR :: оператор». Msdn.microsoft.com. Получено 2016-11-12.
внешняя ссылка
- united-coders.com: Что такое условия Йоды? Примеры в Ява
- Новый жаргон программирования Упоминает условия Йоды в списке нового жаргона программирования.
- Кодирование в стиле Вероятное происхождение термина
- Условия Йоды на Яве Возможные подводные камни техники
- Условия Йоды, кажется, очень вредны. Как эта техника может принести больше вреда, чем пользы