Direkt zum Hauptbereich

Wald oder Bäume

Wann soll man Details einer Funktion in Unterfunktionen extrahieren, weil man ansonsten "den Wald vor lauter Bäumen nicht sieht"?

Und wann soll man lieber die Details sichtbar lassen?

Welches sind die Vor- und Nachteile ​​der folgenden Beispiele und welches favorisiert ihr?

1. Alle Details


import sys

def main():
    numbers = [int(argument) for argument in sys.argv[1:] if str.isnumeric(argument)]

    for i in range(0, len(numbers)):
        for j in range(1, len(numbers) - i):
            if numbers[j] < numbers[j - 1]:
                numbers[j-1:j+1] = [numbers[j], numbers[j - 1]]

    print(', '.join([str(number) for number in numbers]))

if __name__ == '__main__':
    main()

2. Alle Details mit Kommentaren


import sys

def main():
    #Read numbers from command line
    numbers = [int(argument) for argument in sys.argv[1:] if str.isnumeric(argument)]

    #Sort numbers
    for i in range(0, len(numbers)):
        for j in range(1, len(numbers) - i):
            if numbers[j] < numbers[j - 1]:
                numbers[j-1:j+1] = [numbers[j], numbers[j - 1]]

    #Write numbers to console
    print(', '.join([str(number) for number in numbers]))

if __name__ == '__main__':
    main()

3. Drei Unterfunktionen mit konkreten Namen


import sys

def main():
    numbers = readNumbersFromCommandLine()
    sort(numbers)
    writeNumbersToConsole(numbers)

def readNumbersFromCommandLine():
    return [int(argument) for argument in sys.argv[1:] if str.isnumeric(argument)]

def sort(numbers):
    for i in range(0, len(numbers)):
        for j in range(1, len(numbers) - i):
            if numbers[j] < numbers[j - 1]:
                numbers[j-1:j+1] = [numbers[j], numbers[j - 1]]

def writeNumbersToConsole(numbers):
    print(', '.join([str(number) for number in numbers]))

if __name__ == '__main__':
    main()

4. Drei Unterfunktionen mit allgemeinen Namen


import sys

def main():
    numbers = getNumbers()
    sort(numbers)
    setNumbers(numbers)

def getNumbers():
    return [int(argument) for argument in sys.argv[1:] if str.isnumeric(argument)]

def sort(numbers):
    for i in range(0, len(numbers)):
        for j in range(1, len(numbers) - i):
            if numbers[j] < numbers[j - 1]:
                numbers[j-1:j+1] = [numbers[j], numbers[j - 1]]

def setNumbers(numbers):
    print(', '.join([str(number) for number in numbers]))

if __name__ == '__main__':
    main()

Kommentare

  1. Kommentare sollten beschreiben, warum etwas passiert und nicht was passiert. Was passiert sollte aus dem Code ersichtlich sein.

    Zur Gruppierung eignen sich die Funktionen dann auch besser und geben dem Abschnitt einen Namen, genau wie deine Kommentare.

    Das die Funktion dann nur an einer einzigen Stelle verwendet wird ist dann nicht so schlimm.

    Wenn es sich mit der Funktion dann doch komisch überdimensioniert an, ist es dann doch besser Inline zu schreiben.

    Ich denke an Code smells. Müsste ich Mal lesen.

    AntwortenLöschen
    Antworten
    1. Als ob ich Dir die Antwort diktiert hätte :-).

      Allerdings stoße ich bei manchen Entwicklern auch auf das Argument, dass Unterfunktionen nerven, da man dann immer im Code hin und her springen muss, um zu erfahren was der Code denn nun eigentlich machen würde. Es sei doch viel besser wenn alles in einer Funktion an einer stelle wäre, weil der Code dann viel besser zu verstehen sei.

      Löschen

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog

Vorbereitungen

Wie jeder hinreichend gebildete Mensch weiß, kommt nach der Impfung die Zombieapokalypse (ein Wort mit drei aufeinanderfolgenden Vokalen. Deswegen schreibt man es oft mit Bindestrich. Aber ich gebe Euch die volle Deutschdröhnung!) Da gilt es vorbereit zu sein. Ich habe natürlich einige Zombiefilme und -comics konsumiert. Auch einschlägige Sachbücher von Max Brooks zu dem Thema habe ich studiert ( Der Zombie Survival Guide: Überleben unter Untoten , World War Z: Operation Zombie ). Vorräte sind bereits angelegt. Das Haus muss noch zombiesicher gemacht werden. Meine Frau weigert sich aber immer noch, die Fenster zu verbarrikadieren. Uneinsichtig! Nun stehe ich hier und überlege, welches Werkzeug wohl die beste Waffe wäre, um Zombies abzuwehren.    Wachsam bleiben!

Des Kaisers

Die Sonne war noch nicht aufgegangen und die Welt lag noch im Zwielicht, als sich eine Gestalt aus dem Nebel schälte. Die Wache am Burgtor richtete sich auf. "He, wer da?" Die Gestalt gab keine Antwort. Die Wache legte ihre Hand bereits auf ihren Schwertknauf, da erkannte sie das Wappen an der Kapuze. Die Graue Eminenz! Schnell sank sie auf die Knie. "Ist Majestät Tjorven im Palast?" Die Wache nickte. Ohne ein weiteres Wort ging die Graue Eminenz durch das Tor. Als die Schritte verhalt waren, richtete sich die Wache wieder auf und sah der Gestalt hinterher. Wie vorhergesehen war sie nun also gekommen, um die Geisel auszulösen. Die Wache straffte sich und ging zurück auf ihren Posten. Doch diese kurze Ablenkung hatte ausgereicht, dass sich eine weitere Person unerlaubt Zutritt über die Burgmauer verschafft hatte. Hier beenden wir diesen kurzen Ausflug in die Welt der Fantasy. Es wird bestimmt noch blutig werden. Aber das hat uns nun nicht mehr zu interessieren. Wir w

Emanzipation 2021

  Sie: Können Sie mir bitte Die Zeitung herüber reichen? Er: Natürlich, ich schreibe nur noch schnell einige Erklärungen an die komplizierten Wörter, damit Sie als Frau sie auch verstehen. Sie: Wie bitte? Ich glaube ich höre nicht richtig. Das ist ja wohl eine unverschämte und sexistische... Er: Außerdem hänge ich an die entsprechenden Personenbezeichnungen immer noch ein *Innen an, damit Sie als Frau auch begreifen, wann Sie mitgemeint sind. Sie: Oh, vielen Dank. Ja das ist auch wirklich nötig.