Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Fremden Code lesen

Nach dieser Lektion: Ich kann in fremdem Code finden, wo eine Funktion steckt, und einem Aufruf von Datei zu Datei folgen.

Lektion, 60 Min.14 BefehleLab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Wie man findet, wo eine Funktion steckt

Eine Codebasis ist der gesamte Code eines Programms. Am ersten Arbeitstag bekommen Sie eine, die andere geschrieben haben, mit Tausenden Zeilen und ohne Karte.

Niemand liest alles. Man lernt, eine Frage zu stellen, nach der Antwort zu suchen und von dort den Aufrufen zu folgen.

Am Ende dieser Lektion

Notiz

Ich kann in fremdem Code finden, wo eine Funktion steckt, und einem Aufruf von Datei zu Datei folgen.

Schlüsselwörter

BegriffWas er bedeutet
Codebasisalle Dateien mit Code, die ein Programm bilden
Einstiegspunktdie Datei oder Funktion, in der ein Programm zu laufen beginnt
Suchein allen Dateien nach einem Wort schauen, mit einem Werkzeug wie grep
Aufrufereine Codezeile, die eine Funktion benutzt
Aufrufkettedie Funktionen, zu denen ein Aufruf nacheinander führt
Test als Dokumentationein Test, der im Code zeigt, was eine Funktion verspricht

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Mit einer Frage beginnen, nicht mit einer Datei

Öffnen Sie nicht die erste Datei und lesen Sie nach unten. Fragen Sie etwas Kleines: Wo wird der Gutschein-Rabatt berechnet?

Sehen Sie zuerst die Form der Ordner an. Starten Sie das Programm. Suchen Sie dann nach einem Wort, das auf dem Bildschirm steht.

Legen Sie zuerst das Projekt an. Ein versteckter Cache-Ordner würde die Suche stören, darum schaltet der erste Run ihn ab.

Python keine Cache-Ordner schreiben lassen

Befehl
export PYTHONDONTWRITEBYTECODE=1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die beiden Ordner anlegen

Befehl
mkdir -p ~/codelesen/laden ~/codelesen/tests

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

In das Projekt wechseln

Befehl
cd ~/codelesen

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Preisliste schreiben

Befehl
printf 'PREISE = {"tee": 250, "tasse": 899, "buch": 1200}\n\n\ndef stueckpreis(code):\n    return PREISE[code]\n' > laden/preise.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Gutscheine schreiben

Befehl
printf 'GUTSCHEINE = {"SPAR10": 10, "HALB": 50}\n\n\ndef rabatt_prozent(code):\n    return GUTSCHEINE.get(code, 0)\n' > laden/rabatte.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Bestellsumme schreiben

Befehl
printf 'from laden.preise import stueckpreis\nfrom laden.rabatte import rabatt_prozent\n\n\ndef bestellsumme(positionen, gutschein=None):\n    summe = 0\n    for code, anzahl in positionen:\n        summe = summe + stueckpreis(code) * anzahl\n    prozent = rabatt_prozent(gutschein)\n    return summe - summe * prozent // 100\n' > laden/bestellung.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Startbefehl schreiben

Befehl
printf 'import sys\nfrom laden.bestellung import bestellsumme\n\n\ndef haupt(argumente):\n    positionen = [("tee", 2), ("tasse", 1)]\n    gutschein = argumente[0] if argumente else None\n    print(bestellsumme(positionen, gutschein))\n\n\nhaupt(sys.argv[1:])\n' > laden/start.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Tests schreiben

Befehl
printf 'import unittest\nfrom laden.bestellung import bestellsumme\n\n\nclass BestellungTest(unittest.TestCase):\n    def test_ohne_gutschein(self):\n        self.assertEqual(bestellsumme([("tee", 2)]), 500)\n\n    def test_spar10(self):\n        self.assertEqual(bestellsumme([("tee", 2)], "SPAR10"), 450)\n' > tests/test_bestellung.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Form des Projekts ansehen

Befehl
ls -R

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Mit einem Gutschein starten

Befehl
python3 -m laden.start SPAR10

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Nach einem sichtbaren Wort suchen

Das Programm druckte 1260. Der Gutschein hieß SPAR10, und dieses Wort muss irgendwo stehen. grep -rn durchsucht alle Dateien unter den genannten Ordnern und druckt Datei, Zeilennummer und Zeile.

Ein Name auf dem Bildschirm ist der beste Weg in Code, den Sie nicht kennen.

Nach dem Gutscheinnamen suchen

Befehl
grep -rn "SPAR10" laden tests

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Dem Aufruf zum nächsten Ort folgen

Die Suche fand eine Tabelle von Gutscheinen in rabatte.py. Eine Tabelle tut allein nichts, also fragen Sie weiter: Wer benutzt sie?

Suchen Sie nach der Funktion, die die Tabelle liest. Eine Zeile definiert sie, eine importiert sie und eine ruft sie auf. Am Aufruf erreicht der Rabatt die Bestellung.

Jede Verwendung der Funktion finden

Befehl
grep -rn "rabatt_prozent" laden

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Beispiel: die Aufrufkette eines Befehls

SchrittDatei und FunktionWas geschieht
1laden/start.py, hauptDer Einstiegspunkt liest den Gutschein von der Kommandozeile
2laden/bestellung.py, bestellsummeAddiert die Preise und fragt dann nach dem Rabatt
3laden/preise.py, stueckpreisLiefert den Preis eines Artikels
4laden/rabatte.py, rabatt_prozentSchlägt den Gutschein nach oder liefert 0

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Tests lesen, um Versprechen zu lernen

Ein guter Test sagt, was eine Funktion tun soll, mit echten Eingaben und den Antworten. Er ist die einzige Dokumentation, die nicht veralten kann, denn er scheitert, wenn sie es tut.

Listen Sie die Testnamen auf und lassen Sie sie laufen. Bestehen sie, ist wahr, was Sie gelesen haben.

Die Tests auflisten

Befehl
grep -n "def test" tests/test_bestellung.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Tests starten

Befehl
python3 -m unittest discover -s tests 2>&1 | grep -E "^(OK|FAILED)"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele lesen jede Datei von oben und hoffen, zuerst alles zu verstehen. Das dauert Tage, und das meiste betrifft Ihre Frage nicht. Stellen Sie eine Frage, suchen Sie, folgen Sie dem Aufruf und hören Sie auf, wenn Sie antworten können.

Weiterdenken: ein größeres Projekt

Wählen Sie ein Projekt, das Sie benutzen und dessen Quelltext auf Ihrem Rechner liegt. Wählen Sie eine Sache, die es tut, etwa wie es eine Einstellungsdatei liest.

Notieren Sie die Frage, das gesuchte Wort und die Kette der Dateien, der Sie folgten. Wie viele Schritte waren es?

Über dieses Lab und seinen Quellcode: Lab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.