Wie erklärt man jemand eine If Abfrage?

  • VB.NET

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 42 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Wie erklärt man jemand eine If Abfrage?

    Ich bin der Meinung zu jedem If gehört auch ein Else.

    v1

    VB.NET-Quellcode

    1. Private Sub ButtonZweiZeilen_Click(sender As Object, e As EventArgs) Handles ButtonZweiZeilen.Click
    2. Dim x As Decimal = NumericUpDownEingabe.Value
    3. If x = 12 Then LabelAusgabe.Text = "x = 12"
    4. End Sub


    v2

    VB.NET-Quellcode

    1. Private Sub ButtonMeinIf_Click(sender As Object, e As EventArgs) Handles ButtonMeinIf.Click
    2. 'nop = Nulloperationen (auf Deutsch: lieber Computer mach halt gar nix)
    3. Dim x = NumericUpDownEingabe.Value
    4. If x = 12 Then
    5. LabelAusgabe.Text = "x = 12"
    6. Else
    7. 'nop
    8. End If
    9. End Sub


    v3

    VB.NET-Quellcode

    1. Private Sub ButtonElse_Click(sender As Object, e As EventArgs) Handles ButtonElse.Click
    2. Dim x = NumericUpDownEingabe.Value
    3. If x = 12 Then
    4. LabelAusgabe.Text = "x = 12"
    5. Else
    6. LabelAusgabe.Text = "Total Falsch"
    7. End If
    8. End Sub

    Dizzy schrieb:

    ist es Wahr oder Falsch
    Jein.
    Du kannst z.B. Bereiche abfragen:

    VB.NET-Quellcode

    1. If value > 0.8 Then
    2. ' Do anything
    3. Else If value > 0.6 Then
    4. ' Do anything
    5. Else If value > 0.4 Then
    6. ' Do anything
    7. Else If value > 0.2 Then
    8. ' Do anything
    9. Else If value > 0 Then
    10. ' Do anything
    11. Else
    12. ' Do anything
    13. End If

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Ein anderes Beispiel:

    Nehmen wir mal theoretisch an du hast eine Form/Konsole, die nur ASCII-Zeichen pro 10 Zeilen zulassen würde.
    Wenn man dann beispielsweise inssesamt 100 Zeichen ausgeben möchte, dann erfolgt doch bei jeder Ausgabe eine if-Abrage ob das Zeilenlimit erreicht ist. Bei einem if >= 10 erfolgt ein Zeilenumbruch.

    Braucht man da einen else-Zweig?

    Nicht ohne Grund ist so in eigentlich jeder Sprache die Variante "Only" if vorgesehen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „wertherchen“ ()

    Wenn man IF einfach ins Deutsch übersetzt erklärt es ganz genau was es macht.

    VB.NET-Quellcode

    1. if a=b then
    2. 'what ever
    3. else if b = c then
    4. 'what ever 2
    5. else
    6. 'what ever 3
    7. end if

    Wenn a=b dann mach das
    Wenn nicht aber b = c dann mach das
    Wenn nicht dann mach das
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @Schamash
    gennau so soll es meiner meinung sein.

    meine codes:
    v1. prüfe ob x=12 (Computer mach was)
    v.2 prüfe ob x=12 (Computer mach was. sonst mach halt nix.)
    v.3 prüfe ob x=12 (Computer mach was. wenn x nicht 12 dann suche dir eine Alternative)
    und welche Variante ist nun die Beste um zu Erklären wie das mit dem If geht?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Dizzy“ ()

    @Dizzy ein ELSE gibt es immer. Wenn man kein ELSE angibt dann ist ELSE - "tu nix"
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    Schamash schrieb:

    @Dizzy ein ELSE gibt es immer. Wenn man kein ELSE angibt dann ist ELSE - "tu nix"


    Genau darum ist ein else nicht zwingend. Es gibt eben Fälle wo "tu nix" gar nicht zur Debatte steht. Siehe mein versuchtes Beispiel von oben.

    Was man aber allgemein sagen kann: ein else ist nie falsch, selbst wenn es unnötig ist.

    Wie ich schon sagte: ein if ohne else ist nicht ohne Grund auch von eigentlich allen Sprachen vorgesehen.

    Im Grunde gibt es doch immer die drei Varianten:

    C#-Quellcode

    1. if


    C#-Quellcode

    1. if
    2. ...
    3. else
    4. ...


    C#-Quellcode

    1. if
    2. ...
    3. else if
    4. ...
    5. else
    6. ...

    Dizzy schrieb:

    If x = 12 Then LabelAusgabe.Text = "x = 12"


    Dizzy schrieb:

    If x = 12 Then
    LabelAusgabe.Text = "x = 12"
    Else
    'nop
    End If

    Code sollte lesbar sein.
    Wenn du etwas in einer Zeile schreiben kannst anstatt in 5, dann ist das wesentlich einfacher zu erfassen.
    Bei viel unnützem Code wird das Programm schnell unübersichtlich.

    Der Compiler baut aus beiden Varianten denselben Code.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Was man aber allgemein sagen kann: ein else ist nie falsch, selbst wenn es unnötig ist.

    meine Meinung

    Code sollte lesbar sein.
    Wenn du etwas in einer Zeile schreiben kannst anstatt in 5, dann ist das wesentlich einfacher zu erfassen.
    Bei viel unnützem Code wird das Programm schnell unübersichtlich.

    verstehe ich nicht. das war auch nicht die Frage.
    Der Code aus V2 macht das selbe wie aus V1.

    Sprechend würde der Code aus V1 wie folgt aussehen:
    Wenn x = 12 Dann setze den Text im Label auf x = 12.

    aus V2 klingt dies dann schon komischer:
    WENN x = 12 DANN setze den Text im Label auf x = 12 SONST... ja, sonst was?...

    Aus Syntaktischer Sicht ist eine if-then-else nicht falsch weil es den Compiler nicht interessiert bzw. weil er es verarbeiten kann.
    Fraglich ist aber ob das aus logischer Sicht korrekt / sinnvoll ist.

    Ich denke solche Fragen werden aber erst dann interessant wenn mehrere Programmierer an einem Projekt arbeiten.
    @RodFromGermany

    VB.NET-Quellcode

    1. If value > 0.8 Then
    2. ' Do anything
    3. Else If value > 0.6 Then
    4. ' Do anything
    5. Else If value > 0.4 Then
    6. ' Do anything
    7. Else If value > 0.2 Then
    8. ' Do anything
    9. Else If value > 0 Then
    10. ' Do anything
    11. Else
    12. ' Do anything
    13. End If


    Und

    VB.NET-Quellcode

    1. If value > 0.8 Then
    2. ' Do anything
    3. Else
    4. If value > 0.6 Then
    5. ' Do anything
    6. Else
    7. If value > 0.4 Then
    8. ' Do anything
    9. Else
    10. If value > 0.2 Then
    11. ' Do anything
    12. Else
    13. If value > 0 Then
    14. ' Do anything
    15. Else
    16. ' Do anything
    17. End If
    18. End If
    19. End If
    20. End If
    21. End If


    sind nicht nur sinngemäß Äquivalent, sondern eben auch was den erzeugenden Code anbelangt, das ist das Schöne an C Sprachen, da erkennt man diese gleichheit auch ziemlich einfach:

    In C Sprachen ist bei dingen wie If/For whatever immer die nächste Anweisung innerhalb des Scopes, man kann aber "sub-scopes" erzeugen mittels {} um mehrere Anweisungen reinzubekommen

    C#-Quellcode

    1. if (value > 0.8)
    2. {
    3. //anweisung
    4. }
    5. else
    6. {
    7. //anweisung
    8. }

    sind also Äquivalent für einzelne Anweisungen, eine Anweißung ist dabei aber auch ein if

    C#-Quellcode

    1. if (value > 0.8)
    2. //anweisung
    3. else
    4. //anweisung


    C#-Quellcode

    1. if (value > 0.8)
    2. //anweisung
    3. else
    4. if (value > 0.6)
    5. //anweisung
    6. else
    7. //anweisung

    Und C Sprachen sind Whitespaces so ziemlich egal, entfernen wir doch einfach welche

    C#-Quellcode

    1. if (value > 0.8)
    2. //anweisung
    3. else if (value > 0.6)
    4. //anweisung
    5. else
    6. //anweisung

    Und es ist immer noch eins zu eins der gleiche Code
    (natürlich kann man jetzt noch beliebig Scopes hinzufügen)

    Sorry @TE, falls das jetzt etwas zu viel Exkursion war
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    If-Geschichten werden aber mit Else an einigen Stellen mMn unschön:

    VB.NET-Quellcode

    1. Private Sub DoWhatEverWith(ThisOne As Object)
    2. If ThisOne Is Nothing Then
    3. Exit Sub
    4. Else
    5. '≥ 30 Zeilen Code
    6. End If
    7. End Sub

    ist für mich deutlich anstrengender/unschöner als:

    VB.NET-Quellcode

    1. Private Sub DoWhatEverWith(ThisOne As Object)
    2. If ThisOne Is Nothing Then Exit Sub
    3. '≥ 30 Zeilen Code
    4. End Sub
    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― Meine wichtigste Programmiererkenntnis: Mühsam erhängt sich das Eichhörnchen.
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    Dizzy schrieb:

    @MajorOli

    genau v1 und v2 machen genau das gleiche. (aber in v2 gibt es eine Alternative)
    und v3 führt die Alternative aus.


    ? Welche alternative gibt es denn?
    Der maschine zu sagen es soll nix machen ist
    keine alternative.

    Wenn das else weggelassen wird macht die maschine ebenso nichts. Daher ist eine “alternative“ die nichts macht unlogisch.
    Else brauchst du nur, wenn du dem Gegenteil vom Ergebnis einer Aktion zuweisen möchtest. Also.. warum sollte man es überhaupt nutzen, wenn man nur eine Abfrage braucht? Einfach so? Oder.. eh.. verstehe ich nicht.
    Wenn ich eine Frage stelle, habe ich sie bereits gegooglet. Ja, es kommt vor, dass ich die Antwort übersehe. Ja, es kommt vor, dass ich sie nicht verstehe. Deshalb bin ich hier. Wenn dies eure Frage war, dann antwortet bitte nicht. Es stiehlt sämtliche Motivation.
    Ich habe in meinem Programm etliche Einstellungen (Boolean). Wenn die True ist, soll etwas passieren. Andernfalls halt nicht und das Programm läuft weiter... Da braucht man kein Else.

    If(bProtokollSchreiben) Then WriteProtokoll()
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen