Joda uslovi

S Vikipedije, slobodne enciklopedije

U programiranju, Joda uslovi ili Joda notacija je stil programiranja u kojem su dva dela izraza obrnuta u odnosu na tipični red u uslovu. Joda uslov postavlja konstantan deo izraza na levu stranu uslovne izjave. Naziv za ovaj stil programiranja potiče iz franšize Ratovi zvezda, od izmišljenog lika po imenu Joda, koji govori engleski jezik sa nestandardnom sintaksom.

Joda uslovi deo su standarda kodiranja Simfonija[1] i Vordpresa.[2]

Primer[uredi | uredi izvor]

Obično bi se uslovna izjava napisala kao:

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

Joda uslovi opisuju isti izraz, ali obrnuto:

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

Konstanta se piše levo od operatora poređenja, a promenljiva, čija se vrednost uspoređuje sa konstantom, s desne strane. Ovaj red uporediv je sa nestandardnim engleskim jezikom kojim priča Joda, koji je otprilike oblika objekat-subjekat-glagol[3] (npr. „Devet stotina godina kad napuniš, izgledaćeš ne tako dobro.“).[4][5]

Prednost[uredi | uredi izvor]

Postavljanje konstantne vrednosti u izraz ne menja ponašanje programa (osim ako vrednosti nisu lažne — pogledati ispod). U programskim jezicima koji za dodelu koriste jedan znak jednakosti ( = ), a ne za poređenja, moguća greška je nenamerno dodeljivanje vrednosti umesto pisanja uslovne izjave.

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

Korišćenjem Joda uslova:

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

Pošto je 42 konstantna i ne može se menjati, ova greška će biti uhvaćena od strane kompajlera.

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

Takođe se mogu izbeći neke vrste nesigurnog ponašanja null-a.

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

Sa Joda uslovima:

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

Kritike[uredi | uredi izvor]

Kritičari Joda uslova vide nedostatak čitljivosti kao nedostatak koji nadmašuje gore opisane prednosti. Neki programski jezici, kao što je Svift, ne dozvoljavaju dodeljivanje promenljivih unutar uslova, definišući da dodeljivanja ne vraćaju vrednost, u kom slučaju je nemoguće napraviti takvu grešku.[6] Mnogi prevodioci pokazuju upozorenje za kod, kao što je if (myNumber = 42) (npr. opcija GCC kompajlera -Wall predlaže zagrade oko dodele koja se koristi kao uslov), što upozorava programera na moguću grešku. U dinamičkim jezicima, kao što je javaskript, linter, kao što je ESLint, može upozoriti na dodelu unutar uslova.[7]

Prednost izbegavanja ponašanja null-a takođe se može smatrati nedostatkom, jer se greške null pokazivača mogu sakriti i pojaviti se mnogo kasnije u programu.

Reference[uredi | uredi izvor]

  1. ^ „Coding Standards (Contributing to Symfony)”. Symfony.com. Pristupljeno 12. 11. 2016. 
  2. ^ „PHP Coding Standards - Make WordPress Core”. make.wordpress.com. Pristupljeno 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. Pristupljeno 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. Pristupljeno 22. 12. 2014. „When nine hundred years old you reach, look as good you will not. 
  5. ^ „Quotes for Yoda (Character)”. imdb.com. Amazon. Arhivirano iz originala 12. 02. 2015. g. Pristupljeno 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. Pristupljeno 12. 11. 2016. 
  7. ^ „disallow assignment operators in conditional statements”. eslint.org. Pristupljeno 17. 02. 2017. 

Spoljašnje veze[uredi | uredi izvor]