myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Knowledge Base » FAQ » [Tipp] Anfängerhinweis == true / == false
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

[Tipp] Anfängerhinweis == true / == false

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.464
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

[Tipp] Anfängerhinweis == true / == false

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Community,

warum sollte man == true immer weglassen und == false durch ! (not) ersetzen?

== true ist eine Tautologie oder volkstümlicher ein weißer Schimmel. Schimmel sind immer weiß. Es ist genauso überflüssig und sinnlos == true zu verwenden, wie bei jeder Verwendung von Integer-Variablen ein + 0 anzuhängen.

Wer == true benutzt, hat m.E. noch nicht vollständig verstanden, was eine boolsche Variable ist. Mit dieser direkte Aussage will ich niemanden kränken, sondern meine das rein sachlich und als Anregungen, das eigene Verständnis von boolschen Variablen selbstkritisch zu überprüfen.

Interessanterweise kommt ja niemand auf die Idee zu schreiben

C#-Code (unsinng):
if (i == 5 == true) [

obwohl das funktioniert und nicht qualitativ anders ist als bei

C#-Code (genauso unsinng):
bool fBedingung = i == 5;
// ...
if (fBedingung == true) {

fBedingung == false kann und sollte man durch die Negation !fBedingung ersetzen.

Das bisher Gesagte gilt analog für die umgekehrte Richtung. Code wie

C#-Code (unsinnig):
bool fUeberlauf;
if (a > 1000) {
   fUeberlauf = true;
} else {
   fUeberlauf = false;
}

sollte man vermeiden und durch

C#-Code (sinnvoll):
fUeberlauf = a > 1000;

ersetzen.

herbivore

PS: Von alledem abgesehen handelt man sich durch == true / == false auch noch eine unnötige Fehlerquelle ein, nämlich wenn man versehentlich = true / = false schreibt.

PPS: In C/C++ gelten alle Werte ungleich von 0 als wahr und nur 0 als falsch. Die Konstante true wird üblicherweise als 1 definiert. Somit würde bei if (x == true) fälschlich nur bei deinem Bruchteil der Fälle, in denen x wahr ist, der then-Teil ausgeführt. In C/C++ ist es also in vielen Fällen echt falsch == true zu verwenden.

PPPS: Der Compiler generiert bei if (fBedingung == true) (zwar) den genau gleichen Code wie bei if (fBedingung). Daher könnte man die Wahl zwischen den beiden Varianten formal gesehen als reine Stilfrage ansehen. Doch das wird in meinen Augen der Sache nicht gerecht. Genauso wenig wie man es als reine Stilfrage, sondern als schlicht falsch oder zumindest unsinnig ansehen würde, hinter jede Integervariable ein + 0 zu schreiben. Daher sehe ich die Verwendung von == true und == false schon als (Stil-)Fehler an, wenn auch nicht als einen Fehler im Sinne der Semantik oder Korrektheit des jeweils generierten (identischen) Codes. Und wenn man versehentlich = true oder = false schreibt, wir daraus sogar ein echter (Semantik-/Korrektheits-)Fehler.

PPPPS: Alles bisher gesagte gilt für den normalen bool Datentyp. Für bool? (also Nullable<bool>) hat if (fBedingung == true) aufgrund des dritten Zustands (nämlich null) nicht die gleiche Semanik wie if (fBedingung). Dies ist in meinen Augen ein weiterer Grund == true bei bool nicht zu verwenden. Bei bool? (und nur dafür) könnte == true Sinn machen, wenn man es bewusst und in voller Kenntnis der (abweichenden) Semantik verwendet. Aber selbst dann bleibt die Gefahr, dass der Code beim Lesen missverstanden wird. Deshalb würde ich in diesem Fall die explizite Verwendung von HasValue und Value vorziehen.


mycsharp.de  Moderationshinweis von Abt (19.04.2015 15:09):

Ich habe den Thread von "Anfängerfehler" in "Anfängerhinweis" geändert, da es sich hier nicht um einen Fehler im eigentlichen Sinne handelt.
Je nach Code-Stil kann ein if ( value == true) durchaus geläufig sein und macht qualitativ, wie es auch im Beitrag beschrieben wird, kein Unterschied.
Es ist also eine reine Stilsache.

 
12.04.2006 11:46 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 13 Jahre.
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.164
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ohne eine Diskussion starten zu wollen (wenn der Bedarf ist, bitte ein extra Thread eröffnen):

Ich war nie ein Freund dieses Themas und habe dahingehend damals auch "Anfängerfehler" in "Anfängerhinweis" geändert.
Die Arbeit in letzter Zeit hat mich nun aber dazu bewogen hier einen zusätzlichen Hinweis anzubringen:


Wohingegen if (fBedingung == true) { nicht unbedingt die Lesbarkeit fördert, tut das if (fBedingung == false) { umso mehr.
Zum einen lässt sich if (fBedingung == false) { deutlich besser "interpretieren" als if (!fBedingung) { -> "Wenn Bedingung ist falsch" vs "Wenn nicht Bedingung".

Zum anderen haben Menschen mit Sehproblemen es nicht einfach entsprechend das Ausrufezeichen zu sehen.
Teams, die Entwickler haben, die dementsprechend eine überdurchschnittlich schlechte Sehschwäche aufweisen, vermeiden daher if (!fBedingung) { und verwenden ausschließlich if (fBedingung == false) {

Die Regel ist in so einem Team oft:

C#-Code:
if (fBedingung) {
// oder
if (fBedingung == false) {

Nicht:

C#-Code:
if (fBedingung == true) {
// oder
if (!fBedingung) {



Die Anwendung von == false ist also alles andere als überflüssig oder gar sinnlos.
24.08.2019 14:08 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 13 Jahre.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 12.11.2019 01:44