Wenn man die Kodierungspraxis der Zerlegung von Funktionen in kleinere Funktionen verwendet, die jeweils "eine logische Sache" machen, scheint es, als ob der Ansatz manchmal zu Code führt, der schwer zu debuggen ist.Bei einer Funktion mit mehreren logischen Schritten, bei der jeder Schritt auf N geteilte Objekte verweist, wie kann diese Funktion optimal dekonstruiert werden?
Als Beispiel stelle ich mir den folgenden Code haben:
Function Foo(Class1* p1, Class2* p2, Class3* p3)
{
Function InitializeStuff(Class1* p1, Class2* p2, Class3* p3)
Function DoFirstBlockOfWork(Class1* p1, Class2* p2, Class3* p3)
Function DoSecondBlockOfWork(Class1* p1, Class2* p2, Class3* p3)
Function FinishStuff(Class1* p1, Class2* p2, Class3* p3)
}
In diesem Beispiel gibt es drei Objektreferenzen in jedem logischen Block benötigt. Wenn nun der Debugger in einem dieser Blöcke stoppt, ist es schwierig zu wissen, woher die Eingaben in der Codedatei stammen (besonders wenn sie nicht mit der Codebasis vertraut sind).
In diesem Fall gibt es den zusätzlichen Vorteil des Verständnisses beim Lesen von oben nach unten, aber beim Debugging von unten nach oben, scheint diese Methode tatsächlich mühsamer als das Platzieren aller Funktionalität in Foo.
Also, im Falle einer Funktion mit stark gekoppelten logischen Blöcken, was ist das Argument für die Aufteilung der Funktionalität in kleinere Funktionen?
. (Anmerkung: Ich habe mit der Annahme leben, dass es immer besten Funktionen dekonstruieren zum kleinsten logischen Block)
Sie erstellen eine Funktion, wenn Sie das gleiche mehrmals verwenden möchten. Angenommen, Sie definieren ein Polynom f (x) = x^2 + 3x +4 und Sie benötigen den Wert des Polynoms für x = 3, 4 und 5. In diesem Fall schreiben Sie das Polynom, wie es geschrieben wird und Sie rufen einfach f (3), f (4) und f (5) auf. Aber wenn Sie etwas nur einmal brauchen, sagen wir, wir brauchen das Polynom nur für einen einzelnen Wert 7, dann können wir einfach schreiben 7 * 7 + 3 * 7 + 4inline und wir sind fertig. – dimm
Ich verstehe, dass eine Funktion in Fällen nützlich ist, in denen Code wiederverwendet wird. Die Frage, die ich stelle, ist, unabhängig von der Wiederverwendung, warum ist das Aufspalten von Funktionen auf den kleinsten logischen Block eine nützliche und gut akzeptierte Praxis, wenn es beim Debuggen unnötige Komplexität verursacht? – Veita