PureBasic: Variablentypen

Es existieren mehrere sogenannter Variablentypen. Jede Variable hat einen ihr zugewiesenen Typ, wobei der voreingestelle Integer (.i) ist, was bedeutet, dass die Variable eine Ganzzahl ist und im Speicher 4 Byte bzw. 8 Byte einnimmt, je nachdem, ob man ein 32- oder 64-Bit-System hat. Die Größe im Arbeitsspeicher ist entscheidend für die maximale Größe des Wertes.

Im Arbeitsspeicher sind alle Zahlen im binären System abgespeichert, d.h. als Nullen und Einsen, der Sprache des Computers. Ein Byte besteht aus 8 Bits, also 8 Stellen im binären System. Wenn nun ein Integer 4 Byte groß ist, können in ihm Zahlen abgespeichert werden, die im binären System insgesamt 32 Bits groß sind.

Da in PureBasic Variablen bis auf wenige Ausnahmen ein Vorzeichen erhalten, halbiert sich der Maximalwert einer Variable jedoch, da das Vorzeichen ebenfalls über das Binärsystem mit den Bits einer Variable repräsentiert wird.

Wenn man einer Variable den Maximalwert zuweist und dann noch eine 1 hinzuaddiert, beginnt die Zählung sozusagen von vorne, dass heißt wenn man auf einem 64-Bit-System einem Integer den Wert 9223372036854775807 zuweist und dann 1 hinzuaddiert, hat dieser Integer danach den Wert -9223372036854775808.

Es gibt andere Variablentypen neben Integer. Nachfolgend sind einige aufgeführt:

  • Long (.l), für Ganzzahlen im Bereich -2147483648 bis +2147483647 (4 Byte)
  • Float (.f), für Gleitkommazahlen (unbegrenze Größe)
  • Quad (.q), für große Ganzzahlen von -9223372036854775808 bis +9223372036854775807 (8 Byte)
  • Ascii (.a) bzw. Unicode, für ein Zeichen (1 bzw. 2 Byte)
  • String (.s) für Zeichenketten (Länge des Strings + 1 Byte)
  • Andere Variablentypen stehen in der Referenz

Im Quellcode kann festgelegt werden, von welchem Typ eine Variable ist.

 ; Listing 6: Variablentypen
 
 EnableExplicit

 OpenConsole()
 
 Define x.l = 5
 Define y.f = 2
 Define z.s = "Ich bin der String z"

 PrintN("Ich bin der Long x: " + Str(x))
 PrintN("Ich bin der Float y: " + StrF(y))
 PrintN(z)
 
 Delay(2000)

Ausgabe:

Ich bin der Long x: 5
Ich bin der Float y: 2.0000000000
Ich bin der String z

Man sieht, dass es ganz einfach ist, Variablen einen Typ zuzuweisen: Man muss nur hinter den Bezeichner einen Punkt gefolgt von dem ersten Buchstaben des Variablentyps in Kleinschreibung schreiben. Wichtig ist außerdem, zu sehen, dass bei der Umwandlung des Floats y in einen String der Befehl StrF() benutzt wird. Das hat mit der Formatierung der Ausgabe zu tun, Str() würde die Nachkommastellen abschneiden, während StrF() erlaubt, die Anzahl der mit umzuwandelnden Nachkommastellen anzugeben. Wenn also eine Gleitkommazahl anstatt einer Ganzzahl in einen String umgewandelt werden soll, benutzt man StrF().

Die letzte Auffälligkeit ist die Stringvariable. Diese wird über ein kleines s definiert. Ihr kann, wie bei Zahlvariablen auch, ein Wert zugewiesen werden, dieser muss aber natürlich in Anführungstrichen stehen, da es sich um einen String handeln muss. Dementsprechend kann die Variable einfach so an PrintN() als Argument übergeben werden, da der Befehl einen String erwartet.

TypumwandlungBearbeiten

An mehreren Stellen wurden schon Typumwandlungen unternommen, z.B. wenn eine Zahlvariable als String ausgegeben wurde. Grundsätzlich ist es möglich, jeden Variablenwert in einen anderen Typ umzuwandeln.

 ; Listing 7: Typumwandlung
 
 EnableExplicit

 OpenConsole()
 
 Define x.l = 5
 Define y.f = x
 PrintN(StrF(y))
 
 y = ValF(Input())
 PrintN(StrF(y))
 
 Delay(2000)

Ausgabe:

5.0000000000
2.5
2.5000000000

In der achten Zeile sieht man, wie ein Longwert einfach in eine Floatvariable gespeichert wird. Andersherum würde es auch funktionieren, die Nachkommastelle würde jedoch abgeschnitten werden. In der neunten Zeile wird der String, der von Input() zurückgegeben wird, von ValF() in einen Float umgewandelt. Man beachte, dass bei der Eingabe des Floats die amerikanische Konvention gilt, dass also ein Punkt anstatt eines Kommas geschrieben wird. Bei der Benutzung von Val() gilt die gleiche Regel wie bei der Benutzung von Str(). Wenn man einen String in eine Ganzzahl umwandeln will, benutzt man Val(), ansonsten ValF().

Val()- und Str()-Befehle werden also bei der Umwandlung von Zahlen in Strings und anders herum benutzt. Zahlvariablen können untereinander ohne Befehle in Variablen anderen Typs gepeichert werden.

StringsBearbeiten

Es wurden jetzt schon an mehreren Stellen Strings benutzt. Wie diese grundsätzlich funktionieren, sollte inzwischen klar geworden sein. Es gibt jedoch noch einige andere nützliche Funktionen.

 ; Listing 8: Strings
 
 EnableExplicit

 OpenConsole()
 
 Define string.s = "Ich bin ein String!"
 PrintN(Str(CountString(string, "String")))
 
 PrintN(LCase(string))
 
 string = InsertString(string, "neuer ",13)
 PrintN(string)
 
 string = RTrim(string, "!")
 PrintN(string)
 PrintN(Left(string,3))

Ausgabe:

1
ich bin ein string!
Ich bin ein neuer String!
Ich bin ein neuer String
Ich


Nachfolgend sind einige Befehle zum Arbeiten mit Strings aufgeführt.

  • CountString() zählt, wie oft der angegebene String im Übergebenen vorkommt.
  • LCase() wandelt alle Großbuchstaben in Kleinbuchstaben um und gibt das Ergebnis zurück.
  • InsertString() fügt einen neuen String an der angegeben Stelle ein und gibt das Ergebnis ebenfalls zurück.
  • RTrim() entfernt alle Vorkommen des angegebenen Zeichens vom Ende des Strings (rechts).
  • Left() gibt soviele Zeichen ab Beginn des Strings (links) zurück, wie angegeben wurde.

Weitere nützliche Befehle für Strings stehen im Referenz-Handbuch.

AufgabenBearbeiten

  1. Es soll ein Programm geschrieben werden, bei dem der Benutzer einen Kreisradius angibt, woraufhin der Umfang des Kreises angegeben wird. Die Formel für den Umfang lautet: 2 x Radius x Pi
  2. Es soll ein Programm geschrieben werden, das den Sinus eines Winkels ausrechnet. Die Befehle hierfür wurden noch nicht vorgestellt, deshalb müssen sie in der Referenz nachgeschlagen werden. Die nötigen Befehle befinden sich in der Bibliothek Math.