Domů » Články » Lotus Notes

Java pro LotusScriptové programátory 2. Verze pro tisk,Tisknutelna verze dokumentu

Jan Krejcárek, 01.12.2010 | Kategorie: Články\Lotus Notes



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:

  • Navýšení řídící proměnné o jednotku lze zapsat zkráceným a všeobecně používaným způsobem i++, tedy:
    for (int i = 0; i < values.size(); i++) {}. Tento způsob zápisu se nazývá post-increment.
  • Metoda Item.getValues() vrací objekt typu Vector. Vector je součástí základních javových knihoven (v balíčku java.util) a představuje rostoucí pole objektů. Do Vectoru lze přidávat objekty metodou add() a ubírat pomocí remove(). Vector se sám zvětšuje nebo zmenšuje, jak je potřeba. Notesové objekty tuto třídu používají velmi často.
  • Vector je jednou z tříd typu Collections - tříd, které obsahují sady objektů. Pro průchod těmito třídami se zpravidla používá iterátoru, o tom ale někdy jindy.

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:
  • U LotusScriptu je možné podmínku zapsat i na začátku cyklu, tělo cyklu je v takovém případě vykonáno pouze, když je podmínka platná. Java tuto alternativu nemá.
  • LotusScript má ještě alternativu s příkazem Until. Tělo cyklu je pak vykonáváno tak dlouho, dokud nenastane podmínka. Java tuto alternativu zase nemá, dá se to řešit obrácenou podmínkou.


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.

Související články

Java pro LotusScriptové programátory 4.   24.03.2010, Jan Krejcárek
Java pro LotusScriptové programátory 3.   09.03.2010, Jan Krejcárek
Prezentace z Lotus Symposia 2010   09.06.2010, Aleš Lichtenberg (KAISER DATA)

Seznam komentářů (2)

Od Téma Datum
Notesový začatečníkPochvala28.01.2010 20:31
PorovnávačPřerušení cyklu break29.01.2010 16:12
Vypsat označené   Vypsat všechny   Přidat komentář