Wie man den Code einer Funktion schnell versteht

Wie man den Code einer Funktion schnell versteht

Viele Leute kämpfen mit Legacy-Code, weil er schwer zu verstehen ist. Es ist nicht ausdrucksstark. Eine Möglichkeit, die Kluft zwischen Codeschreiber und Codeleser zu verringern, damit sie zu einem Verständnis gelangen, besteht darin, tatsächlich ausdrucksstarken Code zu schreiben.

In allen Fällen müssen Sie in der Lage sein, Code schnell zu lesen. Je aussagekräftiger, desto leichter zu lesen. Je weniger ausdrucksstark … nun, hier sind einige Heuristiken, die Ihnen helfen sollen, herauszufinden, was ein Stück Code tut, insbesondere der Code einer Funktion. Auch wenn diese Funktion so aussieht, als würde sie nicht wollen, dass Sie sie verstehen.

Das Lesen von Code ist wie das Lesen eines Buches

Wie liest man ein Buch? Wenn es sich um ein Belletristikbuch handelt, ist es wahrscheinlich, dass Sie es lesen, um eine gute Zeit zu haben. In diesem Fall ist es am sinnvollsten, es Zeile für Zeile von vorne bis hinten zu lesen.

Aber im Fall von Sachbüchern lesen Sie, um sich Wissen und Verständnis anzueignen. Und wie im Klassiker Wie man ein Buch liest, erklärt, möchten Sie es niemals von vorne bis hinten lesen. Vielmehr möchten Sie zuerst eine „Inspektionslesung“ durchführen, um zwei Dinge zu erreichen:

  • Entscheiden Sie, ob dieses Buch tatsächlich für Sie relevant ist,
  • eine Vorstellung von der Hauptbotschaft und Teilen des Buches bekommen.

Eine Inspektionslektüre besteht darin, das Buch zu überfliegen und nach Stellen zu suchen, die die Informationen zusammenfassen (Inhaltsverzeichnis, Anfang und Ende der Kapitel, Hauptaussagen …). Und das Kontrolllesen ist schnell .

Zurück zum Quellcode, auf welche Art von Buch bezieht sich der Quellcode Ihrer Meinung nach am meisten:Belletristik oder Sachbuch?

Wenn Sie ein Stück Code nicht genug mögen, um es wie einen guten Roman zu lesen, wird der Quellcode für Wissen und Verständnis gelesen. Wie Sachbücher. Aus diesem Grund möchten Sie nicht damit beginnen, eine Funktion „von vorne bis hinten“ zu lesen, dh ihren Code Zeile für Zeile von der ersten bis zur letzten zu verstehen.

Stattdessen möchten Sie Codezeilen überfliegen und nach den wichtigsten Informationen suchen. Sie möchten Code aus den gleichen zwei Gründen wie bei einem Buch einer Inspektionslesung unterziehen:

  • zu entscheiden, ob dieses Stück Code für Sie relevant ist und eine eingehendere Analyse verdient,
  • eine allgemeine Vorstellung von seiner Bedeutung bekommen, bevor man ins Detail geht.

Wie extrahiert man nun die relevanten Informationen beim inspizierenden Lesen einer Funktion?

Eine Funktion ist wie eine Geschichte:Lassen Sie sich verwöhnen

Bevor Sie sich mit ihrer Implementierung befassen, sollten Sie sich als Erstes eine Funktion mit ihrem Namen ansehen. Wenn es gut benannt ist, sollte es eine allgemeine Bedeutung geben und Sie darauf hinweisen, worauf Sie achten müssen, wenn Sie die Leiche untersuchen.

Oder noch besser, der Name, die Parameter und der Rückgabetyp sollten zusammen ausreichen, um alles anzugeben, was Sie über diese Funktion wissen müssen.

Die Hauptfigur stirbt am Ende

Allerdings sind nicht alle Funktionen gleich, und einige von ihnen erfordern einen Blick unter die Haube. Oder manchmal fühlt es sich eher wie ein Abstieg in eine Höhle an. Oder im schlimmsten Fall ein Vortrieb in ein Schwarzes Loch.

Wenn Sie sich in der Höhle befinden, wonach sollten Sie suchen? Das erste, was man sich in einer Funktion ansehen sollte, ist was sie zurückgibt . Der gesamte Rest der Funktion ist darauf ausgerichtet, diesen Wert zurückzugeben, da dies der Sinn dieser Funktion ist.

Also ein großer Spoiler, springen Sie zum Ende der Geschichte der Funktion und beginnen Sie mit der letzten Zeile . Es sollte wie folgt aussehen:return something . In diesem Fall something ist eine der Hauptfiguren der Funktion.

