Werte und Typen: warum 1 nicht "1" ist
Ein Typ ist eine Menge erlaubter Werte. Dieser eine Satz aus logic:1 erklärt jeden seltsamen Fehler, den Anfänger treffen.
Ein Programm ist ein Haufen Werte, die hin und her geschoben werden. Eine Zahl, ein Stück Text, ein Ja oder Nein, eine Liste von Punkten. Alles Weitere in dieser Lektion dreht sich um eine Frage: Was für ein Ding ist dieser Wert, und was darf damit passieren.
In logic:1 war ein Typ einfach eine Menge. Die boolesche Menge hat genau zwei Elemente: true und false. Die Menge der ganzen Zahlen enthält ganze Zahlen. Die Menge der Zeichenketten enthält Text beliebiger Länge, auch den leeren Text. Zu sagen, ein Wert hat einen Typ, heißt zu sagen, aus welcher Menge er stammt. Jede Operation, die du schreibst, ist eine Aussage über Mengen: Addition will zwei Zahlen, Textverbinden will zwei Zeichenketten.
bool = { true, false }
int = { ..., -2, -1, 0, 1, 2, ... }
string = any sequence of characters
age + 1 needs a value from int
"1" + 1 mixes a value from string with a value from intEin Typ ist eine Menge von Werten, und eine Operation ist eine Aussage über Mengen.Hier sind dieselben Werte in drei Sprachen geschrieben. Versuche nicht, das auswendig zu lernen. Lies es so, wie du denselben Satz in drei Dialekten lesen würdest: Die Wörter ändern sich, die Bedeutung nicht.
name = "Ada"
age = 36
tall = True
scores = [90, 85, 77]
prices = {"soup": 2.50, "juice": 1.90}Python: kein Typ von Hand geschrieben, der Wert entscheidet.const name = "Ada";
const age = 36;
const tall = true;
const scores = [90, 85, 77];
const prices = { soup: 2.50, juice: 1.90 };JavaScript: const für einen Namen, dem nichts Neues zugewiesen wird.var name string = "Ada"
var age int = 36
var tall bool = true
scores := []int{90, 85, 77}
prices := map[string]float64{"soup": 2.50, "juice": 1.90}Go: der Typ steht neben dem Namen, und der Compiler prüft ihn.Jetzt die klassische Anfängerkatastrophe. Ein Anmeldeformular fragt nach dem Alter. Das Formular schickt Text, denn alles, was ein Formular schickt, ist Text. Und dein Code versucht, eins dazuzuzählen.
form sends: age = "16"
8 + 1 = 9
"16" + 1 = ?Acht plus eins ist neun. Was ist der Text "16" plus eins?Die letzte Idee ist Veränderbarkeit, und sie kostet Menschen mehr Debug-Stunden als alles andere in dieser Lektion. Eine Liste ist ein Objekt, auf das viele Namen zeigen können. Ändere die Liste über einen Namen, und alle anderen Namen sehen die Änderung, denn es gab immer nur eine Liste.
scores = [90, 85]
same = scores
same.append(77)
print(scores)
[90, 85, 77]Zwei Namen, eine Liste. Die Änderung ist über beide sichtbar.Sammlungen tragen auch die Big-O-Idee aus logic:1 in sich. Die richtige Sammlung zu wählen ist oft mehr wert, als Schleifen umzuschreiben. Eine Liste ist für Reihenfolge und für das Durchgehen aller Elemente. Ein Map ist für das Nachschlagen über einen Schlüssel. Die Kostentabelle unten ist die ganze Begründung dafür, dass es Maps gibt.
list.append(x) O(1)
map[key] O(1) average
x in list O(n)
x in map O(1) averageDie Kosten einer Operation sind die Kosten der Sammlung, die die Werte hält.Praxis
Ein Anmeldeformular schickt das Alter als Text: age = "16". Dein Code führt age + 1 aus. Wie beschreibt man ehrlich, was hier schiefgeht?
Hinweise
- Das Feld kommt aus einem Formular, und ein Formular schickt immer nur Text.
- Frage, welcher der beiden Werte in der Menge der Zeichenketten liegt und welcher in der Menge der Zahlen.
Ordne jede Aufgabe der Sammlung zu, für die sie gebaut ist. Entscheidend ist die Aufgabe, nicht die Syntax.
Hinweise
- Python und Go schreiben dieselbe Sammlung verschieden: Eine Liste von Namen bleibt eine Liste von Namen.
- Ein Map beantwortet, welcher Wert zu einem Schlüssel gehört, ohne die ganze Sammlung zu durchlaufen.
Bring die Schritte in die richtige Reihenfolge, mit denen man ein Alter aus einem Formular liest. So ist fast jedes Programm gebaut, das mit der Außenwelt spricht.
- 1Prüfen, ob der Text wirklich wie eine ganze Zahl aussieht
- 2Den Text in eine Zahl umwandeln
- 3Das Ergebnis wieder als Text nach draußen schicken
- 4Den rohen Text genau so lesen, wie das Formular ihn geschickt hat
- 5Die Arithmetik auf der Zahl ausführen
Hinweise
- Nichts lässt sich berechnen, solange es keine Zahl ist.
- Die Prüfung kommt vor der Arithmetik: Ein Programm macht nie den dritten Schritt, wenn der zweite nicht laufen konnte.