return false vs return !true

mercsen

Lt. Commander
Registriert
Apr. 2010
Beiträge
1.680
Moin!

Ich komme gerade von einem Meeting für mein neues Projekt wo ich mit einem anderen programmierer zusammen arbeiten muss.
Der hat die komische angewohnt anstelle von

Code:
return false;

folgendes zu schreiben:

Code:
return !true;

ich konnte seiner erklärung nicht so ganz folgen und finde das es auch wenig sinn ergbit das es den code schwerer zu lesen und fehleranfälliger macht. Und auch wenn es sicher nicht viel Zeit in anspruch nimmt, muss die CPU doch trotzdem die aussage erstmal negieren ehe sie die zurück gibt?

hat das einer von euch schonmal gesehen? Gibt es wirklich ein szenario wo das Sinn ergibt? Wir sind jetzt in einer Situation wo ich mich entschieden gegen seine Konvention verweigere, er aber ebenso :-/

ich meine zumindest in php ist !true sogar typgleich zu false, also
Code:
(!true === false) === true
Hier sind doch immer viele experten, habt ihr argumente für mich? oder liege ich gar falsch?

Besten dank im vorraus!
 
Zuletzt bearbeitet:
Also ich finde das auch schwer zu lesen. Würde ich nicht akzeptieren.
Zu Deiner Behauptung, dass das mehr CPU-Ressourcen benötigt stimmt jedoch nicht, da während des Kompilierens bereits der Code so optimiert ist, dass solche Negationen bereits ausgewertet sind.

Habe noch nie davon gehört, dass man das so schreibt. daher fehlen mir auch Argumente dagegen. Ist jedenfalls sehr kreativ =D

MfG,

Anon
 
also ich würde auch zwecks lesbarkeit und fehlervermeidung (so ein ! ist schnell mal vergessen) das 'false' dem '!true' vorziehen. Performancetechnisch macht es für die Laufzeit, wie meine Vorposter bereits dargelegt haben, keinen Unterschied.
 
Pack einfach ein #define true false in die erste Zeile, für den ultimativen hirnfick
 
Kruzifix schrieb:
Die Erklärung dazu würde mich ja brennend interessieren :D

wie gesagt ich konnte dem nicht wirklich folgen (und hab auch nicht wirklich zugehört). irgendwas mit das nur wahre aussagen vollständige aussagen sind oder so, hat null sinn ergeben und was ich so von seinem code gesehen habe mir auch ein rätsel wie der nen job kriegen konnte.

aus seiner perspektive ist das so leichter zu lesen und mit ein wenig übung stimmt das wohl auch, aber einmal unaufmerksam und das ! vergessen oder übersehen und schon haste den salat.

geht auch allem zu wider was ich gelernt habe, möglichst eindeutig zu programmieren.

wir schreiben in PHP und auch wenn die ZEND engine ihr bestes tut die scripte vor interpretirt im cache zu halten so klappt das ja nicht immer zur gänze. konnte in einem kleinen benchmark aber auch keine große differenz feststellen.
 
Wenn es in der Firma bereits Code gibt bei dem mit gewissen Konventionen gearbeitet wurde, dann ist bei diesen Konventionen zu bleiben. Erst wenn Konventionen von einer Mehrheit der Beteiligten in der Diskussion stehen, weil die bisherige Lösung schlecht ist oder aber es eine weit bessere Lösung gibt, sollte man davon abweichen.

Ich gehe davon aus, dass !true bisher bei euch nicht verwendet wurde, also hat der Neue sich anzupassen. Wenn derjenige in seiner Flexibilität bereits überfordert ist seine Konventionen an eine Gruppe / bereits entstehenden Code anzupassen kann die Empfehlung nur sein, diesen Herren nicht weiter zu beschäftigen.
 
