Programmeringssprog og if-sætningninger - "negative" eller "positive"
Hej alle jer gode mennesker
Jeg har et spørgsmål, som egentlig ikke har specifikt noget at gøre med GNU/Linux. Men i diverse programmeringssprog, nu særlig fokus på C++/Qt, hvad er så "best practice" når man anvender if-sætninger. Er det at anvende den "positive" eller "negative" tilgang.
Altså hvis dette sker, så gør dette - eller at hvis dette ikke sker, da afslut (return). Herunder to simple kodeeksempler (kunne f.eks. være i en metode)
"Positive"
"Negative"
Jeg er bevidst om, at der kan være grunde til at anvende det ene eller det andet. Men er der nogen fordele eller ulemper ved den ene frem for den anden? Nu tænker jeg særligt på memory, og læsbarhed.
På forhånd tak.
Jeg har et spørgsmål, som egentlig ikke har specifikt noget at gøre med GNU/Linux. Men i diverse programmeringssprog, nu særlig fokus på C++/Qt, hvad er så "best practice" når man anvender if-sætninger. Er det at anvende den "positive" eller "negative" tilgang.
Altså hvis dette sker, så gør dette - eller at hvis dette ikke sker, da afslut (return). Herunder to simple kodeeksempler (kunne f.eks. være i en metode)
"Positive"
if(a==0)
{
//Gør dette
}
"Negative"
if(a != 0)
{
return;
}
//Gør dette, hvis er nul.
Jeg er bevidst om, at der kan være grunde til at anvende det ene eller det andet. Men er der nogen fordele eller ulemper ved den ene frem for den anden? Nu tænker jeg særligt på memory, og læsbarhed.
På forhånd tak.
Kommentarer6
Jeg mener at have læst et
F.eks. manden er høj er bedre end manden er ikke lav.
re: Jeg mener at have læst et
Det kortsluttede min hjerne så meget at jeg efter et par forsøg helt opgav at besvare undersøgelsen :-o
Nu nærlæste jeg lige dit
Se derfor denne:
http://softwareengineering.stackexchange.com/questions/18454/should-i-r…
@denmagisketangopirat, det
Men ja, mit eksempel er nok (kan jeg se) ret meget som i det link du har henvist til. Så det kigger jeg lige lidt nærmere på. :)
Det er et lidt svært
Min holdning er at man skal vurdere det i hvert enkelt tilfælde. Det kommer an på om man er tilhænger af at returnere hurtigt eller returnere én gang.
f.eks.:
public int CalculateSomething(int x, int y) {
if (x == 0) {
return 0;
}
if (y == 0) {
return 0;
}
return x + y;
}
Her har jeg lavet "guard-clauses", så vi hurtigst muligt får returneret fra funktionen, hvis parametrene ikke overholder vores pre-conditions (at x og y ikke må være 0). Det gør det også lettere at forstå når man læser koden, fordi man kan tage tingene ét statement ad gangen i stedet for at skulle jonglere med ANDs og ORs.
Men når det så er sagt, så tror jeg det er rigtigt, at den positive tilgang er nemmere at forstå - for mig er det bare det mindste af problemerne :D
(Bemærk: Jeg er normalt C# udvikler, så min kode er ikke C++ - men tror du fanger pointen alligevel ;) )
Early returns
Jeg synes at
if (a) {
calcb(a);
if (!b) {
for (something) {
}
}
}
er rodet i forhold til f.eks
if (!a)
return;
calcb(a);
if (b)
return;
for (something) {
}
Min påstand er at det med early returns er lettere at matche braces og læse koden ...
PS: C++ og Qt .... fantastisk valg ;)