DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > Programiranje
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

Programiranje Java, Perl, VB, ASP, .NET, C, C++, Pascal, Delphi Sponzor: VIP izazov 3

Odgovori
 
Alati teme Način prikaza
Staro 18. 01. 2012.   #1
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default Upotreba return u funkcijama - programerski stilovi

Davno kad sam na faxu imao Osnove programiranja insistiralo se da u funkciji sme da bude samo jedan return, na kraju funkcije. Medjutim sad dok sam pisao neki kod shvatio sam da ja to uopste vise ne postujem i da mi je mnogo pregledniji kod kad sve returne uradim sto pre (manje identacije, manje {} blokova)

Odnosno cini mi se da je to pravilo potpuna besmilica u modernim editorima koji imaju highlight search rezultata, pa je lako videti sve izlazne tacke iz funkcije, zapravo mnogo lakse nego traziti gde ce skociti neki break;

Znaci pricam o:
PHP kôd:
function bla() {

    if(
$a == 'nesto')
        return 
FALSE
    
    
do_something();

    return 
TRUE;

vs. "skolskog" pristupa:

PHP kôd:
function bla() {

    if(
$a != 'nesto') {
        
do_something();
        
$status TRUE;

    } else {
        
$status FALSE;
    }

    return 
$status;

Sta je po vama pravilniji i citljiviji kod? Kako vi pisete?

Ovo je php (ili javascript) u primeru, ali pitanje se odnosi na sve jezike...
__________________
Leadership is the art of getting people to want to do what you know must be done.

Poslednja izmena od ivanhoe : 18. 01. 2012. u 23:12.
ivanhoe je offline   Odgovorite uz citat
Staro 18. 01. 2012.   #2
Dragi Tata
dinosaurus
Master
 
Avatar Dragi Tata
 
Datum učlanjenja: 29.12.2005
Lokacija: Nova Engleska
Poruke: 636
Hvala: 79
263 "Hvala" u 66 poruka
Dragi Tata će postati "faca" uskoroDragi Tata će postati "faca" uskoroDragi Tata će postati "faca" uskoro
Default

То су више правила из Фортранских дана када си могао да имаш не само више излаза из функције (и то на различита места!) већ и разне улазе.
Dragi Tata je offline   Odgovorite uz citat
Staro 19. 01. 2012.   #3
salebab
profesionalac
Qualified
 
Avatar salebab
 
Datum učlanjenja: 10.11.2006
Lokacija: Beograd
Poruke: 102
Hvala: 19
21 "Hvala" u 18 poruka
salebab is on a distinguished road
Pošaljite ICQ poruku za salebab Pošaljite poruku preko MSN za salebab
Default

Preporučujem ti da pročitaš "Code Complete" knjigu ako već nisi. Tamo možeš naći slične nedoumice i mnogo pravih korisnih saveta

U ovakvom primeru meni je svakako bolji prvi način i ja ga skoro uvek koristim, ali postoje nekada situacije kada koristim i drugi, pa ću dati primere...

Problem kod drugog primera je što se vrlo lako da desiti da odeš u duboko ugnježdavanje, a ovakav stil kao u prvom primeru baš to sprečava. Nepotrebno je praviti taj drugi else blok u kome će biti iskodirana cela procedura, jer uglavnom unutar tog else bloka će stajati još neki if i za čas ti ode početak linije na sredinu monitora.

Generalno, što imaš manje ugnježdenih blokova, to je kod čitljiviji. Mislim da je Ričard Stalman rekao da je dobar kod onaj koji nema više od 3 ugnježdena bloka.

Međutim, drugi stil bih koristio kada zaista trebam neke realne podatke stavim u tu promenjivu $status. Tvoj primer je dosta jednostavan, ali recimo, ovo je sada izmišljeni primer kada je potrebno pratiti takav stil:

PHP kôd:
function json_get_user() {
  if(!empty(
$_POST['user_id'])) {
    
$user UserFactory::getById($_POST['user_id']);
    if(!empty(
$user)) {
       
$result['data'] = $user;
       
$result['status'] = 'ok';
    } else {
       
$result['status'] = 'fail';
       
$result['msg'] = 'User not exists';
    }
  } else {
    
$result['status'] = 'fail';
    
$result['msg'] = 'There is no user id';
  }

  return 
json_decode($result);

__________________
www.salebab.net

Poslednja izmena od salebab : 19. 01. 2012. u 00:17.
salebab je offline   Odgovorite uz citat
2 članova zahvaljuje salebab za poruku:
Staro 19. 01. 2012.   #4
robi-bobi
expert
Grand Master
 
Avatar robi-bobi
 
Datum učlanjenja: 05.10.2005
Lokacija: Sofia, Bulgaria
Poruke: 805
Hvala: 222
958 "Hvala" u 68 poruka
robi-bobi ima spektakularnu aururobi-bobi ima spektakularnu aururobi-bobi ima spektakularnu aururobi-bobi ima spektakularnu aururobi-bobi ima spektakularnu aururobi-bobi ima spektakularnu aururobi-bobi ima spektakularnu aururobi-bobi ima spektakularnu auru
Pošaljite poruku preko Skype™ za robi-bobi
Default

^ +1
kao da sam ja pisao, ali bolje objasnjeno
robi-bobi je offline   Odgovorite uz citat
Staro 19. 01. 2012.   #5
BluesRocker
profesionalac
Professional
 
Avatar BluesRocker
 
Datum učlanjenja: 21.06.2005
Poruke: 294
Hvala: 93
525 "Hvala" u 19 poruka
BluesRocker is on a distinguished roadBluesRocker is on a distinguished roadBluesRocker is on a distinguished roadBluesRocker is on a distinguished roadBluesRocker is on a distinguished roadBluesRocker is on a distinguished road
Default

Ja se ne slažem za ugnježdavanje. Ta pravila su možda važila u vreme 14-inčnih monitora i u vreme kada se štedela memorija. Danas, kad skoro svi imaju 22-inča ili veće sa HD rezolucijom stvarno ne vidim problem da imam normalan if - else sa vitičastim zagradama i kada imam samo jednu liniju koda. Preglednije je i lako mogu da ispišem neki tekst za debug ili da dodam još jednu linju koda u blok po potrebi.
__________________
/me sluša Ten Years After - Spider In My Web
BluesRocker je offline   Odgovorite uz citat
Staro 19. 01. 2012.   #6
degojs
I'm a PC too.
Wrote a book
 
Avatar degojs
 
Datum učlanjenja: 06.06.2005
Lokacija: Kanada
Poruke: 1.354
Hvala: 82
130 "Hvala" u 89 poruka
degojs će postati "faca" uskorodegojs će postati "faca" uskoro
Default

Kôd:
if($a == 'nesto')
        return FALSE;
Ja to stavim u jednu liniju:

Kôd:
if ($a=='nesto') return false;
__________________
Commercial-Free !!!
degojs je offline   Odgovorite uz citat
Staro 19. 01. 2012.   #7
ivanhoe
Ivan Dilber
Sir Write-a-Lot
 
Avatar ivanhoe
 
Datum učlanjenja: 18.10.2005
Lokacija: Bgd
Poruke: 5.320
Hvala: 104
2.344 "Hvala" u 583 poruka
ivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svimaivanhoe je ime poznato svima
Pošaljite poruku preko Skype™ za ivanhoe
Default

ok, nije to sto sam izostavio par zagrada oko if bila poenta, neko voli da ih pise, neko ne... pricao sam o zahtevu da se koristi samo jedan return, radi preglednosti koda...

Zapravo, cela stvar mi je pala na pamet jer sam nedavno procitao na minecraft blogu text u kome autor pominje kako su mu na nekom intervjuu zamerili sto nije "skolovani programer", pa zato ne vodi dovoljno racuna o konvencijama i best-practices savetima (koje bi valjda naucio na faxu da nije samouk)... malo mi je to zazvucalo kao bull****, koliko god njihovi fakulteti bili bolji od nasih, jer ono sto su mene ucili na faxu pre 15 godina, a skolovao sam se za programera, nije bas toliko krucijalno, a mnogo toga mislim da nije ni tacno, bar ne vise (kao recimo ovo za jedan return)
__________________
Leadership is the art of getting people to want to do what you know must be done.
ivanhoe je offline   Odgovorite uz citat
Staro 19. 01. 2012.   #8
srdjan
xyz
Grand Master
 
Datum učlanjenja: 25.10.2006
Poruke: 893
Hvala: 87
346 "Hvala" u 163 poruka
srdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu auru
Default

Citat:
Originalno napisao ivanhoe Pogledajte poruku
ok, nije to sto sam izostavio par zagrada oko if bila poenta, neko voli da ih pise, neko ne... pricao sam o zahtevu da se koristi samo jedan return, radi preglednosti koda...
Meni je čitljivost uvek pre nečije akademske definicije "lepote" koda.

Trudim se da odmah return-ujem ako to pojednostavljuje ostatak koda. Inače bi imao dodatna ugnježivanja ili administraciju result varijabli. To znači da mogu da mi se dese i jedan i drugi slučaj u istoj funkciji, ali ne mislim da je to loše.

Ne jednom sam koristio goto iz istog razloga... od nedavno stavljam komentar // kacam rasan

Osim naravno u situacijama kada je očigledno o čemu se radi (npr. @salebab-ov primer). Ja bih ga napisao ovako, prvo proveravam fail situacije i tako ih mentalno "brišem" i manje gledam gore-dole i uparujem zagrade

PHP kôd:
function json_get_user() {
  if(empty(
$_POST['user_id'])) {
    
$result['status'] = 'fail';
    
$result['msg'] = 'There is no user id';
  }
  else {
    
$user UserFactory::getById($_POST['user_id']);
    if(empty(
$user)) {
       
$result['status'] = 'fail';
       
$result['msg'] = 'User not exists';
    } else {
       
$result['data'] = $user;
       
$result['status'] = 'ok';
    }
  }

  return 
json_decode($result);


Poslednja izmena od srdjan : 19. 01. 2012. u 11:17.
srdjan je offline   Odgovorite uz citat
"Hvala" srdjan za poruku:
Staro 19. 01. 2012.   #9
tasmaniski
profesionalac
Professional
 
Datum učlanjenja: 08.11.2010
Poruke: 211
Hvala: 68
78 "Hvala" u 32 poruka
tasmaniski is on a distinguished road
Default

Slazem se sa @dinosaurus, mislim da je to zastareo coding standard...


U svakom slucaju
@degojs - mrzim kad neko tako napise if() uslov.
Po nekom mom standardu pisem ga ovako UVEK ovako

HTML kôd:
if($a == 'nesto'){
    return FALSE;
}
e sad to moze biti samo moje misljenje, ali koliko znam dosta standarda zabranjuje takvo pisanje if uslova... (pricam o C orijentisanim jezicima)
tasmaniski je offline   Odgovorite uz citat
Staro 19. 01. 2012.   #10
srdjan
xyz
Grand Master
 
Datum učlanjenja: 25.10.2006
Poruke: 893
Hvala: 87
346 "Hvala" u 163 poruka
srdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu aurusrdjan ima spektakularnu auru
Default

^ i ja to radim, ali više praktična stvar: možeš da staviš breakpoint na return
srdjan je offline   Odgovorite uz citat
"Hvala" srdjan za poruku:
Odgovori



Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum


Vreme je GMT +2. Trenutno vreme je 01:34.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.