Prüfung eines Boolean

Speedkill

Erfahrenes Mitglied
Hallo Leute,

ich habe mal gelesen daß man die Prüfung eines Boolean eher so
Code:
if (TRUE == myBool)
also so
Code:
if (myBool == TRUE)
machen sollte.
Ich kann mich leider nicht mehr erinnern welche Sprache oder in welchem Zusammenhang, jedoch meine ich mich zu erinnern daß es etwas mit einem NULL pointer auf sich hatte.
Eventuell ging es dabei auch nicht um booleans sondern um Strings ?

Kann das jemand bestätigen und/oder mir nochmal erklären ?

Vielen Dank
Speedy
 

Gumbo

Erfahrenes Mitglied
Die erstere Schreibweise wird gerne genutzt, um einen möglichen Tippfehler zu vermeiden beziehungsweise diesen schnell zu finden. Denn wenn hier versehentlich nur ein Zuweisungsoperator statt eines Vergleichoperators geschrieben wird, wirft dies bei erster Schreibweise einen Fehler auf, bei der zweiten jedoch nicht, da es sich dabei nur um eine Zuweisung handelt.
Semantisch sind jedoch beide Vergleichsausdrücke äquivalent.
 

Wolfsbein

Erfahrenes Mitglied
Man schreibt:
Code:
if (myBool)
// bzw.
if (!myBool)
zumindest ich habe das so gelernt :D.
EDIT: Wenn es sich natuerlich um C handelt ist das nicht moeglich!
 

KD3

Erfahrenes Mitglied
Man schreibt:
Code:
if (myBool)
// bzw.
if (!myBool)
zumindest ich habe das so gelernt :D.
EDIT: Wenn es sich natuerlich um C handelt ist das nicht moeglich!

C++:
#include <stdio.h>

int main() {

    int const inte = 939;
    if(inte) printf("%i", inte);

    }
/* 
inte wird immer 1 in der if abfrage ergeben, da inte einen Wert(ich denke mal nur bei integer und byte ist es der Fall :D) hatte. 
Wenn inte = 0 wäre dann er als bool auch 0 also false und keine 
ausgabe würde erfolgen. 
Sogar bei -1 würde noch eine Ausgabe erfolgen. :D
*/

@Speedkill

Mit einer normalen if Abfrage können wir schlecht sagen welche Sprache^^
 

kescha

Grünschnabel
Code:
if (TRUE == myBool)
und
Code:
if (myBool)

ist nicht das gleiche. Beim erstem Beispiel wird das Ergebnis des Vergleichs (==) an die If Abfrage geliefert. Das zweite Beispiel ist eigenlich richtig (da eine IF abfrage boolenwerte verarbeitet), aber hängt von der Sprache die man verwendet, jede Sprache hat eigene Wahr und Falsch Werte (typunsichere Sprache).
 

Oliver Gierke

Erfahrenes Mitglied
Die Frage der Reihenfolge stellt sich ja nicht nur für boolean Variablen. Kritischer ist ja sowas wie
Java:
if (null == myVariable) {

Dies macht man (v.a. bei dynamischen Sprachen) halt wie oben schon angedeutet aufgrund des Fakts, dass es dort keinen Compiler gibt, der ein evtl. null = foo abfängt. In Java ist das weniger kritisch, da die meisten IDEs schreien, wenn man sowas in einem if versucht.

Gruß
Ollie
 

Kyoko

Erfahrenes Mitglied
Code:
Code:
if (TRUE == myBool)
und
Code:
Code:
if (myBool)
ist nicht das gleiche. Beim erstem Beispiel wird das Ergebnis des Vergleichs (==) an die If Abfrage geliefert. Das zweite Beispiel ist eigenlich richtig (da eine IF abfrage boolenwerte verarbeitet), aber hängt von der Sprache die man verwendet, jede Sprache hat eigene Wahr und Falsch Werte (typunsichere Sprache).

Beide sind zu 100 % richtig!

Wie du bereits gesagt hast, wertet if Wahrheitswerte aus (zumindest in Sprachen, die einen starken Boolean-Typen haben).

Haben wir jetzt eine Boolean-Variable, die den Wert true hat, und schreiben

Code:
if (variable)

denn wird der Variableninhalt als true ausgewertet und die Bedingung ist erfüllt.

Schreiben wir

Code:
if (variable == true)

so wird true == true ausgewertet, was true zuruückgibt und somit die Bedingung wieder erfüllt ist.

Es ist also reine Geschmackssache, was man schreibt. Die heutigen Compiler optimieren sowieso soweit dass ich mir sicher dass dass da zum Schluss in modernen Sprache wie C# das gleiche rauskommt.