Dart für Anfänger 1.5 integer Variable

Dart
Die Programmiersprache Dart
 

Im letzten Post haben Sie ein kleines Programm geschrieben, das im Terminal eine Eingabe entgegen nimmt. Beim lernen einer Programmiersprache ist Interaktivität immer spannender, als nur reine Theorie. Hier noch einmal der Code:



import 'dart:io';

void main(List<String> arguments) {
  String? zahl;
  var zahl2;
  int ergebnis;
  zahl = stdin.readLineSync();
  zahl2 = int.tryParse(zahl!);
  ergebnis = zahl2 * 10;
  print(ergebnis);
}

Der Code oben erwartet eine ganze Zahl. Das hätte man natürlich auch besser machen können. Zum Beispiel ist dieser Code klarer:

import 'dart:io';

void main(List<String> arguments) {
  String? zahl;
  var zahl2;
  int ergebnis;
  print('Bitte geben Sie eine ganze Zahl ein:');
  zahl = stdin.readLineSync();
  zahl2 = int.tryParse(zahl!);
  ergebnis = zahl2 * 10;
  print(ergebnis);
  print('Programmende!');
}
}

Jetzt ist die Ausgabe im Terminal besser verständlich.

Die Integer Variable


Wie in diesem Post schon erwähnt nutzen Sie Integer Variablen um ganze Zahlen zu speichern bzw. im Programm zu verwenden. Wie schon öfters erwähnt ist Dart eine objektorientierte Programmiersprache. 
Wenn Sie also eine Integer Variable deklarieren erschaffen Sie gleichzeitig ein Integer Objekt. Dieses Objekt leitet sich von der Integer Klasse ab. Eine Klasse stellt Eigenschaften und Methoden zur Verfügung. Eigenschaften sind Werte die man auslesen kann, Methoden darf man sich als "eingebaute" Funktionen vorstellen.
Wenn Sie also eine Integer Variable deklarieren, erbt diese alle Eigenschaften und Methoden der Integer Klasse. Diese können Sie dann auf Ihre Variable bezogen benutzen. Beispiel:

import 'dart:io';

void main(List<String> arguments) {
  String? zahl = '';
  int? zahl2 = 0;
  int ergebnis;
  print('Bitte geben Sie eine ganze Zahl ein:');
  zahl = stdin.readLineSync();
  zahl2 = int.tryParse(zahl!);
  ergebnis = zahl2!.abs();
  print(ergebnis);
  print('Programmende!');
}
}

Oben sehen Sie bereits bekannten Code, leicht abgewandelt. Betrachten Sie hier  int.tryParse(zahl!); genauer.
int ist das geschützte Schlüsselwort für die Deklaration einer Integer Variable. Mit dem Punkt nach int trennen wir das Schlüsselwort von der Methode / Funktion die wir benutzen wollen. Dementsprechend ist tryParse(...) die Funktion die wir verwenden.
Oben aber haben Sie gelesen, das wenn Sie eine int Variable deklarieren, diese die Eigenschaften und Methoden der int Klasse erbt. Also wieso können Sie nicht einfach zahl.tryParse(zahl!); verwenden ? Klassen können statische Methoden besitzen. Diese können nur über die Klasse, in diesem Fall int, aufgerufen werden ! Die Methoden, statische und vererbbare, ersehen Sie am schnellsten aus der Dart Dokumentation der Entwickler.

abs(...)


abs(...) ist eine Methode der int Klasse und liefert den "absolute Value" der Variable. Dabei berechnet die Funktion, den Abstand zu 0. Der negative Wert -61 hat einen Abstand von 61 zu 0. Der positive Wert +44 hat den Abstand 44 zu 0. Man sieht das abs(...) immer eine positive Zahl als Ergebnis liefert. Die Anwendungsbeispiele für diese Funktionsweise sind nicht offensichtlich. Ein Beispiel wäre eine Navigationsberechnung, wobei der Startpunkt 0 ist. Je nach dem in welche Richtung man sich bewegt, entsteht ein relativer positiver oder negativer Abstand zu 0. Mit abs(...) können Sie diese Werte in absolute Zahlen umwandeln und weitere Berechnungen durchführen. Mehr dazu hier (englisch). Beispiel:

void main() {
  int a = 500;
  int b = 250;
  int resultat = -999;
  resultat = resultat.abs();
  print(resultat);
}


gcd(...)


Diese berechnet den größten gemeinsamen Teiler von zwei Integer Variablen, ohne das dabei ein Rest entsteht. Beispiel:

