Умови ЙодиУмови Йоди (від англ. Yoda conditions), або нотація Йоди (англ. Yoda notation) у жаргоні програмістів — «безпечний» стиль запису виразів порівняння при програмуванні мовами з Сі-синтаксисом, що полягає у написанні спочатку значення змінної, а потім - самої змінної. Такий запис дозволяє виявити на етапі компіляції і виправити помилку, властиву подібним мовам — операцію присвоєння Названо на честь магістра Йоди зі всесвіту «Зоряних воєн», який має манеру змінювати порядок слів фрази. Суть нотаціїУ класичній нотації перевірка змінної на рівність певній константі записується так (приклад мовою PHP): if ( $variable == 52 ) {
/* дії, що виконуються, якщо змінна дорівнює 52 */
}
тобто змінна, операція порівняння і константа. Дана конструкція вразлива щодо відомої помилки: if ( $variable = 52 ) { // ПОМИЛКА: ПРИСВОЄННЯ змінній значення 52
/* дії, що виконуються ЗАВЖДИ */
}
Такий код є синтаксично правильним, і при неналежному тестуванні може залишитися у програмі на тривалий час і стати причиною значної вразливості. При застосуванні нотації Йоди змінну і константу міняють місцями, так що константа виявляється ліворуч: if ( 52 == $variable ) {
/* дії, що виконуються, якщо змінна дорівнює 52 */
}
При такій нотації у випадку описки в операторі порівняння виходить синтаксично некоректне присвоєння константі і програма не буде працювати, поки помилка не буде знайдена і виправлена. if ( 52 = $variable ) { // ПОМИЛКА при компіляції
/* ... */
}
Альтернативне використання нотаціїНотація Йоди також застосовна при розв'язанні проблеми небезпечної «нульової поведінки» (англ. unsafe null behavior) наприклад (приклад мовою Java): String myString = null;
if ( myString.equals("foobar") ) { // Викликає NullPointerException
/* ... */
}
При застосуванні нотації Йоди: String myString = null;
if ( "foobar".equals(myString) ) { // Результат - Хибність
/* не виконується */
}
Переваги та недолікиВикористання нотації Йоди не дозволяє програмам мовами C++, Java, PHP тощо працювати за наявності помилок у виразах порівняння (поведінку програми ця модифікація не змінює). Деякі програмісти вважають застосування даної нотації «ознакою гарного тону»[1]. До недоліків нотації відносять складність написання, модифікації й читання програми, а також вузьку галузь застосування — тільки перевірка рівності, тільки порівняння з константою. Сучасні інструментальні засоби розробки (компілятори, редактори) дозволяють відслідковувати і видавати попередження за наявності присвоєння в керувальній конструкції, вважаючи його потенційно помилковим. Помилка |