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

I see u

  Beim alljährlichen erzwungenen Aufräumen fand sich dieses Bild. Das älteste Kind hatte es vor etwa ein oder zwei Jahren gemalt und dann an die Tür des zweitältesten Kindes geklebt. Lieb, nicht?

Keine Angst vorm Manchester-Liberalismus

Ich recherchiere gerade etwas über das 19. Jahrhundert und die Industrielle Revolution, was sich jedoch noch etwas hinziehen wird. Im Geiste von Open Science möchte ich jedoch bereits einige Quellen vorstellen; zum Thema "Manchester-Liberalismus". Die heute gängige Vorstellung einer Ideologie, die nur auf das Eigeninteresse und die Vorteile der "Reichen" bedacht war und des Staates als Hüter des Gemeinwohls und Beschützer der Armen, der sich im 19. Jahrhundert völlig aus der Wirtschaft heraushielt, wird in den angeführten Texten als nicht ganz korrekt präsentiert. Vielmehr zeigt sich, dass die Interventionen des Staats die Lage der Armen verschlechterte und durch das Zurückdrängen des Staates verbessert wurde. Ich werde darauf hoffentlich später noch genauer eingehen können. Gerecht ist nur die Freiheit von Richard Herzinger und Mythos Manchestertum von Detmar Doering

I Want To Hold Your Hand

Ich habe gerade im Radio gehört, dass genau heute vor 60 Jahren die Beatles ihr Stück I Want To Hold Your Hand veröffentlicht haben. Dafür unterbreche ich gerne meine Blog-Abstinenz und zeige hier meine Lieblingsinterpretation dieses Lieds aus der wunderbaren Serie GLEE: