Lotus Notes / Domino Sonstiges > Projekt Bereich

Welche Schleife wann in Script

<< < (12/16) > >>

Semeaphoros:
Die Verwandlungskünste eines Loop

Da habe ich früher mal versprochen, das noch genauer auszuführen. Hier also mal ein Beispiel, wie man dieselbe Logik in den verschiedenen Typen realisieren kann:

Typisches, praxisnahes Beispiel, klar geeignet für FORALL, soll herhalten: man nimmt die Werte eines Multivalue-Feldes aus einem Dokument und bearbeitet die einzelnen Einträge:

Dim Entries As Variant

Entries = Doc.GetItemValue("MyMultiValueField")
' in Entries stehen jetzt die einzelnen Werte und wir wissen nicht wirklich, wieviele

Forall E in Entries

   print E
'   verarbeite jeden einzelnen Wert irgendwie im Schleifenkörper

End Forall


*******   Dasselbe realisiert mit einem For ... next loop ******

.....
Dim Entries As Variant

Entries = Doc.GetItemValue("MyMultiValueField")
For i=Lbound(Entries) to UBound(Entries)

   print Entries(i)
   .......

Next i


*******   Dasselbe realisiert mit einer While ... Wend Schleife ******

.....
Dim Entries As Variant
Dim i as Integer

Entries = Doc.GetItemValue("MyMultiValueField")

i=Lbound(Entries)
While (i <= Ubound(Entries))

   print Entries(i)
   .......
   i=i+1

Wend


*******   Do while ist dasselbe: ******

.....
Dim Entries As Variant
Dim i as Integer

Entries = Doc.GetItemValue("MyMultiValueField")

i=Lbound(Entries)
Do While (i <= Ubound(Entries))

   print Entries(i)
   .......
   i=i+1

loop


*******  Und auch Do Until unterscheidet sich nur in der Bedingung ******

.....
Dim Entries As Variant
Dim i as Integer

Entries = Doc.GetItemValue("MyMultiValueField")

i=Lbound(Entries)
Do until (i > Ubound(Entries))

   print Entries(i)
   .......
   i=i+1

loop


*******   Do loop while erreicht denselben Effekt: ******

.....
Dim Entries As Variant
Dim i as Integer

Entries = Doc.GetItemValue("MyMultiValueField")

i=Lbound(Entries)
Do

   print Entries(i)
   .......
   i=i+1

loop While (i <= Ubound(Entries))


*******  Und auch Do loop Until unterscheidet sich nur in der Bedingung ******

.....
Dim Entries As Variant
Dim i as Integer

Entries = Doc.GetItemValue("MyMultiValueField")

i=Lbound(Entries)
Do

   print Entries(i)
   .......
   i=i+1

loop until (i > Ubound(Entries))


******

*******  Do .... loop ohne integrierte Bedingung ******

.....
Dim Entries As Variant
Dim i as Integer

Entries = Doc.GetItemValue("MyMultiValueField")

i=Lbound(Entries)
Do

   print Entries(i)
   .......
   i=i+1
   if i > UBound (Entries) Then Exit Loop

loop


******



Alle Beispiele hier sind ohne Optimierung dargestellt (um sie möglichst verständlich zu halten) und ausserdem ist das Beispiel so gestaltet, dass die so wichtigen Ausstiegsbedingungen sich für die einzelnen Schlaufenbeispiele nicht verändern, in der Regel müssen Eintritts. und Austrittsbedingungen auf ihre Gültigkeit hin überprüft werden, wenn man sich für einen anderen Schleifentyp entscheidet.

TMC:
Danke für die Tipps.....

Bin z.Zt. allerdings seeeehr eingespannt beruflich, daher bitte um Geduld, dass das alles in der Doku aufgenommen wird.

Ich kümmere mich aber darum, soll kein totgefahrenes Projekt werden!

TMC

Semeaphoros:
No problem ...

Alle:
Schade, dass da nicht noch mehr Beispiele kommen.

TMC:
jip, hab mir auch etwas mehr erhofft.

**** AUFRUF - PLEASE POST EXAMPLES *****

 ;)

TMC

Glombi:
Ich habe gesehen, dass die Forall Schleife noch zu beschreiben ist, also:

Die Forall-Schleife führt für jedes Element eines Arrays, einer Liste oder einer Collection einen Befehlsblock aus.

Snytax (aus der Hilfe):
ForAll refVar In container
     [ statements ]
End ForAll

refVar: Die Referenzvariable, die alle Werte des Arrays, der Liste oder der Collection enthält.
Der Name dieser Referenzvariable darf im Scriptcode nicht an anderer Stelle verwendet werden.
container: Das Array, die Liste oder die Collection

Vorteil:
Die Verwendung von Forall stellt einen einfachen und bequemen Weg dar, über alle Elemente eines Arrays (...) zu iterieren. Man muss sich keine Gedanken um untere oder obere Grenze machen und erspart sich eine Laufvariable, wie si bspw. in der For-Schleife verwendet wird.

Die Forall-Schleife kann durch
Exit Forall
vorzeitig beendet werden.

Beispiel:
Aufgabe:Prüfe, ob der User eine bestimmte Rolle besitzt.
Lösung:

dim userroles as Variant
dim checkrole as String
dim treffer as integer
checkrole = "[Admin]"
treffer = false
userroles = Evaluate(|@Userroles|)
forall r in userroles
 if cstr(r) = checkrole then
   treffer = true
   exit forall
 end if
end forall

if treffer then
 msgbox "Der User hat die Rolle " & checkrole
else
 msgbox "Der User hat die Rolle " & checkrole & " nicht"
end if

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln