IF-Als Designe Fehler

  • C#
  • .NET 4.5

Es gibt 48 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    IF-Als Designe Fehler

    Ich hab vor 2-3 Tagen gehört, das man einen Designe fehler begeht sobald man eine IF-Statement nutz.

    Ist da was dran ?
    Weil man kommt doch gar nicht drum rum oder täusche ich mich da?
    Deine Quelle zu jener Behauptung? Ohne Ifs geht gar nix. Zentraler Bestandteil der Programmierung. M.E. in jeder Sprache. Geht es ggf. um IIF, welches durch If() ersetzt wurde, da deprecated? Ggf. ging es nur um SLA, eben dass man nicht (tief verschachtelte) If's mit Sub-Aufrufen kombiniert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― Eine häufig von mir verwendete Abkürzung: CEs = control elements (Labels, Buttons, DGVs, ...)
    ― 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.«
    Deine Quelle zu jener Behauptung?
    Mit einer der 10 besten Hackers und Programmierens Europas.

    und nein es geht wirklich um das If-Statement, aber genau so um das Switch-Case-Statement.

    Theoretisch kann man es wirklich umgehen

    Example <- ok ist nicht das beste aber -.-
    Spoiler anzeigen

    C#-Quellcode

    1. [Flags]
    2. enum Direction
    3. {
    4. Left = 0, Right = 1, Up = 2, Down = 3, None = -1
    5. }
    6. //With if
    7. private void Keyboard_MoveEvent(Direction horizontal, Direction vertikal)
    8. {
    9. if(horizontal!= Direction.None)
    10. Location.X += Speed * (horizontal == Direction.Left ? -1 : 1);
    11. if(vertikal != Direction.None)
    12. Location.Y += Speed * (horizontal == Direction.Down? -1 : 1);
    13. label1.Invoke(new Action(() => label1.Text = Location.ToString()));
    14. }
    15. //......................................
    16. [Flags]
    17. enum Direction{
    18. Left =-1, Right = 1, Up = 2, Down = -2, None = 0
    19. }
    20. //Without if
    21. private void Keyboard_MoveEvent(Direction horizontal, Direction vertikal)
    22. {
    23. Location.X += (int) horizontal * Speed;
    24. Location.Y += (int) vertikal / 2 * Speed;
    25. label1.Invoke(new Action(() => label1.Text = Location.ToString()));
    26. }


    Edit:

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

    VaporiZed schrieb:

    Deine Quelle zu jener Behauptung?

    Facebamm schrieb:

    einer der 10 besten Hackers und Programmierens Europas
    Ou - weia! - "einer der 10 besten" - wirklich?
    Das natürlich Super-Seriöse Quellen-Angabe - schon von der Form her: kein Link, keine Buch-Angabe, wo die Behauptung nachzulesen wäre - und natürlch erstrecht keine inhaltliche Begründung.
    Die Beweislast ist also wahrhaft erdrückend.

    Na, da werd ich denn auch wohl sofort aufhören, If zu benutzen ;)
    /Ironie Off

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

    Dem Beispiel zu entnehmen würde man irgendwann auf ein Bound-Error stoßen, würde ich mal behaupten, wenn man nicht vorher überprüft wie weit man gehen kann? (keine ahnung, ob du flags stimmen...)
    Ohne das Großartig zu überprüfen.. Jedenfalls ist es ja kein Fehler, wenn man eine Abfrage macht, sofern es Bedingungen gibt bzw. eine Bedingung.

    Du hast ja mehrere Anwender in der Regel und die arbeiten ja alle anders als du, wären die DAUs nicht und du wärst der einzige Anwender bräuchtest du keine Bedingungen die du abfragen müsstest... weil du ja weißt, was du tust. Von daher würde ich sowas nie als "Design Fehler" sehen.
    Option Strict On!

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

    Was ist das denn für ein Beispiel?! Obwohl man hier das If weglassen kann, weil Direction.None zufällig 0 ist und x * 0 immer 0 ist (und somit bei Direction.None immer nichts passiert), sollte man es hier trotzdem da lassen, 1) weil sich Enums gerne mal ändern und 2) weil es so besser lesbar ist.

    Man kann nicht ohne If-Abfragen bzw. Conditional Jumps programmieren (was letztendlich nichts anderes als eine If-Abfrage ist). Das geht nach der Definition einer Programmiersprache her nicht, du könntest ja auch einfach sagen:

    C#-Quellcode

    1. If (Button1.IsEnabled) MessageBox.Show("Test");

    Man braucht überhaupt gar kein If, man kann ja einfach eine Schleife nehmen:

    C#-Quellcode

    1. while (Button1.IsEnabled) { MessageBox.Show("Test"); break; }


    Kann man machen, macht man aber nicht.

    Facebamm schrieb:

    Mit einer der 10 besten Hackers und Programmierens Europas.

    Sag doch einfach mal, wer das ist. Übrigens ist ein guter "Hacker" nicht zwangsweise ein guter Programmierer.
    Mfg
    Vincent

    Find ich jetzt unpassend aber egal, anstatt sich damit mal auseinander zu setzten.

    ErfinderDesRades schrieb:

    Na, da werd ich auch wohl sofort aufhören, If zu benutzen!
    /Ironie Off


    Er meinte selbst unterschwellig das es eig. kaum möglich ist.
    @Drahuverar - Thanks, soweit bin ich zwar noch nicht bei dem Projekt aber ich werd es bedenken :D


    Der Anlass zum Thema If war, das ich mir einen Quellcode angeschaut haben, der nur so überseht war von If.
    Okay, vlt war das Word 'Hacker' zu aggressiv, wie wäre es mit 'White hat', weil ich hier gerade merke das Hacker als gefährlich getauft würd

    MrTrebron schrieb:

    die Quelle

    Dazu gibt es keine, weil es mündlich war.

    Okay, wir hätten dieWhile als alternative, aber ich glaub mal nicht das es in dem Sinne es Erfinders war.

    ErfinderDesRades schrieb:

    Die Beweislast ist also wahrhaft erdrückend.

    Hier geht es aber darum ist es möglich und wäre es ein Designe fehler?
    Weil eig. ja schon, denn dann ist ja etwas nicht eindeutig.

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

    Ich sehe immer noch keinen der 10 besten irgendwas Europas. Sorry.
    Scheint Talent zu haben, hat da auch mal einen Nachwuchspreis als einer von 10 erhalten.

    Und jetzt kommt das große aber,

    wie hier schon mehrfach erwähnt ist das If Statement eine Grundlegende Technik in jeder Programmiersprache. Ein while oder ähnliches ist da meistens total oversized.

    Da weder du noch der Herr B. genau beschreibt was der Designfehler an einem If Statement ist, bleibt deine Behauptung lauwarme Luft.

    Bitte keine Klarnamen von Dritten nennen. Editiert. ~fufu
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

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

    Also nicht, dass das hier verwechselt wird mir der richtigen und grundsätzlichen Benutzung von OOP. Das habe ich tatsächlich auch schon öfter gehört, dass man Code deutlich mehr OO machen kann. Z.B. bei einem Taschenrechner anstatt If opertaion = '+' then ... If operation = '-' then ...​ dann richtige "operation" Objekte anzulegen hinter denen dann die echte Aktion steht. Wenn ich mir eine eigenen Projekte so ansehe finde auch recht häufig stellen, wo man eigentlich OOP mehr durchziehen kann, aber das ersetzt das "if" doch nicht Grundsätzlich.
    Ich steige noch nicht ganz dahinter.
    Wie soll ich denn z.B. eine simple Prüfung ohne If machen?

    VB.NET-Quellcode

    1. Private Sub Zeige_Arbeitszeit()
    2. If Mitarbeiter.Arbeitszeit(Datum) = 0 then Exit Sub
    3. 'tu was
    4. End Sub
    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."

    Facebamm schrieb:

    Ich hab vor 2-3 Tagen gehört, das man einen Designe fehler begeht sobald man eine IF-Statement nutz.
    Das Problem das ich hier sehe ist, dass wohl nicht nur der "Kommentar" der besagten Person ohne jegliche Quelle ist, sondern auch wohl völlig aus dem Kontext gerissen wird:

    Facebamm schrieb:

    Der Anlass zum Thema If war, das ich mir einen Quellcode angeschaut haben, der nur so überseht war von If.
    Also habt "ihr" euch einen Quellcode angesehen, an dem man sehen konnte, wie man if nicht einsetzt. Dementsprechend könnte der Kommentar auch ironisch gewesen sein und keine, als Fakt dargelegte, Aussage. Oder anders gesagt, ein Witz. Und das jetzt völlig unabhängig davon, wer es gesagt hat. Ebenfalls ist hier anzuzweifeln, dass das Gedächtnis die originale Aussage nach 2-3 Tagen zu 100% korrekt wiedergibt. Auch wenn es so kurz ist. Um es kurz zu fassen, ohne Äußerung dieser Person auf diesem Board mit Begründung und Beleg, drehen wir uns hier im Kreis, da hier allgemein akzeptiert ist, dass if ein wesentliches Konstrukt im Werkzeugkoffer eines Anwendungsentwicklers ist.

    Edit:
    Noch eine Möglichkeit wäre natürlich, dass der dargestellte Code evtl. völlig ohne Ifs hätte realisiert werden können, was natürlich wieder bekräftigt, dass die von besagter Person getätigte Aussage vollkommen aus dem Kontext gerissen wurde, da sie sich in diesem Falle nur auf den dargestellten Code bezog, und nicht auf die Programmierung im allgemeinen.
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „EaranMaleasi“ ()

    Ohne geht es nicht. Es ist aber möglich die Verwendung zu reduzieren. Ein Beispiel:

    Mit If
    Dim bEnabled as Boolean
    If (bEnabled) then
    Checkbox.Enabled = True
    Else
    Checkbox.Enabled = False
    End If


    Ohne If
    Dim bEnabled as Boolean
    Checkbox.Enabled = bEnabled

    Auch kann man als Rückgabewert statt True/False einfach sowas machen:

    Return iZahl <>0
    "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

    ThuCommix schrieb:

    OOP hat absolut nichts mit If-Statements zutun.

    OOP und If bezieht sich beides aufs Programmieren und zack da hast du schon einen Zusammenhang. Es kommt auf die Betrachtung an und ich finde es in diesem Kontext schon zusammenhängend. Deine Meinung ist nun mal deine Meinung, aber stell es nicht als einfach Tatsache da, denn da ist es nicht.

    Bluespide schrieb:

    OOP und If bezieht sich beides aufs Programmieren und zack da hast du schon einen Zusammenhang.
    Drachen und das Programmieren wurden beide von Menschen erfunden und Zack haben wir jetzt was beweisen? Ich glaube nur, dass wir einen ziemlich seltsamen betrachtungswinkel haben. Dennoch ist weder if eine Grundvorraussetzung von OOP, noch ist OOP zwingend nötig um if einzusetzen. If hingegen gab es vor dem OOP konzept. Ich kann dir einen halben Punkt dafür geben, dass If vielleicht OOP erst ermöglicht hat.
    Post-AGB:
    §1 Mit dem Lesen dieses Posts stimmst du den AGB unverzüglich zu
    §2 Ein Widerruf muss innerhalb von 3 Sekunden nach Lesen des Hauptbestandteil des ersten jemals gelesenen Posts erfolgen
    Abs.1 Die Signatur zählt nicht zum Hauptbestandteil des Posts
    §3 Ein erfolgreicher Widerruf zwingt zu einem Besuch bei einem Hypnotiseur oder Neurochirurg, sodass der gelesene Text aus den Erinnerungen entfernt werden kann
    Abs.1 Die Kosten und Risiken sind jeweils selbst zu tragen
    If stellt ja nur eine Abfrage einer Bedingung mit den Antwortmöglichkeiten true und false dar.

    In PHP bspw. kannst du "das IF weglassen":

    PHP-Quellcode

    1. ​if ($a == true) { echo "passt"; } else { echo "nixos passos"; }

    PHP-Quellcode

    1. echo $a ? "passt" : "nixos passos";


    Fakt ist, ich hab das IF weggelassen -> nicht mit hingeschrieben.
    Aber deshalb wird dennoch die Funktionsweise der IF durchlaufen..

    Wie in deinem Beispiel, sind unnütze IFs sowie immer ersetzbar. Aber an manchen Stellen gibt es eben keinen Ausweg um um IFs herumzukommen.
    Und OHNE Selektion kannst du keine vernünftigen Programme schreiben.


    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup: