Numeralia in Java
Einführende Beispiele
Im Ausdruckrahmen ist an Stelle eines Zeichenfolgenliterals auch eine Folge von Ziffern ohne Anführungszeichen erlaubt, die eine Zahl angeben kann (falls es nicht zu viele Ziffern sind).
Das folgende Programm gibt beispielsweise eine Darstellung der Zahl 32767 aus.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 32767 ); }}java.lang.System.out
32767
Das folgende Programm gibt eine Darstellung der Zahl 0 aus.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 0 ); }}java.lang.System.out
0
Numeralia
Ein Numerale (also ein Zahlwort, Plural: „Numeralia“) ist eine Schreibweise einer bestimmten Zahl (vor allem im Quelltext). Ein Zahlenwert ist die Bedeutung eines Numerales.
- Numerale
32767
- Wert (hier bedeutet «32767» „der Wert des Ausdrucks »32767«, ist aber kein Quelltext!)
- «32767»
»0« und »00« sind zwei verschiedene Numeralia, haben aber dieselbe Zahl als Bedeutung.
- Numerale
0
- Wert
- «0»
- Numerale
00
- Wert
- «0»
Numeralia, außer »0« selber, sollten nicht mit »0« beginnen. Die Zahl Zwölf sollte also beispielsweise als »12« und nicht als »012« geschrieben werden! (Ein Numerale wie »012« hat in Java eine besondere Bedeutung, die aber nur selten benötigt wird und deswegen hier noch nicht weiter behandelt wird.)
Grundstriche in Numeralia
Das Zeichen »_« wird in DIN 32743 Grundstrich genannt. Diese Bezeichnung wird hier übernommen.
Zur optischen Gliederung können auch Grundstriche »_« zwischen zwei Dezimalziffern eingefügt werden. Die Bedeutung des Numerales ist dann der Bedeutung des Numerales nach dem Entfernen aller Grundstriche.
- Numerale
32_767
- Wert
- «32_767»
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 32_767 ); }}java.lang.System.out
32767
Der Grundstrich »_« ist hier also nur eine Lesehilfe für Menschen, von einer Java -Implementation wird er ignoriert.
Wenn Quelltext für Menschen nicht gut lesbar ist, kann er nicht mehr überarbeitet werden, um an neue Umstände angepaßt zu werden, und die in ein Programm investierte Arbeit könnte auf diese Weise verloren gehen. Deswegen sagt man heute, daß Programme vor allem für Menschen geschrieben werden sollen (so daß sie gut lesbar und gut verständlich sind, denn nur dann können sie auch gut überarbeitet werden und erlauben es, Fehler zu entdecken und zu beheben).
- Zum Neuschreiben von Programmen
- They decided to rewrite the code from scratch.
- https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/
Aufbau
Eine Dezimalziffer ist eines der zehn Schriftzeichen »0«, »1«, »2«, »3«, »4«, »5«, »6«, »7«, »8«, und »9«.
Ein Numerale ist eine Folge von Dezimalziffern. Sie darf, außer beim Numerale »0« nicht mit der Ziffer »0« beginnen. Zwischen zwei benachbarten Ziffern dürfen beliebige viele Grundstriche eingefügt sein. Beispiele: »0«, »1«, »2«, »10«, »11«, »100«, »101«, »1000«, »1_000«, »1__000«, »1___0__0_0«.
Das folgende Diagramm stellt diese Regeln bildlich dar.
- Aufbaudiagramm
Jede Dezimalziffer ausser 0
.-.
|-|---.--->( 1 )---.--->|-|
| '-' ^
| .-. |
'--->( 2 )---'
| '-' ^
| .-. |
'--->( 3 )---'
| '-' ^
| .-. |
'--->( 4 )---'
| '-' ^
| .-. |
'--->( 5 )---'
| '-' ^
| .-. |
'--->( 6 )---'
| '-' ^
| .-. |
'--->( 7 )---'
| '-' ^
| .-. |
'--->( 8 )---'
| '-' ^
| .-. |
'--->( 9 )---'
'-'Dezimalziffer
.-.
|-|---.-------->( 0 )----------.--->|-|
| '-' |
| .---------------. |
| | Jede | |
'--->| Dezimalziffer |---'
| ausser 0 |
'---------------'Numerale
.-.
.--->( _ )---.
| '-' |
.---'------------'---.
v .-. |
.-------------------'------->( 0 )-------'--------------------------------------.
| '-' |
| .---------------. |
| | Jede | v
|-|---'--->| Dezimalziffer |---.--------------------------------------------------.---'--->|-|
| ausser 0 | ^ |
'---------------' | |
| .---------------. |
'-----| Dezimalziffer |----------------------------'
'---------------' ^ |
| .-. |
'----.---( _ )---.---'
| '-' ^
| |
'-----------'
Literale
Zeichenfolgenliterale und Numeralia bezeichnen wir zusammenfassend als Literale.
»"abc"« ist ein Zeichenfolgenliteral und »123« ist ein Numerale, beides sind Literale und damit Ausdrücke.
- Begriffshierarchie der Ausdrücke
Ausdruck
^
|Literal
^
|
.-----------'-----------.
| |Zeichenfolgenliteral Numerale
"abc" 123
Semantik
Die Semantik eines Numerales beschreibt, wie man dessen Wert aus den Zeichen des Numerales gewinnt.
Um den Wert eines Numerales zu ermitteln, kann man zunächst sämtliche Grundstriche aus dem Numerale entfernen.
Danach hat ein Numerale den Wert, wie man ihn schon in der Schule für solche Numeralia kennengelernt hat. Beispielsweise steht das Numerals »10« für die Zahl Zehn.
(Das Zeichen »0« hat den Wert Null, die weiteren Ziffern »1«, »2«, »3«, »4«, »5«, »6«, »7«, »8« und »9« haben dann jeweils den Nachfolger des Wertes der vorangehenden Ziffer als Wert [»1« steht für den Nachfolger von Null und so weiter]. Der Wert eines Numerals mit genau einer Ziffer ist der Wert jener Ziffer. Der Wert einer Folge von mehr als einer Ziffer ist die Summe aus dem Wert der letzten Ziffer und dem Zehnfachen des Wertes des vor der letzten Ziffer stehenden Numerals.)
Übungsfragen
? Ausgabe vorhersagen
Was gibt das folgende Programm aus? (Dies ist eine einfache Aufgabe, keine Trickfrage.)
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 7 ); }}
? Gleichheit von Werten
Ist der Wert des Numerales »2_2« gleich dem Wert des Numerales »22«?
? Gleichheit von Numeralia
Ist das Numerale »2_2« gleich dem Numerale »22« (als Numerale [Teil des Quelltextes] betrachtet)?
? Programm lesen *
Warum gibt das folgende Programm keine Darstellung des Wertes »0« aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( O ); }}
? Programm lesen *
Warum gibt das folgende Programm keine Darstellung des Wertes »1« aus?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( l ); }}