2017-01-11 3 views
-3

Als ich anfing zu programmieren, hatte die Sprache, mit der ich anfing, keine booleschen Werte (Oder, vielleicht taten sie das, und ich wusste einfach nichts davon). Trotzdem habe ich nur eine ganze Zahl auf 0 oder 1 für false gesetzt oder wahr. Das hat gut für mich geklappt.Warum wurden Booleans erstellt?

Also meine Frage ist, gibt es einen bestimmten Grund, Booleans erstellt wurden?

Antwort

1

TL; DR: Je mehr Typen und statische Typsicherheit Sie eine Programmiersprache setzt in, desto schwieriger wird es Missverständnisse (potenzielle Fehler) zwischen Ihnen zu erstellen und dem Compiler, der es in die ausführbaren machen Programm, unentdeckt. Ein dedizierter boolescher Datentyp ist ein offensichtlicher und wichtiger Typ, der zu einer Programmiersprache hinzugefügt werden kann, da überall logische Wahrheitswerte erscheinen (if, , <, >, &&, || usw.).


In einer Sprache wie C, die keinen eigenen Datentyp für logische Wahrheitswerte (auch bekannt als Boolesche Werte) haben, oder für ganze Zahlen zwischen ihm und dem Typ nicht eindeutig unterschieden werden:

0 == (1 == 2) ? "succeed" : "fail" 

Was ist das Ergebnis dieses Tests?

  • Wenn es die drei Zahlen vergleicht 0, 1 und 2 für Gleichheit, dann sollte es "fail", weil sie offensichtlich nicht gleich sind. Oder

  • Wenn es einen Vergleich der beiden Zahlen 1 und 2 für Gleichheit, und dann, ob dieser erste Test nicht bestanden/falsch war (0), dann sollte es "succeed".

Diese Art von Mehrdeutigkeit kann in Programmiersprachen leicht Oberfläche, die nicht viel statische Typsicherheit liefern kann. Es kann zu Programmierfehlern (auch Bugs genannt) führen, nicht weil der Übersetzer der Programmiersprache nicht weiß, was damit zu tun ist, sondern weil Sie und der Compiler unterschiedliche Vorstellungen davon haben, was es bedeutet. Auch wenn Sie genau wissen, wie der Test gemäß den Regeln der Sprache interpretiert werden sollte, könnte jemand anderes, der die Wartung Ihres Codes übernimmt, weniger gut informiert sein, Ihren Code missverstehen und ihn ändern (d. H. Falsch machen).

Statische Systeme sollen solche Mehrdeutigkeiten verhindern und damit das Fehlerpotenzial von Anfang an reduzieren. Jeder Ausdruck ist mit einem speziellen statischen Typ zugeordnet (3 hat int geben, hat 3.141double geben, hat 3 + 141int geben, hat 3 == 141bool geben, und so weiter), und seine statischen Typ bestimmt, wie man diesen Ausdruck mit anderen Ausdrücken kombinieren.

Zum Beispiel kann die Programmiersprache C# (die ziemlich stark statisch typisierten und verfügt über einen eigenen bool Datentyp) erzwingt die folgenden Typregeln:

  • Integer-Literale wie 0, 1 oder 2 Art hat int.
  • Der Ausdruck a == b hat immer den Typ bool (egal welche Typen die Unterausdrücke a und b haben).
  • Weder die Art noch die Art intbool einen Operator == definieren, die einen Ausdruck mit einem intbool Ausdruck Vergleich ermöglicht.

Diese drei Regeln führen, den Compiler den Ausdruck 0 == (1 == 2) als ungültig zu verwerfen, so dass Sie nicht ein ausführbares Programm von ihm, und ein potentieller Fehler verhindert wurde erstellen kann, bevor es eine Wirkung haben könnte.

Verwandte Themen