6 Stimmen

Wann sollte ich eine Funktion unterbrechen?

Es ist ratsam, eine lange Funktion in eine Hauptfunktion und Hilfsfunktionen zu unterteilen.

Ich weiß, dass außerhalb des Moduls nur die Hauptfunktion aufgerufen wird, aber ihre große Länge kann sich als einschüchternd erweisen.

In den Lehrbüchern ist die Anzahl der Zeilen begrenzt, aber ich halte das für zu starr.

P.S.: Ich programmiere in Python und muss eingehende Nachrichten verarbeiten. Die Funktion gibt ein Tupel zurück, das die Nachricht enthält, aber in den internen Datentypen von Python. Sie können also für jeden Nachrichtentyp etwas unabhängigen Code sehen.

Doppelte Frage

Wann ist eine Funktion zu lang?

1voto

batbrat Punkte 5055

Ich habe kürzlich mit einem Freund darüber gesprochen. Er schlug ein Refactoring vor, um Anliegen zu trennen, und ich muss sagen, dass ich zustimmen muss. Das heißt, eine Funktion sollte eine Sache tun, wenn sie mehr als eine Sache tut, sollte sie aufgeteilt werden. Es macht keinen Sinn, eine Funktion aufzuteilen, nur um die Bedeutung zu verschleiern. Schließlich ist eine Funktion ein Codeblock, der nur eine Sache tut!

1voto

sharptooth Punkte 162790

Die Begrenzung der Zeilenzahl ist oft unpraktisch, da sie der Lesbarkeit nicht gerecht wird. Es ist besser zu versuchen, Gruppen von Codezeilen, die nur wenige Eingaben und nur wenige Ausgaben haben, voneinander zu trennen und daraus eine eigene Funktion zu machen. Das ist nicht immer möglich - dann ist es oft ratsam, den Code so zu belassen, wie er ist, und ihn nicht um des Refactorings willen zu überarbeiten.

1voto

Xolve Punkte 20780

Nun, da ich in Python programmiere, habe ich die Freiheit, Funktionen innerhalb von Funktionen zu schreiben, im Gegensatz zu C, C++ oder Java. Das halte ich für die bessere Wahl.

1voto

Webdeveloper011 Punkte 73

Das ist nicht festgelegt. Aber die Linie sollte so niedrig wie möglich sein. Sie können sich aber auch an die 30er-Rolle halten. Ich befolge dies in meinen PHP-Skripten, wenn nötig.

Die 30er-Regel:

"Rule of 30" in Refactoring in Large Software Projects von Martin Lippert und Stephen Roock:

  • Die Methoden sollten im Durchschnitt nicht mehr als 30 Codezeilen umfassen.

  • Eine Klasse sollte durchschnittlich weniger als 30 Methoden enthalten.

  • Ein Paket/eine Bibliothek sollte nicht mehr als 30 Klassen enthalten.

  • Teilsysteme sollten nicht mehr als 30 Pakete enthalten.

  • Ein System mit mehr als 30 Teilsystemen kann zu Problemen führen.

Wenn ein Element aus mehr als 30 Unterelementen besteht, liegt mit hoher Wahrscheinlichkeit ein ernsthaftes Problem vor.

0voto

cobbal Punkte 68319

Ich persönlich breche eine Funktion ab, wenn sie entweder insgesamt Zeilen oder insgesamt Verarbeitungszeit einspart.

wenn ich den Helfer nur einmal pro Hauptfunktion ausführe, mache ich mir keine Mühe

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X