Types / Arten
Das Basic4android Typesystem ist direkt vom Java-Typ abgeleitet.
Es gibt zwei Arten von Variablen: Primitive und Nicht-Primitive Types.
Primitives enthalten die numerischen Types: Byte, Short, Int, Long, Float und Double.
Primitives enthalten auch: Boolean und Char.
Liste der Types mit ihren Bereichen:
http://www.b4x.com/forum/basic...html#post45511
Primitive Types werden immer mit 'passed by value' an Subroutinen übergeben und auch wenn sie anderen Variablen zugewiesen werden.
'passed by value' = Wert übergeben
'passed by reference' = Referenz (Adresse) ügergeben
Zum Beispiel:
Alle anderen Types, einschließlich Arrays von Primitive Types und Strings (Zeichenketten) sind den Nicht-Primitive Types zugeordnet.
Wenn man eine Nicht-Primitive in eine Subroutine übergibt oder wenn man sie einer anderen Variablen zuordnet, wird eine Kopie der Referenz übergeben.
Das heißt, daß die Daten selbst nicht dupliziert werden.
Es ist etwas anders als eine 'passing by reference' Übergabe da man die Referenz der ursprünglichen Variablen nicht ändern kann.
Alle Types können als Objekte behandelt werden.
Collections (Sammlungen) wie Listen und Maps arbeiten mit Objekten und können daher jeden Wert enthalten.
Hier ist ein Beispiel von einem häufigen Fehler, wo der Entwickler versucht, mehrere Arrays einer Liste hinzuzufügen:
Man könnte erwarten, dass 2 angibt. Allerdings wird es gibt es 10 an.
Wir haben ein einzelnes Array erstellt und haben 5 Referenzen dieses Arrays der Liste angefügt.
Die Werte in dem einzelnen Array sind die Werte die in der letzten Iteration festgelegt wurden.
Um dies zu beheben, müssen wir in jeder Iteration ein neues Array erstellen.
Dies geschieht durch den Aufruf von Dim in jeder Iteration:
Tipp: man kann Agraham's CollectionsExtra Library benutzen um ein Array zu kopieren.
Casting / Typumwandlung
Basic4android wandelt Types bei Bedarf automatisch um. Es wandelt auch Zahlen in Strings und automatisch um und umgekehrt.
In vielen Fällen muß man ein Objekt explizit in einem bestimmten Type festlegen.
Dies kann durch die Zuweisung des Objekts auf eine Variable des gewünschten Typs durchgeführt werden.
Zum Beispiel, das Sender Stichwort gibt ein Objekt zurück, das ist das Objekt das das Event (Ereignis) ausgelöst hat.
Der folgende Code ändert die Farbe des gedrückten Buttons. Beachten Sie, daß die gleiche Event-Routine mehrere Buttons behandelt.
Der obige Code kann auch eleganter geschrieben werden:
Scope / Anwendungsbereich
Variablen, die in Sub Globals oder in Sub Process_Globals deklariert werden, sind global und können aus allen Subs aufgerufen werden.
Die anderen Variablen sind lokal und können nur in der Subroutine aufgerufen werden in der sie deklariert wurden.
Mehr Informationen über Globals und Process_Globals Variablen befinden sich im Android Prozesse und Activities Lebensdauer Tutorial.
Tipps
Alle View Types können als Views behandelt werden. Dadurch kann man gemeinsame Eigenschaften von verschiedenen Views leicht ändern.
Beispiel: folgender Code deaktiviert alle Views, die direkte Kinderobjekte der Activity sind:
Falls Sie nur Buttons deaktiviert wollen:
Das Type Schlüsselwort erlaubt eigene Objekt-Types zu erstellen. Maßgeschneiderte Types verhalten sich genau wie andere Nicht-Primiteve Types.
Das Englische Originaltutorial.
Das Basic4android Typesystem ist direkt vom Java-Typ abgeleitet.
Es gibt zwei Arten von Variablen: Primitive und Nicht-Primitive Types.
Primitives enthalten die numerischen Types: Byte, Short, Int, Long, Float und Double.
Primitives enthalten auch: Boolean und Char.
Liste der Types mit ihren Bereichen:
http://www.b4x.com/forum/basic...html#post45511
Primitive Types werden immer mit 'passed by value' an Subroutinen übergeben und auch wenn sie anderen Variablen zugewiesen werden.
'passed by value' = Wert übergeben
'passed by reference' = Referenz (Adresse) ügergeben
Zum Beispiel:
B4X:
Sub S1
Dim A As Int
A = 12
S2(A)
Log(A) 'Prints 12
End Sub
Sub S2(B As Int)
B = 45
End Sub
Wenn man eine Nicht-Primitive in eine Subroutine übergibt oder wenn man sie einer anderen Variablen zuordnet, wird eine Kopie der Referenz übergeben.
Das heißt, daß die Daten selbst nicht dupliziert werden.
Es ist etwas anders als eine 'passing by reference' Übergabe da man die Referenz der ursprünglichen Variablen nicht ändern kann.
Alle Types können als Objekte behandelt werden.
Collections (Sammlungen) wie Listen und Maps arbeiten mit Objekten und können daher jeden Wert enthalten.
Hier ist ein Beispiel von einem häufigen Fehler, wo der Entwickler versucht, mehrere Arrays einer Liste hinzuzufügen:
B4X:
Dim arr(3) As Int
Dim List1 As List
List1.Initialize
For i = 1 To 5
arr(0) = i * 2
arr(1) = i * 2
arr(2) = i * 2
List1.Add(arr) 'Add the whole array as a single item
Next
arr = List1.Get(0) 'get the first item from the list
Log(arr(0)) 'What will be printed here???
Wir haben ein einzelnes Array erstellt und haben 5 Referenzen dieses Arrays der Liste angefügt.
Die Werte in dem einzelnen Array sind die Werte die in der letzten Iteration festgelegt wurden.
Um dies zu beheben, müssen wir in jeder Iteration ein neues Array erstellen.
Dies geschieht durch den Aufruf von Dim in jeder Iteration:
B4X:
Dim arr(3) As Int 'This call is redundant in this case.
B4X:
[FONT=Verdana][COLOR=black]Dim List1 As List[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]List1.Initialize[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]For i = 1 To 5[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]Dim arr(3) As Int[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]arr(0) = i * 2[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]arr(1) = i * 2[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]arr(2) = i * 2[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]List1.Add(arr) 'Add the whole array as a single item[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]Next[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]arr = List1.Get(0) 'get the first item from the list[/COLOR][/FONT]
[FONT=Verdana][COLOR=black]Log(arr(0)) 'Will print 2[/COLOR][/FONT]
Casting / Typumwandlung
Basic4android wandelt Types bei Bedarf automatisch um. Es wandelt auch Zahlen in Strings und automatisch um und umgekehrt.
In vielen Fällen muß man ein Objekt explizit in einem bestimmten Type festlegen.
Dies kann durch die Zuweisung des Objekts auf eine Variable des gewünschten Typs durchgeführt werden.
Zum Beispiel, das Sender Stichwort gibt ein Objekt zurück, das ist das Objekt das das Event (Ereignis) ausgelöst hat.
Der folgende Code ändert die Farbe des gedrückten Buttons. Beachten Sie, daß die gleiche Event-Routine mehrere Buttons behandelt.
B4X:
Sub Globals
Dim Btn1, Btn2, Btn3 As Button
End Sub
Sub Activity_Create(FirstTime As Boolean)
Btn1.Initialize("Btn")
Btn2.Initialize("Btn")
Btn3.Initialize("Btn")
Activity.AddView(Btn1, 10dip, 10dip, 200dip, 50dip)
Activity.AddView(Btn2, 10dip, 70dip, 200dip, 50dip)
Activity.AddView(Btn3, 10dip, 130dip, 200dip, 50dip)
End Sub
Sub Btn_Click
Dim b As Button
b = Sender 'Cast the Object to Button
b.Color = Colors.RGB(Rnd(0, 255), Rnd(0, 255), Rnd(0, 255))
End Sub
B4X:
Sub Globals
End Sub
Sub Activity_Create(FirstTime As Boolean)
For i = 0 To 9 'create 10 buttons
Dim Btn As Button
Btn.Initialize("Btn")
Activity.AddView(Btn, 10dip, 10dip + 60dip * i, 200dip, 50dip)
Next
End Sub
Sub Btn_Click
Dim b As Button
b = Sender
b.Color = Colors.RGB(Rnd(0, 255), Rnd(0, 255), Rnd(0, 255))
End Sub
Variablen, die in Sub Globals oder in Sub Process_Globals deklariert werden, sind global und können aus allen Subs aufgerufen werden.
Die anderen Variablen sind lokal und können nur in der Subroutine aufgerufen werden in der sie deklariert wurden.
Mehr Informationen über Globals und Process_Globals Variablen befinden sich im Android Prozesse und Activities Lebensdauer Tutorial.
Tipps
Alle View Types können als Views behandelt werden. Dadurch kann man gemeinsame Eigenschaften von verschiedenen Views leicht ändern.
Beispiel: folgender Code deaktiviert alle Views, die direkte Kinderobjekte der Activity sind:
B4X:
For i = 0 To Activity.NumberOfViews - 1
Dim v As View
v = Activity.GetView(i)
v.Enabled = False
Next
B4X:
For i = 0 To Activity.NumberOfViews - 1
Dim v As View
v = Activity.GetView(i)
If v Is Button Then 'check whether it is a Button
v.Enabled = False
End If
Next
Das Type Schlüsselwort erlaubt eigene Objekt-Types zu erstellen. Maßgeschneiderte Types verhalten sich genau wie andere Nicht-Primiteve Types.
Das Englische Originaltutorial.
Last edited: