Wie groß sollte die Funktionslänge sein (Codezeilen in einer Funktion)? [Duplikat

StackOverflow https://stackoverflow.com/questions/2976834

  •  24-10-2019
  •  | 
  •  

Frage

Mögliches Duplikat:
Wie viele Codezeilen sollte eine Funktion/Prozedur/Methode haben?

Ich würde gerne wissen, wie viele Codezeilen Funktionen haben sollten? Wie viele Zeilen ist zu viel.

Ich habe das vor einiger Zeit gelesen, es rund 10 oder 20 Zeilen, aber es lag daran, dass der Bildschirm nur so viele Zeilen aufnehmen würde. Jetzt, da die Bildschirmgröße größer wird, würde dies nicht wahr sein.

Nehmen wir an, dass das No -Teil der Funktion überall anderer anderer verwendet wird, dh das Trockenprinzip identifiziert.

Ich würde gerne hören, was andere dazu zu sagen haben.

Danke.

Notiz: Duplikat von Wann ist eine Funktion zu lang?, konnte es nicht finden, als ich gepostet habe.

War es hilfreich?

Lösung

Diese Art von Frage ist gut beantwortet in Code vollständig. Steve McConnel schrieb eine ganze Seite um diese Frage zu beantworten. Seine Schlussfolgerung:

Jahrzehnte Beweise sagen, dass Routinen solcher Länge (> 100 Zeilen) nicht mehr fehleranfällig sind als kürzere Routinen. Lassen Sie Themen wie den Zusammenhalt der Routine, die Anzahl der Entscheidungspunkte, die Anzahl der Kommentare zur Erklärung der Routine und andere komplexbezogene Überlegungen die Länge der Routine eher als eine Längenbeschränkung an sich auferlegen. Wenn Sie jedoch länger als etwa 200 Zeilen Routinen schreiben möchten, seien Sie vorsichtig.

Andere Tipps

Linien sind irrelevant, aber Komplexität.

Eine Funktion sollte eine Aufgabe erledigen, und sie sollte leicht erkennbar sein. Sie sollten nicht mehr als ein paar Momente brauchen, um genau zu verstehen, wie und was die Funktion macht.

Es sollte so viele haben, wie es braucht.

Ich sehe keinen Punkt darin, eine Funktionsleitungszeile auf die Bildschirmgröße einzuschränken (in Ordnung, um fair zu sein, ich habe erst nach dem Aufnehmen von mehr als 10-20 Zeilen begonnen, bis nach dem Bildschirmen einzuziehen war-vielleicht machte dies in einigen Umgebungen sinnvoll). . Schreiben Sie einfach die Funktion, da sie Sinn macht. Wenn es so groß wird, dass Code -Teile wiederholt werden, richten Sie diese Teile mit anderen Funktionen/Klassen/Komponenten um.

Es ist eine ziemlich willkürliche Faustregel. Einige mögen 20 Zeilen, andere die No-Scroll-Regel. Stellen Sie am Ende einfach sicher, dass es auf einen Blick lesbar und leicht verstanden wird. Lesen Sie über Ihre Solide Prinzipien und stellen Sie sicher, dass die Methode nur 1 Verantwortung usw. hat.

So lange wie nötig, so kurz wie möglich.

Ich nehme als Faustregel 5-10 Zeilen, aber wenn es eine Logik gibt, die nicht leicht in mehrere Funktionen berücksichtigt werden kann, schreibe ich bei Bedarf länger. Andererseits habe ich oft Funktionen, die nur ein oder zwei Zeilen lang sind.

Wenn Sie nicht unmittelbar Verstehen Sie, was ein Teil des Codes tut, schreiben Sie eine neue Funktion dafür.

Ich denke nicht, dass es wichtig ist, wie viele Zeilen es hat ... solange es effizient ist.

Jeder Code, der überall in Ihrem Codebasis wiederverwendet werden kann, sollte in derselben Klasse oder in einer gemeinsamen Klasse auf eine andere Funktion/Methode verschoben werden und aufgerufen werden.

Ich habe die Bildschirmgröße bereits schon einmal gehört, aber offensichtlich nicht beabsichtigt, eine harte Grenze zu sein oder mit der Überwachungsgröße zu skalieren. Es ist nur beabsichtigt, das Prinzip der Trockenheit zu vermitteln und die Funktionen so klein wie möglich zu halten, ist eine der besten Möglichkeiten, um Code zu schreiben, der skalieren kann (in Projektgröße).

Das Linux -Kernel -Codierungsstil -Dokument besagt:

Funktionen sollten kurz und süß sein und nur eine Sache machen. Sie sollten auf ein oder zwei Siebsbildschirm passen (die Größe der ISO/ANSI -Bildschirmgröße beträgt 80x24, wie wir alle wissen), und machen Sie eine Sache und machen Sie das gut.

Jetzt ist mir klar, dass dies im Zusammenhang mit dem Kernelcode liegt, aber ich denke, einige der Punkte, die die Funktionslänge in der Regel ausmacht. Finden Sie eine Kopie hier. Der Abschnitt über Funktionen ist Kapitel 4.

Alles in allem sollte die Funktionslänge nicht durch eine künstliche Regel eingeschränkt werden. Faktor Sachen aus, wenn es sinnvoll ist, und weil es das Lesen leichter macht, aber die Regel über 1-2 Bildschirme ist nicht in Stein gemeißelt.

Dies ist nur eine Meinung aus einer OO-Perspektive:

Ich ziehe es vor, meine Methoden in logischen Arbeitseinheiten zu behalten und kümmere mich nicht wirklich um Metriken wie LoC. Dies macht es auch ziemlich einfach, Ihre Methoden richtig zu benennen, und verhindert, dass sie aufgebläht werden.

Ein sehr triviales funktionelles Beispiel wäre, anstatt eine Funktion zu haben, die die Fibonacci -Sequenz -Inline in einer Schleife berechnet.

Ein komplexeres Beispiel in OO -Mode wäre ein HTTP -Client, der eine Get -Anfrage ausführt. Ich würde das in so etwas zerlegen:

Connection getConnection(String host, int port)
Request createRequest(String[] params)
void sendRequest(Request r)
String getResponse(Connection c,Request r)

Funktionen sollten genau klein genug sein, um ihren Job zu erledigen, aber nicht kleiner.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top