10-LOC-Funktionen



  • Hallo,

    ich lese immer wieder dass guter programmierstil es ist funktionen so knapp wie möglich zu haben. Z.B. 10 Zeilen lines of code.

    Allerdings ist mir das nicht klar. Macht man es dann so dass man alle 10 Zeilen eine subfunktion schreibt und diese nur ein einziges mal ausgeführt wird?

    Ich schaffe es nicht immer auf 10 Zeilen zu kommen sondern hab dann z.B. eine funktion von 50 Zeilen wo dann allein ein std::cout oder ein std::throw nach nem if schon 10 Zeilen einnimmt.

    Wie soll sowas gehen?

    danke



  • "Macht man es dann so dass man alle 10 Zeilen eine subfunktion schreibt und diese nur ein einziges mal ausgeführt wird"
    Nein - so genau sollte man das nicht nehmen...
    So bald du die Aufgabe benennen kannst, kann man die Funktionalität in eine Funktion auslagern - auch, wenn sie nur einmal aufgerufen wird.
    Du solltest dies aber nicht auf biegen und brechen versuchen... Wobei idR. iwas falsch gemacht wurde, wenn das nicht so hübsch geht ;o)

    bb



  • Ich halte so eine Pauschalisierung für ungeschickt.

    Klar kann man viele Sachen auf kürzeren Code brechen, was dann aber eher auf das zurück zu führen ist, was unskilled bereits gesagt hat, nämlich das trennen von Funktionalitäten. Sprich eine Funktion soll eine genau spezifizierte Aufgabe haben und soll nicht noch ein Haufen anderes Zeugs tun nur weil man keine zweite Funktion schreiben will.

    Ich würde eher raten dir, wenn du das Gefühl hast, dass die Funktion zu lang ist zu überdenken, was die Aufgabe der Funktion ist und wenn du merkst, wie du dir sie dann so beschreibst "... und ... und .. und dann noch das", dann ist es wahrscheinlich Zeit die Funktion aufzusplitten.



  • Die 10 Zeilen finde ich auch ziemlich kurz. Es ist ein wenig idealistisch, dass so kurze Funktionen zwangsläufig zu besserem Code führen. Sorge lieber dafür, dass du nach funktionalen und nicht formalen Aspekten auftrennst: Wenn eine Funktion etliche Aufgaben hat und du beim Aufruf denkst, eigentlich müsse ja nur ein Teil davon ausgeführt werden, ist eine Aufteilung eine Überlegung wert. Natürlich ist es auch vorteilhaft, wenn du beim Entwickeln merkst: Ah, dieser Teil könnte durchaus wiederverwendet werden. Spätestens beim Auftreten von Codeduplizierung oder sehr grossen Funktionsschnittstellen lohnt sich eine Auftrennung.

    Aber präventiv die 10-Zeilen-Grenze einzuhalten würde ich nicht. Das führt unweigerlich dazu, dass eine Klasse oder ein Namensraum sehr viele Funktionen beinhaltet. Dann kommt wieder ein Idealist von der Kleine-Klassen-Fraktion und sagt dir, 5 Membervariablen und 15 Memberfunktionen seien das Maximum, darüber hinaus musst du zwei Klassen erstellen. Merkwürdigerweise trifft man aber selten Leute, die sich gegen massenhaft Minimalklassen stellen, von denen erst zehn gemeinsam überhaupt einen Abstraktionsgedanken wert sind. 😉



  • Vergiss die Regel einfach und behalte stattdessen einfach im Hinterkopf, dass Funktionen mit genau einer klar definierten Aufgabe gut sind.
    Deine Funktionen werden mit wachsender Erfahrung ganz automatisch kürzer werden und diesem Konzept entsprechen.



  • Hellhörig könntest du bspw. werden wenn du Verschachtelungstiefe > 4 hast oder du nach Funktionalität in einer Funktion suchen musst, weil sie eigentlich mehrere Zwecke erfüllt oder wenn du Copy&Paste von Teilen einer Funktion machen musst, weil sie mehr macht als du eigentlich brauchst.

    MfG SideWinder


Anmelden zum Antworten