Einige Funktionen haben mehrere return-Anweisungen. Wenn das der Fall ist, sehen Sie sich alle an und versuchen Sie herauszufinden, was sie gemeinsam haben, um ein Gefühl dafür zu bekommen, was diese Funktion zurückgibt. Selbst wenn Funktionen ihre Ausgaben über ihren Rückgabetyp zurückgeben sollten, ändern leider einige Funktionen ihre Parameter, sodass dies ebenfalls als „Rückgabe“ gilt.

Da in einem Schwarzen Loch alles passieren kann, gehen einige Funktionen so weit, globale Variablen zu modifizieren, die dann auch als Ausgabe gelten. Und lassen Sie uns nicht über die Funktionen sprechen, die Werte über Ausnahmen zurückgeben, denn das ist eine ganz andere Dimension.

Wie auch immer, wie unglücklich die Form der Ausgabe auch sein mag, das ist es, wonach Sie zuerst suchen sollten, wenn es eine gibt.

Hauptfiguren und Nebenfiguren finden

In einer traditionellen Handlung wird der Hauptfigur von Nebenfiguren geholfen, ihre Aufgabe zu erfüllen. Im Code ist es dasselbe:Eine Funktion hat Zwischenobjekte, die nicht von der Funktion zurückgegeben werden, aber eine Schlüsselrolle bei ihrer Implementierung spielen.

Hauptfiguren und Nebenfiguren haben etwas gemeinsam:man sieht sie oft. Um also zu wissen, worum es bei der Funktion geht, merken Sie sich die Objekte, die am häufigsten in ihrem Code vorkommen . Die Funktion ist wahrscheinlich über sie.

Diese Technik ist auch nützlich, wenn Sie nur einen Teil einer größeren Funktion untersuchen. Wenn in diesem Teil nichts zurückgegeben wird, hilft das Finden der Objekte, die am häufigsten vorkommen, zu identifizieren, worum es in diesem Teil des Codes geht.

Zur Aktion springen

Sobald Sie die Haupt- und Nebenobjekte der Funktion gefunden haben, möchten Sie als Nächstes wissen, was mit ihnen passiert.

In einer Funktion sind nicht alle Zeilen die Hauptaktion , manchmal weit davon entfernt. Einige Zeilen sind lediglich sekundäre Quests, wie z. B. das Erhalten eines Werts, das Protokollieren einer Information oder das Vorbereiten eines sekundären Charakters. Auf diese Details möchte man bei der Überprüfung der Funktion nicht eingehen. Stattdessen möchten Sie zuerst zur Hauptaktion springen.

Um die Hauptaktion zu lokalisieren, können Sie schnell jede Zeile der Funktion scannen und feststellen, ob sie wie die Hauptaktion aussieht, wenn auch mit einem Bauchgefühl. Der Punkt ist, diese Überprüfung wirklich schnell durchzuführen. Und wenn es sich nicht wie die Hauptaktion anfühlt, verweilen Sie nicht damit, auch wenn Sie nicht alles verstehen, was es tut. Es wird später klarer.

In einigen Fällen erreichen Sie das Ende der Funktion, ohne die Hauptaktion gefunden zu haben, weil es nicht so aussah. Führen Sie in diesem Fall einen zweiten Durchgang mit derselben Technik durch. Jetzt, da Sie jede Zeile der Funktion berücksichtigt haben, sollte die Hauptaktion besser hervorstechen als beim ersten Mal.

Das Identifizieren der Hauptaktion kann am Anfang langsam sein. Aber das Scannen jeder Zeile wird mit der Übung viel schneller und zuverlässiger. Mit der Zeit werden Ihre Augen statt einzelner Zeilen Codeblöcke scannen.

Dies gilt insbesondere, wenn Sie eine Zeit lang an derselben Codebasis arbeiten, da Sie sich an ihren Stil gewöhnen. Der Codierungsstil der Hauptaktion sieht nicht wie der Codierungsstil der anderen Buchhaltungselemente der Funktion aus.

Worum geht es also bei dieser Funktion?

Wenn Sie zuerst eine Inspektionsmessung durchführen, wird das Verstehen, was eine Funktion tut, zu einem kleinen Spiel. Finden Sie heraus, um welche Objekte sich die Funktion dreht und was mit ihnen passiert, indem Sie die sekundären Ursachen herausfiltern.

Dies sollte Ihre Code-Lesegeschwindigkeit erhöhen, Ihnen ermöglichen, mehr Code zu lesen, und es einfacher machen, mit Legacy-Code zu arbeiten.

Haben Sie andere Techniken, um eine Funktion oder Code im Allgemeinen zu verstehen? Wenn Sie dies tun oder die hier vorgestellte Technik ausprobieren, hinterlassen Sie bitte einen Kommentar, um uns mitzuteilen, wie es gelaufen ist!

Das könnte dir auch gefallen

  • 10 Techniken, mit denen Sie den Code anderer besser verstehen