Seite 1 von 1

Boolean State Driven Procedure?

Verfasst: Mittwoch 23. September 2015, 15:52
von Hyperion
Hallo zusammen,

kennt jemand einen Namen für folgendes Vorgehen (Imho ein Anti-Pattern)?

Code: Alles auswählen

def foo():
    # artificial flag
    continue_ = True

    if continue_:
        # some calls
        continue_ = result_of_some_call()
    if continue_:
        continue_ = some_other_action()
    if continue_:
    # ... and so on
    
    # perhaps at the end
    if !continue_:
        # react on "error"

    # or
    return continue_
Sprich anstatt die Aufrufe entsprechend zu schachteln, verschleiert man die kaskadierende Struktur, indem man ein künstliches Flag erschafft und damit sequenzielle Blöcke bildet. Damit wird imho eigentlich nur die Illusion geschaffen, dass man sauber strukturiert, weil man nicht dutzende ineinander verschachtelte Blöcke hat.

Irgend wie war mir so, dass ich dafür schon mal einen konzeptionellen Begriff gelesen habe... ich kann mich aber nicht erinnern und vielleicht irre ich mich auch (und ich könnte somit als erster einen Namen für diesen Murks prägen :mrgreen: )

Re: Boolean State Driven Procedure?

Verfasst: Mittwoch 23. September 2015, 16:12
von DasIch
Es ist einfach Spaghetti Code. Im konkreten Fall werden unweigerlich weitere Probleme auftreten die sich dann besser bezeichnen und kritisieren lassen, wie z.B. zu lange/komplexe Funktionen und schlechte Aufteilung, was Konsequenzen auf Testbarkeit und Wiederverwendbarkeit hat.

Re: Boolean State Driven Procedure?

Verfasst: Mittwoch 23. September 2015, 16:29
von snafu
@Hyperion: Was spricht hier gegen Exceptions?

Code: Alles auswählen

for func in functions:
    try:
        function()
    except SomeError as e
        handle_error(e)

Re: Boolean State Driven Procedure?

Verfasst: Mittwoch 23. September 2015, 16:30
von BlackJack
@Hyperion: Das sieht ein bisschen so aus wie das was man bei C und ähnlichen Sprachen macht weil's keine Ausnahmen in der Sprache gibt. Würde deutlicher wenn Du `continue_` in `error` umbenennst und die Bedingung umdrehst in ``if not error:``. Wobei ich in der Regel kein Flag benutze sondern ein ``goto`` zur Fehlerbehandlung. Also in C meine ich jetzt. :-)

Ich mache das um die IMHO künstliche Verschachtelung in solchen Fällen zu vermeiden und Code zu schreiben der mehr wie Python aussieht, oder andere Sprachen mit Ausnahmen.

Edit: Ah, snafu war ein bisschen schneller. :-)

Re: Boolean State Driven Procedure?

Verfasst: Mittwoch 23. September 2015, 18:22
von Hyperion
@DasIch: Hm... ja natürlich sieht der Code in den ``if`` schlimm aus und man könnte da schon einiges zu sagen (SRP in vorderster Front uvm.), aber ich meinte mich einfach zu erinnern für genau diesen Stil schon einmal eine Bezeichnung gelesen zu haben... und dafür etwas passendes zu haben wäre toll in meiner Situation.

@snafu: Nichts! Aber es ging in meiner Frage ja auch nicht um das Refactoring ;-)

@BlackJack: Tatsächlich handelt es sich um C++... zumindest etwas, das sich mit einem C++ Compiler übersetzen lässt :twisted: Aber Exceptions sind ja mystische und rätselhafte Dinge, von denen man besser die Finger lässt...

Re: Boolean State Driven Procedure?

Verfasst: Mittwoch 23. September 2015, 19:56
von BlackJack
@Hyperion: Also ich finde ja C++ ist ein mystisches und rätselhaftes Ding von dem man besser die Finger lässt. ;-)

Benutzt denn irgendwer Ausnahmen in C++? Ich hatte so den Eindruck das „exception safety“ noch mal eine Komplexitätsstufe oben drauf ist, und dass sich damit niemand wirklich herumschlagen möchte. Einige grosse Projekte haben auch eine „no-exception policy“ (Mozilla, Google, wxWidgets, und Qt benutzt AFAIK auch keine).