Ein sehr gutes Argument. Wenn ihr in einer Firma arbeitet, dann gibt es sicher coding conventions, an die sich jeder zu halten hat. Ist das mit dem !true noch nicht geklärt, sollte ein Paragraph dazu hinzugefügt werden. Dann ist das geklärt und ihr könnt - wie auch immer entschieden wurde - euch wieder eurem eigentlichen Job widmen... :)
 
Ich arbeite selbstständig und er ist nen bekannter von meinem Auftraggeber, wir ziehen das Projekt von Null an hoch. Da er allerdings an mich herangetreten ist wird er wohl wissen was er da am Hals hat :p
Aber gut zu lesen das nicht nur ich nen dickes Fragezeichen im Gesicht hatte als ich das gehört habe :D
 
Versucht das Problem untereinander zu lösen und wenn es nicht wird sollte rechtzeitig dem Auftraggeber mitgeteilt werden, dass in der Konstellation das Problem nicht zu lösen ist. Wenn kein ordentliches Miteinander zu bewerkstelligen ist, muss im Zweifelsfall klassisch hierarchisch agiert werden. Einer bestimmt und wer nicht spurt muss mit den Konsequenzen leben. Sowas ist zwar beschissen fürs Arbeitsklima, aber eine gleichberechtigte Zusammenarbeit klappt nicht, wenn jeder versucht seins durchzudrücken indem er alle anderen ignoriert.

Im Zweifelsfall ist der Andere dann in Verantwortung und du musst dich beugen. Dann halte dich einfach an alles was dir vorgegeben wird. Bestehe aber darauf, dass die Vorgaben (gerichtsfest) dokumentiert werden.
 
Wenn du mit dem allein bist, würd ich vor seine Codeteile oder in die Doku einfach ne Warnung schreibdn, und dann kann jeder machen wie er lustig ist. Ob du da false oder !true returnst, ist ja eigentlich egal.

Auf den Deal würd ich mich dann aber auch nur einlassen wenn sichergestellt ist, dass ich später nicht die Suppe auslöffeln und Code von diesem Überflieger anpassen oder warten muss.

Allgemein würd ich mir von dem mal ein bisschen Code zeigen lassen, wenn das gar zu wirr wird sag deinem Bekannten dass das so nichts wird und spring ab. Du ärgerst dich sonst in 10 Jahren noch schwarz, wenn du den Cide mal warten musst. Das wäre es mir (glaube ich) nicht wert.
 
Damit das Ausrufezeichen nicht übersehen wird, einigt euch doch auf einen Kompromiss und schreibt:

return !!!true;
 
Hau deinem Kollegen ein paar aufs Maul, und gut is. ! true, ich glaub', es hakt! :p
 
r0b0t schrieb:
Damit das Ausrufezeichen nicht übersehen wird, einigt euch doch auf einen Kompromiss und schreibt:

return !!!true;
Genau!
Und statt return true; schreibt ihr einfach return !!!!true;
Die Ausrufezeichen unterstreichen nochmal die Aussage, damit der Compiler sich auch sicher ist was er zu tun hat.

Das Projekt wird bestimmt ein Erfolg :lol:
 
Das gehört zu den Top 5 des größten Bockmistes, den ich je gesehen/gehört habe. Unwartbarer Bockmist. Vielleicht hilft da wirklich nur Schelle links, Schelle rechts. Wenn derjenige das nicht einsieht, verdien' dir lieber woanders deine Brötchen. Wer weiß, was der noch so auf Lager hat. :D
 
Also ich wäre ja für
Code:
return ln(2.0+sqrt(pi)) > arctan(4.0*pi/3.0);

Lohnt sich dann wenigstens, weil das wahrscheinlich nicht mehr so eben wegoptimiert wird ;)
 
Zuletzt bearbeitet:
VikingGe schrieb:
Code:
return ln(2.0+sqrt(pi)) > arctan(4*pi/3);

Achtung! Kann zu Laufzeitüberschreitungen bei meht als zwei returns führen!

Versuche lieber das eingängige:

PHP:
return .0^TRUE^0.  ;

bzw.

PHP:
return .0^FALSE^0. ;
 
Zurück
Oben