1. Übersicht
YAB ermöglicht die Aufteilung eines Programms auf mehrere externe Libraries.
Eine Library kann enthalten:
- Variablen
- Stringvariablen
- Arrays
- Subroutinen
- exportierte Subroutinen
Eine Library wird mit import eingebunden. Ihre von außen verfügbaren Bestandteile werden über den Namespace der Library angesprochen.
|
import test1
n=test1.test1()
|
2. Libraries und Namespaces
Eine oder mehrere Libraries können importiert werden:
| import test1 import test2 import test3 |
Jede Library besitzt ihren eigenen Namespace. Dadurch können gleichnamige Variablen und Subroutinen verschiedener Libraries eindeutig unterschieden werden.
| a=test1.value b=test2.value n=test1.test() m=test2.test() |
Der Namespace wird beim Zugriff vor den Namen des gewünschten Bestandteils gesetzt:
|
namespace.sub()
namespace.sub$()
namespace.variable
namespace.variable$
|
3. Exportierte Subroutinen und Rückgabewerte
Eine Subroutine, die außerhalb ihrer Library aufgerufen werden soll, wird mit export definiert:
|
export sub test1()
return 10
end sub
|
Der Aufruf erfolgt über den Namespace:
| n=test1.test1() |
|
export sub test2$()
return "Hallo"
end sub
|
| text$=test2.test2$() |
Eine mit $ benannte Subroutine kann dabei auch einen numerischen Wert zurückgeben. Das $ bestimmt also nicht zwingend den Datentyp des return-Wertes.
Rückgabewerte können direkt zugewiesen oder unmittelbar weiterverarbeitet werden:
|
n=test.get_number()
text$=test.get_text$()
print arraydim(test.get_array())
|
4. Parameterübergabe
Exportierte Subroutinen können einen oder mehrere Parameter erhalten.
|
export sub add(zahl)
return zahl*2
end sub
|
| n=test.add(10) |
|
export sub add(zahl1,zahl2)
return zahl1+zahl2
end sub
|
| n=test.add(10,20) |
Dabei können auch unterschiedliche Werte übergeben werden:
|
export sub text$(text$,zahl)
return text$+str$(zahl)
end sub
|
| text$=test.text$("Wert: ",10) |
5. Zugriff auf Variablen
Variablen einer Library können über den Namespace angesprochen werden.
Numerische Variable:
| n=test1.b |
| text$=test1.d$ |
|
namespace.variable
namespace.variable$
|
6. local-Variablen
Eine mit local deklarierte Variable gehört zur jeweiligen Subroutine.
|
counter=100 export
sub test()
local counter
counter=counter+1
return counter
end sub
|
| counter |
und:
| local counter |
Der Zugriff:
| test.counter |
Die lokale Variable wird bei jedem erneuten Aufruf der Subroutine neu initialisiert.
Beispiel:
|
export sub test()
local counter
counter=counter+1
return counter
end sub
|
| test() → 1 test() → 1 test() → 1 |
7. Zugriff einer Library auf andere Libraries
Eine Library kann auf exportierte Subroutinen und Variablen anderer Libraries zugreifen.
Beispiel:
|
export sub test5()
a=test1.test1()
b$=test2.test2$()
return a
end sub
|
|
n=test1.b
text$=test2.d$
|
Eine Library kann somit beispielsweise:
|
a=test1.test1()
b=test1.b
|
8. Cross-Namespace-Aufrufe
Mehrere Libraries können miteinander kombiniert werden.
Beispielsweise:
|
main.yab
¦
+-- test1
+-- test2
+-- test5
|
|
export sub test5()
a=test1.test1()
b$=test2.test2$()
return a
end sub
|
Eine Library kann dabei sowohl auf Subroutinen:
| test1.test1() |
| test1.b |
9. Arrays
Libraries können Arrays enthalten und Arrays über exportierte Subroutinen zurückgeben.
Beispiel:
|
dim numbers(3)
numbers(1)=10
numbers(2)=20
numbers(3)=30
|
|
export sub test_numbers()
return numbers
end sub
|
|
print arraydim(test_array.test_numbers())
print arraysize(test_array.test_numbers(),1)
|
|
print arraydim(test_array.test_id$())
print arraysize(test_array.test_id$(),2)
|
Beispielsweise:
| arraydim(test_array.test_numbers()) |
Ebenso:
| arraysize(test_array.test_numbers(),1) |
|
arraydim(test_array.test_id$())
arraysize(test_array.test_id$(),2)
|
10. Variablen und Subroutinen als gemeinsamer Namespace
Eine Library stellt über ihren Namespace unterschiedliche Bestandteile zur Verfügung.
Beispiel:
|
test1
¦
+-- test1()
+-- value
+-- text$
+-- Array
|
|
n=test1.test1()
n=test1.value
text$=test1.text$
print arraydim(test1.get_array())
|
11. Bestätigte Eigenschaften
Die Namespace-Funktionalität wurde anhand einer Testreihe mit insgesamt 16 Tests überprüft.
Dabei wurden folgende Bereiche getestet
![]() |
|
|
arraydim(test_array.test_numbers())
Arraysize(test_array.test_numbers(),1)
arraydim(test_array.test_id$())
arraysize(test_array.test_id$(),2)
|
12. Kurzreferenz
| Funktion | Syntax |
|---|---|
| Library importieren | import name |
| Sub exportieren | export sub name() |
| $-Sub exportieren | export sub name$() |
| Sub aufrufen | name.sub() |
| $-Sub aufrufen | name.sub$() |
| Variable | name.variable |
| Stringvariable | name.variable$ |
| Ein Parameter | name.sub(wert) |
| Mehrere Parameter | name.sub(wert1,wert2) |
| Rückgabewert | return wert |
| Array zurückgeben | return array |
| Arraydimension | arraydim(name.sub()) |
| Arraygröße | arraysize(name.sub(),dimension) |
| Library-Variable | name.variable |
| Library-Stringvariable | name.variable$ |
13. Merksatz
![]() |
import bindet eine Library ein, export stellt eine Subroutine nach außen bereit und der Namespace ermöglicht den eindeutigen Zugriff auf die Variablen und Subroutinen der Library. |
|
import meine_lib
n=meine_lib.berechnen(10)
text$=meine_lib.text$("Hallo")
wert=meine_lib.variable
text$=meine_lib.text$
print arraydim(meine_lib.get_array())
|
Damit können YAB-Programme in mehrere Libraries aufgeteilt und diese Libraries über Namespaces miteinander verbunden werden.