import 'dart:io';

void main(List<String> arguments) {
  String? zahl = '';
  int? zahl2 = 0;
  int ergebnis;
  print('Bitte geben Sie eine ganze Zahl ein:');
  zahl = stdin.readLineSync();
  zahl2 = int.tryParse(zahl!);
  ergebnis = zahl2!.gcd(40);
  print(ergebnis);
  print('Programmende!');
}

Bei einer Eingabe von 80 ist das Ergebnis 40. Bei einer Eingabe von 87 ist das Ergebnis 1.
gcd(...) erwartet als Argument eine integer Variable oder eine ganze Zahl.

toString(...)


Es kann vorkommen, das man einen integer Wert in einen String umwandeln möchte. Hier der Beispiel Code:

import 'dart:io';

void main(List<String> arguments) {
  String? zahl = '';
  int? zahl2 = 0;
  String ergebnis;
  String ergebnis2;
  String text1;

  print('Bitte geben Sie Ihr Alter ein:');
  zahl = stdin.readLineSync();
  zahl2 = int.tryParse(zahl!);
  ergebnis = zahl2.toString();
  text1 = 'Ihr Alter ist:';
  ergebnis2 = text1 + ergebnis;
  print(ergebnis2);
  print('Programmende!');
}

Im Code oben lesen Sie mit stdin.readLineSync() eine Eingabe im Terminalfenster, die vom Benutzer mit RETURN abgeschlossen wird. Diese Eingabe wird anschliessend als String bereit gestellt. Diese Methode steht deshalb zur Verfügung, da wir weiter oben mit import 'dart:io' , die entsprechende Bibliothek in den Code eingebunden haben. 
Mit int.tryParse(zahl!);  wandeln Sie den String in eine integer Zahl um. Anschliessend gehen Sie den umgekehrten Weg und wandeln eine integer Zahl mit zahl2.to String();  wieder in einen String um. Mit text1 + ergebnis verknüpfen Sie die zwei Strings und drucken sie mit print(ergebnis2); in das Terminal Fenster.

Sonderfall


Schauen Sie sich mal den Code unten an:

void main() {
  int a = 500;
  int b = 250;
  int resultat = a/b;
  
  print(resultat);
}

Der Code sieht fehlerfrei aus. Sowohl 500, als auch 250 sind ganze Zahlen. 500 geteilt durch 250 hat als Ergebnis ebenfalls eine ganze Zahl, die 2 . Für dieses kleine Code Fragment habe ich das DartPad benutzt und erhalte trotzdem folgende Fehlermeldung:

Fehlermeldung

Was ist damit gemeint ? Sowohl die integer Klasse / Variable, als auch die double Klasse / Variable leiten sich von der num Klasse ab. Das ist aber an sich noch keine Erklärung. Diese liegt darin, das in Dart eine Division immer einen double Wert als Ergebnis zurückgibt. Was tun ? Beispiel:

void main() {
  int a = 500;
  int b = 250;
  int resultat = (a/b).truncate();
  
  print(resultat);
}

Im Code oben benutzen wir die .truncate(); Methode der int Klasse. Sie kürzt die Zahl um die Nachkommastellen und gibt eine ganze Zahl, also einen integer Wert zurück. Es gibt im übrigen eine Kurzschreibweise, die den gleichen Effekt hat:
int resultat = a ~/ b; . Hier repräsentiert das ~ Zeichen, dass das Ergebnis um die Nachkommastellen gekürzt zurückgegeben wird.

Fazit


In diesem Post haben Sie jetzt schon einiges gelernt im Zusammenhang mit der integer Variable. Vor allem das sie mehr Möglichkeiten bietet, als die simple Speicherung von ganzen Zahlen. integer bezeichnet dabei nicht nur eine Variablen Variante sondern auch eine Klasse. integer und double übergeordnet ist die num Klasse.
Für das Verständnis wichtig ist die Tatsache, das gewisse Methoden / Funktionen in beiden Klassen vorhanden sind, aber zum Teil unterschiedliche Variablen Typen zurückgeben. Bevor man sich in der Handhabung nicht sicher ist, sollte man immer die Dokumentation zu Rate ziehen. Sie ist gut und oft ausführlich. Im nächsten Post geht es weiter mit dem Thema. Bis bald !

Kommentare

Beliebte Posts aus diesem Blog

Dart Basic: Strings Part 1

Dart Basic: Parameter in Funktionen

Dart Basic: Listen Part 1