Јода услови

С Википедије, слободне енциклопедије
(преусмерено са Услови Јоде)

У програмирању, Јода услови или Јода нотација је стил програмирања у којем су два дела израза обрнута у односу на типични ред у услову. Јода услов поставља константан део израза на леву страну условне изјаве. Назив за овај стил програмирања потиче из франшизе Ратови звезда, од измишљеног лика по имену Јода, који говори енглески језик са нестандардном синтаксом.

Јода услови део су стандарда кодирања Симфонија[1] и Вордпреса.[2]

Пример[уреди | уреди извор]

Обично би се условна изјава написала као:

if ($value == 42) { /* ... */ }
// Чита се: "Ако је вредност $value једнака 42..."

Јода услови описују исти израз, али обрнуто:

if (42 == $value) { /* ... */ }
// Чита се: "Ако је 42 једнака вредности $value..."

Константа се пише лево од оператора поређења, а променљива, чија се вредност успоређује са константом, с десне стране. Овај ред упоредив је са нестандардним енглеским језиком којим прича Јода, који је отприлике облика објекат-субјекат-глагол[3] (нпр. „Девет стотина година кад напуниш, изгледаћеш не тако добро.“).[4][5]

Предност[уреди | уреди извор]

Постављање константне вредности у израз не мења понашање програма (осим ако вредности нису лажне — погледати испод). У програмским језицима који за доделу користе један знак једнакости ( = ), а не за поређења, могућа грешка је ненамерно додељивање вредности уместо писања условне изјаве.

if (mojBroj = 42) { /* ... */ }
// Ово додељује 42 променљивој mojBroj уместо провере услова

Коришћењем Јода услова:

if (42 = mojBroj) { /* ... */ }
// Ово је синтаксна грешка и неће бити компајлирано

Пошто је 42 константна и не може се мењати, ова грешка ће бити ухваћена од стране компајлера.

Boolean mojBoolean = true;
if (mojBoolean = null) { /* ... */ }
// Ово ствара NullPointerException, али пролази компајлирање

Такође се могу избећи неке врсте несигурног понашања null-а.

String mojString = null;
if (mojString.equals("foobar")) { /* ... */ }
// Ово изазива NullPointerException у јави

Са Јода условима:

String mojString = null;
if ("foobar".equals(mojString)) { /* ... */ }
// Ово је нетачно, као што је и очекивано

Критике[уреди | уреди извор]

Критичари Јода услова виде недостатак читљивости као недостатак који надмашује горе описане предности. Неки програмски језици, као што је Свифт, не дозвољавају додељивање променљивих унутар услова, дефинишући да додељивања не враћају вредност, у ком случају је немогуће направити такву грешку.[6] Многи преводиоци показују упозорење за код, као што је if (myNumber = 42) (нпр. опција ГЦЦ компајлера -Wall предлаже заграде око доделе која се користи као услов), што упозорава програмера на могућу грешку. У динамичким језицима, као што је јаваскрипт, линтер, као што је ЕСЛинт, може упозорити на доделу унутар услова.[7]

Предност избегавања понашања null-а такође се може сматрати недостатком, јер се грешке null показивача могу сакрити и појавити се много касније у програму.

Референце[уреди | уреди извор]

  1. ^ „Coding Standards (Contributing to Symfony)”. Symfony.com. Приступљено 12. 11. 2016. 
  2. ^ „PHP Coding Standards - Make WordPress Core”. make.wordpress.com. Приступљено 15. 08. 2019. 
  3. ^ Pullum, Geoffrey K. (18. 05. 2005). „Yoda's Syntax the Tribune Analyzes; Supply More Details I Will!”. Itre.cis.upenn.edu. Language Log. Приступљено 22. 12. 2014. „One way to look at Yoda's syntax is that it shows signs of favoring OSV syntax (Object-Subject-Verb) as the basic order in the simple clause. 
  4. ^ „The StarWars.com 10: Best Yoda Quotes”. starwars.com. Lucasfilm, Ltd. 26. 11. 2013. Приступљено 22. 12. 2014. „When nine hundred years old you reach, look as good you will not. 
  5. ^ „Quotes for Yoda (Character)”. imdb.com. Amazon. Архивирано из оригинала 12. 02. 2015. г. Приступљено 22. 12. 2014. „When nine hundred years old *you* reach, look as good *you* will not, hmm? 
  6. ^ „The Swift Programming Language (Swift 3.0.1): Basic Operators”. Developer.apple.com. 27. 10. 2016. Приступљено 12. 11. 2016. 
  7. ^ „disallow assignment operators in conditional statements”. eslint.org. Приступљено 17. 02. 2017. 

Спољашње везе[уреди | уреди извор]