Java pro LotusScriptové programátory 2.
01/12/2010 - Články







Cykly v jazyce Java a LotusScript
Stejně jako v jazyce LotusScript i v Javě jsou k dispozici cykly for, while a do. Použití je stejné, vzájemně se zase liší syntaxí.

Cyklus for

Syntaxi porovnává následující tabulka:
Java
LotusScript
for (start;stop;inkrement) {
příkazy;
}
For start To stop [ Step inkrement ]
příkazy
Next

LotusScriptová syntaxe je převzata z Notesové dokumentace, výrazy v hranatých závorkách nejsou povinné.

V Javě se definice cyklu for skládá ze tří částí uvedených v závorkách a oddělených středníkem. V této části se zpravidla inicializuje řídící proměná (část start), uvádí se podmínka, při jejímž splnění bude provedeno tělo cyklu (část stop) a v poslední části se mění hodnota řídící proměnné (část inkrement). V podmínce se testuje řídící proměnná, která se v poslední části mění. Vše bude jasnější na příkladu.

Cyklu for lze využít např. při zpracování všech hodnot v poli v notesovém dokumentu:

LotusScript:
dim itResponsibles as NotesItem
set itResponsibles = doc.getFirstItem("Responsibles")
dim values as Variant
values = itResponsibles.values

dim i as integer
For i = 0 To ubound(values)
call process(values(i))
Next

Java:
Item itResponsibles = doc.getFirstItem("Responsibles");
Vector values = itResponsibles.getValues();
for (int i = 0; i < values.size(); i = i + 1) {
process(values.get(i);
}

V Javě lze řídící proměnnou v inicializační části i rovnou definovat (na rozdíl od LotusScriptu). V příkladu je inicializována řídící proměnná i. V podmínce se testuje, jestli je i menší než počet položek v poli (i je index, začíná od nuly, poslední položka v poli má tedy index o jednu nižší než je počet položek v poli. V poslední části se hodnota i navyšuje o jednotku.

Pár poznámek:
Cyklus ForAll
Pomocí cyklu ForAll lze v LotusScriptu procházem všemi položkami pole. Od Javy verze 1.5 je k dispozici stejný způsob zápisu pomocí konstrukce:

for (deklarace: výraz) {
příkazy;
}

Výše uvedený příklad by tedy bylo možné přepsat na:
Item itResponsibles = doc.getFirstItem("Responsibles");
Vector values = itResponsibles.getValues();

for (Object singleValue : values) {
process(singleValue);
}

Jde čistě o pohodlí při zápisu. Kompilátor při přeložení programu vytváření stejnou konstrukci jako v předchozím případě.


Cyklus while

Syntaxe cyklu while je téměř stejná:
Java
LotusScript
while (podmínka) {
výrazy;
}
While podmínka
výrazy
Wend


Závorky okolo podmínky jsou v Javě povinné, v LotusScriptu ne. Stejně jako v LotusScriptu je tělo cyklu prováděno do té doby, dokud podmínka platí (tj. je vyhodnocena jako true).

Příkladem může být průchod kolekcí notesových dokumentů:

LotusScript:
Dim doc As NotesDocument
Set doc = col.GetFirstDocument()
While Not (doc Is Nothing)
Call process(doc)
Set doc = col.getNextDocument(doc)
Wend

Java:
Document doc = col.getFirstDocument();
Document tmpdoc;
while (doc != null) {
process(doc);

tmpdoc = col.getNextDocument(doc);
doc.recycle();
doc = tmpdoc;
}


Cyklus do

U cyklu do je podmínka vyhodnocena až na konci. Tělo cyklu je tedy vykonáno nejméně jednou.

Syntaxe
Java
LotusScript
do {
příkazy;
} while (podmínka);
Do
Příkazy
Loop While Podmínka

Přiznám se, že tuto konstrukci nepoužívám, nemám tedy ani nějaký vhodný příklad, snad to v tomto případě nevadí...

Poznámka:

Přerušení cyklu
Příkazem break je možné cyklus předčasně ukončit. Program pak pokračuje dalšími příkazy za cyklem.