Skip to content

Zahlen erweiterung #105

@NotLe0n

Description

@NotLe0n

Das Feature
Wir haben Zahlen und Kommazahlen. Manchmal ist es nützlich einen numerischen Datentypen zu haben der keine negativen Zahlen erlaubt. Andere Programmiersprachen nennen diese unsignierte Integers, aber dafür haben wir einen schöneren Begriff aus der Mathematik klauen: natürliche Zahlen.

Jetzt gibt es aber ein Problem. Mit zwei Zahlenwerte war es noch okay zwei Funktionen für Zahlen und Kommazahlen zu machen, jedoch mit drei wird es viel nerviger. Dafür schlage ich vor einen übergeordneten Zahlentyp zu haben, welcher sich je nach deklaration anpasst. Diesen nenne ich Zahl, sodass die untergeordneten Typen von einem Adjektiv unterschieden werden können.
So wird Zahl zu ganze Zahl und Kommazahl zu reelle Zahl.

Der typische Programmierer würde kaum die expliziten Formen benutzen, da es oft reicht den übergeordneten Zahl typ zu benutzen. Man würde sie eher in Funktionsdeklarationen benutzen um den Datentyp einzuschränken wenn es besonders erforderlich ist.

Wenn zum Beispiel eine natürliche Zahl in eine Funktion, die eine ganze Zahl nimmt übergeben wird, dann wird der Wert implizit in eine ganze Zahl konvertiert. Falls der Parameter eine Zahl ist wird der Wert in den "höchsten" Typ umgewandelt, also reelle Zahl.

Eine alternative wäre, dass eine Funktion die eine Zahl nimmt, eine Implementierung generiert welche sich an den Körper anpasst. Wenn also im Körper mit reelen Zahlen rechnet, wird nur die Implementierung für reelen Zahlen generiert. Wenn nur mit ganzen Zahlen gerechnet wird, wird nur die Implementierung für ganze Zahlen generiert, da natürliche Zahlen implizit umgewandelt werden können (reele Zahlen müsste man explizit Casten).
Wenn nur natürliche Zahlen im Körper benutzt werden könnte es Sinn machen auch nur die ganze Zahl Implementierung zu generieren weil es eventuell praktischer wäre.

Syntax Vorschlag

Die natürliche Zahl n ist 0.
Die ganze Zahl g ist -2.
Die reelle Zahl r ist 5,3.

Die Zahl zn ist 6. [ in diesem Fall eine natürliche Zahl ]
Die Zahl zg ist -2. [ in diesem Fall eine ganze Zahl ]
Die Zahl zr ist 6,8. [ in diesem Fall eine reelle Zahl ]
Die Zahl zr ist 5,0. [ in diesem Fall eine reelle Zahl ]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions