Autor Thema: Welche Schleife wann in Script  (Gelesen 55193 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #40 am: 03.10.03 - 00:34:14 »
Zitat
aber sieht oder wünscht jemand, dass man aus soetwas mit noch etwas mehr ein Thema machen würde für die Developer 2004 nächsten Februar?

Na ja, meine Meinung:
Ist wohl zusehr ein Spezialthema, als dass man das innerhalb 1 Stunde (?) mit 10-20 Powerpoint-Folien abhandeln könnte.
Klar, höchstens man würde die Quintessenz draus ziehen und Schwerpunkte setzen (kurzer Überblick, was killt Performance, und welche Schleifen decken die bekanntesten Fälle performant ab, etc.).

Insofern wäre das möglich. Sollte halt einige Highlights bieten (beim Überfliegen von Rob's Links hab ich gesehen da wäre durchaus was zu berichten).

Mein persönliches Fazit:
Würe eher "aus dem Ärmel herausschüttelnd" rüberkommen, ich schätze es gibt zig andere Themen, die Leute interessiert, wenn diese dafür viel Geld zahlen und von weit her anreisen.

TMC

« Letzte Änderung: 04.10.03 - 20:29:56 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #41 am: 03.10.03 - 00:52:15 »
Sicher, da müsste noch was dazu, deshalb frage ich ja auch, wie die Wünsche sind. Performance könnte aber ein hübsches Thema abgeben und da sind nun mal die Schleifen auch eine wichtige Angelegenheit. Ich hab Robs Links noch nicht angesehen, werde das aber bestimmt tun und dann entscheiden, ob ich den Vorschlag unterbreiten soll.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #42 am: 03.10.03 - 18:06:12 »
OK, hier mal ein aktuelles Problem von mir:

Do Until doc Is Nothing
Set nextdoc = dc.getnextdocument(doc)
   'Docwerte einlesen
   v_maske = doc.Form(0)
   v_freigabe = doc.Dat(0)
   'Wenn Maske nicht frm_12 und Freigabe leer, dann LOOP
   If v_maske Is Not "frm_12" & v_freigabe = "" Then

     Loop
   End If
   ...........
   .........
Loop


Hier will ich in der If-Abfrage die Schleife wieder von oben beginnen, also hab ich ein Loop reingesetzt, allerdings meckert da der Designer.
Daher die Frage: Wie kann man bei dieser Schleife in der Mitte wieder hochspringen, also den Loop mittendrin ausführen?

TMC

*Edit*
Ich habe das ganze jetzt über eine View-Selection gelöst ist aber auch nicht das wahre....
Siehe auch diesen Thread.
« Letzte Änderung: 03.10.03 - 18:55:24 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Welche Schleife wann in Script
« Antwort #43 am: 03.10.03 - 20:10:24 »
OK, hier mal ein aktuelles Problem von mir:

Do Until doc Is Nothing
Set nextdoc = dc.getnextdocument(doc)
   'Docwerte einlesen
   v_maske = doc.Form(0)
   v_freigabe = doc.Dat(0)
   'Wenn Maske nicht frm_12 und Freigabe leer, dann LOOP
   If v_maske Is Not "frm_12" & v_freigabe = "" Then

     Loop
  End If
   ...........
   .........
Loop

Geht sowas in irgendeiner Programmiersprache? Ich glaube nicht.
Sagen wir mal eine Schleifenkonstrukt und ein Bedingungskonstrukt (sprachliche Anlehnung aus Begriffen von R. Mann) bestehen aus einem Kopf einem Rumpf und einem Endmarkierer (weiss nicht ob das jetzt so korrekt ist. V.a. Endmarkierer sieht wie eine spontane Entdeckung von mir aus).
Schleifenkonstrukt
Bedingungskonstrukt
Kopf
for i = 1 to 15 step 2
if i > 4 then
Rumpf
Alles was zwischen Kopf und Endmarkierer steht.
Alles was zwischen Kopf und Endmarkierer steht.
Endmarkierer (schliess-Tag für Kopf)
Loop
end if

xml 101: <tag/> = <tag></tag> (sogenannter empty-tag)

<kopf_a> Do Until doc Is Nothing
<rumpf_a/>   v_maske = doc.Form(0) [...] etc.
<kopf_b>   If v_maske Is Not "frm_12" & v_freigabe = "" Then
<rumpf_b/> == </kopf_a> Loop
</kopf_b>End If
</kopf_a>Loop


Die Rümpfe kannst du nicht einfach so "quer schachteln". Das geht nur ineinander nach dem Russischen Puppen Prinzip. Also jedes in einem Schleifenkonstrukt oder Verzweigungskonstrukt begonnene Schleifen- oder Verzweigungskonstrukt muß auch innerhalb des Schleifen oder Bedingungskonstrukt, in dem es geöffnet wurde, geschlossen werden. ;D

Du kannst doch einfach so was machen wie:
Do Until doc Is Nothing
Set nextdoc = dc.getnextdocument(doc)
   'Docwerte einlesen
   v_maske = doc.Form(0)
   v_freigabe = doc.Dat(0)
 
   rem genau umgekehrt
   If v_maske Is "frm_12" & v_freigabe <> "" Then
 
...........
   .........
  End If
   Loop


Bei Schleifen kommen bei mir immer 2 Gedanken in den Kopf:
1. Muss ich das irgendwie kommentieren oder ist das selbsterklärend
2. Schreibe möglichst wenig Zeilen innerhalb des Schleifenrumpfs, weil es sonst unübersichtlich wird. Wenn nötig auslagern von code in Subroutinen oder Funktionen mit sprechenden Namen.

@Semaphoros: Ein wichtiges Thema für Performance sind nicht nur meiner Meinung nach Tools zum Aufspüren von Performance-Bottlenecks (Profiler oder ähnliches). Seitdem ich damit in Java arbeite, weiss ich das ich vorher nichts über Performance wusste. Und Kodierungspraktiken, die ein leichtes Aufspüren von Performance-Bottlenecks ermöglichen (sprich kein Spagetti-Code oder vielleicht besser Objekt-Orientierung.

In Eclipse wird man übrigens wg. so Dingen wie "wie ist nochmal die Schleifensyntax" nicht aus dem Büroschlaf gerissen. Da tippt man einfach for oder while ein, drückt Strg + Leertaste, wählt den Typ der Schleife aus (ich hab ein paar homegrown dabei) bekommt den code in den Editor mit schwer zu beschreibenen Textmarkierern, über die man dann die spezifischen Namen der Variablen eintippt. Geht alles völlig reibungslos ohne nervige popup-Boxen.  

Gruß Axel
« Letzte Änderung: 03.10.03 - 20:26:45 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #44 am: 03.10.03 - 20:23:51 »
OK, danke Axel.
Das "genau umgekehrt" war die logische Konsequenz :)

Mich hat's nur generell interessiert und Du hast auch die Antwort dafür:
Zitat
Geht sowas in irgendeiner Programmiersprache? Ich glaube nicht.
Ich wußte das bisher nicht, aber ist gut zu wissen  ;)

Zitat
In Eclipse wird man übrigens wg. so Dingen wie "wie ist nochmal die Schleifensyntax" nicht aus dem Büroschlaf gerissen. Da tippt man einfach for oder while ein, drückt Strg + Leertaste, wählt den Typ der Schleife aus (ich hab ein paar homegrown dabei) bekommt den code in den Editor mit schwer zu beschreibenen Textmarkierern, über die man dann die spezifischen Namen der Variablen eintippt. Geht alles völlig reibungslos ohne nervige popup-Boxen
*neidisch rüberschauend zu den Eclipse-Jungs*

Wie auch immer, danke für die Tipps Axel.

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #45 am: 03.10.03 - 20:28:45 »
Noch ein Nachtrag zu meinem letzten Problem wegen "Loop in the middle" (:-))

Grausam aber wahr könnte man da doch einen goto durchführen (kenn ich noch von good old C64 Basic Zeiten :-))?
Nur ne Idee....

TMC

*Edit*
Na ja, spricht wohl gegen diese Rule von Axel:
Zitat
Also jedes in einem Schleifenkonstrukt oder Verzweigungskonstrukt begonnene Schleifen- oder Verzweigungskonstrukt muß auch innerhalb des Schleifen oder Bedingungskonstrukt, in dem es geöffnet wurde, geschlossen werden.
« Letzte Änderung: 03.10.03 - 20:33:25 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #46 am: 03.10.03 - 21:02:36 »
Zu TMC - loop in the middle

Axel hat Dir schon gesagt, dass das nicht geht und dass das wohl nirgends geht. Deine "Umgehung" mit einem Goto ist das, was man schlussendlich tatsächlich machen kann, aber bitte nicht mit einem Goto, erstens sieht es nicht besonders modern aus (das würd mich aber nicht stören), zweitens durchbricht es ganz klar und frappant die  strukturierte Programmierung, drittens würde ein solcher Absprung aus der Schleife einige Compiler ins Schleudern bringen: nicht jeder merkt, dass Du dadurch die Schleife verlässt (mindestens bei ältern Compilern ist einem das noch gelungen) und es bleiben dann im Memory nicht abgebaute Kontrollstrukturen bestehen: ein Memory - Leak.

Wenn Du Deine If-Bedingung mit einem NOT versiehst, sie also logisch umdrehst, dann kannst Du aus dem IF heraus den Loop verlassen, und dafür gibts nen Befehl: EXIT SUB (ok, ist eigentlich ein spezialisiertes Goto und damit etwa das, was Du Dir ausgeheckt hast, aber hier weiss der Compiler, dass Du die Schleife verlässt)

Zu Axel:
Vielen Dank für diese Gedanken zur Performance, ich muss mal das Wochenende durchgehen lassen, und dann werd ich wohl tatsächlich ernsthaft daran denken, so eine Session zu bauen.

Was Du da von Eclipse erzählst, kann Notes-Leute schon zum Lechzen bringen (siehe TMC). Ich kenn das allerdings im Delphi zum Beispiel schon seit ewig, und schon bevor die IDEs solche schönen Sachen gebracht haben, haben verschiedene elegante Editoren das schon gekonnt. Ich vermisse das laufend im Notes (nebst der enorm schlechten Editier-Unterstützung für Custom Classes).

Noch was: einen Schleifenkörper möglichst kurz zu halten ist nicht nur eine Frage der Uebersicht, sondern auch der Performance. Deshalb ist auch Vorsicht geboten mit Aufruf von Subroutinen anstelle der Ausprogrammierung einer Sequenz, da Subroutinen notorische Performance-Verschwender sind (keine Ahnung, welchen Preis man dafür in LotusScript zahlt, um das gleich mal klarzustellen).
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Welche Schleife wann in Script
« Antwort #47 am: 03.10.03 - 21:07:52 »
Grausam aber wahr könnte man da doch einen goto durchführen (kenn ich noch von good old C64 Basic Zeiten :-))?
Nur ne Idee....
Hell Nooo.

http://www.acm.org/classics/oct95/

Goto ist nicht einfach grausam sondern ein Synonym für das Ende der Zivilisation. Wenn ich das Wort höre, kommen mir unverzüglich Bilder von marodierenden, plündernden, vergewaltigenden Milizen an der afrikanischen Westküste in den Sinn.  :-[
 

 
 
« Letzte Änderung: 03.10.03 - 21:12:18 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Schocker GOTO
« Antwort #48 am: 03.10.03 - 21:50:32 »
Ok, sorry für meinen Schocker am Freitag Abend:
GOTO

War mir nicht bewußt dass das so derart Anti-Sinnvoll-Programmiernd ist  ;D
Zitat
Goto ist nicht einfach grausam sondern ein Synonym für das Ende der Zivilisation. Wenn ich das Wort höre, kommen mir unverzüglich Bilder von marodierenden, plündernden, vergewaltigenden Milizen an der afrikanischen Westküste in den Sinn.
;D
Krass. Da hab ich ja was angestiftet.
Und trotzdem kann ich es nicht lassen, ein good old Befehl vom 64er:
10 Print "GOTO sucks. sollte never verwendet werden."
20 goto 10

 ;D Und nun blinkt der Bildschirm ohne Ende.....

Ist wohl ein leidiges Überbleibsel aus Basic (?), das so über die Jahre mitgezogen wurde.


TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #49 am: 03.10.03 - 22:13:18 »
Axel, reihe Dich nicht unnötig in die ewigen Nörgler, Besserwisser und so weiter ein.

Natürlich ist ein Goto häufig nicht elegant.

Ich staune aber bald schon seit Jahrzehnten, wie Leute über Gotos herziehen können, und gleichzeitig Konstrukte verwenden wie (in LS umgesetzt):

Do
......
Exit Loop
.....
Loop

Syntatkisch sind all diese Exit-Loop/Exit-Sub (schlimm !!!) Exit-Forall nichts anderes als verkappte Gotos, und dieselben, die auf der einen Seite die Gotos "verarschen", predigen gleichzeitig religiös, Schleifen dürfen nie mit Bedingungen versehen werden, sondern immer mit einem Exit verlassen werden .... Da verstehe ich dann die Welt nicht mehr, bzw. muss feststellen, dass die Leute wohl von Grammatiken und Syntax/Synonymen und so was überhaupt keine Ahnung haben (ja, tatsächlich, hier überlappt der ehemalige Sprachlehrer mit dem Teil in mir, der mal an der FeU auch noch theooretische Informatik machen musste, die praktische hat ihn aber mehr interessiert :-)

Stimmt, falsch eingesetzte Gotos ergeben schrecklichen Code. Ich kann aber auch ohne Gotos gleich schlechten Code schreiben. Und manchmal sind die Gotos (implizit oder explizit) ganz einfach notwendig.

Da kommen dann noch ein paar andere Sachen dazu: Jede Schleife wird, wenn wir ihr im Assembler wieder begegnen, durch mindestens einem konditionellen Jump (= Goto !!) realisiert, sprich ein Goto. Ein If - Else Konstukt bedingt im Minimum zwei Jumbs ( = Goto !! ) und so weiter .......

Also bitte zuerst überlegen, bevor man irgendwas in Bausch und Bogen verwirft.

Und ebenso bitte überlegen, wenn man mal ein Goto wirklich brauchen sollte, was aber bitte auch für die verkappten Gotos, die in der Verkleidung eines Exit daherkommen, gelten muss!
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Welche Schleife wann in Script
« Antwort #50 am: 03.10.03 - 23:13:43 »
@Semaphoros,

1. Dykstra sagt in diesem paper, dass gotos in Assembler eine Berechtigung haben.
2. Deine strukturierte Programmierung 201 Beiträge sind wertvoll.  
3. halte ich deine Reaktion für hm irgendwie übertrieben.
4. Meine alte Paranoia kocht hoch, dass Leute mit fundierter Informatikausbildung mich als
- Freund von Java
- Freund von Webservices
- Freund von JSP/Servlets
- ca. 5 und steigend grösseren Java open Source frameworks
- Eclipse user
- OO-Pattern-Freund
- don't code take google
- Unified Process Anhänger,  
als irgendwie neureichen Modegeck ansehen.
 
Das ist aber einfach nicht wahr, weil:
- ich habe meinen Mc Conell, Code complete  
- ohne Studium von fundamentalen Prinzipien von verteiltem Rechnen und Datenbanktheorie und -praxis und 120 weitere Sachen helfen einem weder SOAP noch Enterprise Java Beans irgendwie weiter. Das ganze Marketing-Geseiber es würde einfacher und man bräuchte dieses ganzes low level Quatsch nicht, ist komplettester Unsinn.
 
Auf diese Tour bekommt man auf jeden Fall keine akzeptabel performanten Anwendungen hin und vermutlich noch nicht einmal lauffähige Anwendungen. Man muß oft eine Etage in den Keller gehen und sich damit auseinandersetzen, was dort passiert.  
Man kann auch nicht OO programmieren ohne ein vernünftig strukturiert programmieren zu können.

noch was:
Zitat
Noch was: einen Schleifenkörper möglichst kurz zu halten ist nicht nur eine Frage der Uebersicht, sondern auch der Performance. Deshalb ist auch Vorsicht geboten mit Aufruf von Subroutinen anstelle der Ausprogrammierung einer Sequenz, da Subroutinen notorische Performance-Verschwender sind (keine Ahnung, welchen Preis man dafür in LotusScript zahlt, um das gleich mal klarzustellen).
Der Aufruf von Subroutinen kostet einen gewissen Performance overhead, ok. Das wird beim erzeugen von lustigen layers of indirection mit Klassen tendentiell noch verstärkt. Und wenn man dann noch nifty die Objekte auf verschiedene Tiers verteilt und coole xml-Layer verwendet möglicherweise potentiert (und das ist dann oft ein Problem).  
Solange man aber keine vernünftigen empirischen Daten hat, wie lange jetzt Methoden/Funktions/Remote SOAP_RPC-Aufruf A dauert und sich überlegt, ob der overhead signifikant für den business case ist, handelt es sich dabei um eben theoretische Informatik. Ich glaub wir sind uns da einig. Manche Sachen kann man mit Erfahrung voraussagen. Ich bin aber ehrlichgesagt oft überrascht worden, seitdem ich eigentlich bei jedem Java-code den ich schreibe mir Milisekunden Werte hole (da die Messung selbst Zeit kostet, sind solche Werte natürlich nie genau, aber man kann auf jeden Fall immer vergleichen).
 
Ich habe starkes Mißtrauen gegenüber:
- Objekt Verteilung auf verschiedene Rechner um ihrer selbst willen
- Aufteilung von Subsystemen in Komponenten mit "sauberen" Interfaces (low coupling, high cohesion) um ihrer selbst willen.

Performance ist ein Punkt bei der Entwicklung. Es gibt nur ein nicht wegzudiskudierender trade off zwischen Übersichtlichkeit von code und Performance von code.
Das klassische OO-Prinzip ist: Sauberer code ist erst einmal wichtiger. Zumal man in übersichtlichen code auch leichter die realen performance bottlenecks findet. Da ist meiner Ansicht nach sehr viel wahres dran.
Die Praxis (und v.a. die Praxis mit Erfahrung) ist aber immer ein Kompromiss und nicht diese Schlagwörter. Ich baue oft frühzeitig Performance freundliche Infrastruktur (Objekt-Pools, Singletons, etc) bevor es nach der reinen OO-Lehre nötig wäre. Ich beherzige ca. 20 grundlegende oft programmiersprachenspezifische Regeln von performanter Programmierung direkt beim coden.

Trotzdem würde ich niemals (ausser in "onError goto Fehler") goto verwenden, da ich in diesem Leben niemals Assembler programmieren werde. :)
 

Gruß Axel
« Letzte Änderung: 03.10.03 - 23:20:33 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #51 am: 04.10.03 - 06:15:39 »
Axel, ich kann Dir im wesentlichen nur zustimmen und wie Du richtig bemerkst, war meine Aussage über "Achtung Performance" nur ein Hinweis, den ich anbringen wollte, weil viele Entwickler sich des möglichen Problemes nicht bewusst sind (insbesondere wenns um verteilte und mehrfach gelayerte Sachen geht, wie Du korrekt schreibst).

In deinem ganzen Post, zu dem ich praktisch überall nur "völlig richtig" sagen kann, gibt es einen Problempunkt, und der ist nicht technischer Natur:

Du schreibst:
Meine alte Paranoia kocht hoch, dass Leute.... mich .... als irgendwie neureichen Modegeck ansehen.

Also, damit meinst Du sicher nicht mich, ich habe das nicht getan, werde das auch nie tun.

Du hast früher mal geschrieben:
Goto ist nicht einfach grausam sondern ein Synonym für das Ende der Zivilisation.

Damit tust Du aber genau das mit anderen Leuten, was Dir gegenüber Deine Paranoia aufkochen lässt.

Also bitte, verwende doch für Dich genau dieselben Masstäbe, die Du auch von Deiner Umwelt Dir gegenüber verlangst.


Ich bin sogar mit Dir einverstanden, dass ich seit Jahren keine Gotos mehr verwende (ebenfalls mit Ausnahme des On Error Goto, wo es simpel keine Alternative gibt), und ich gehe sogar so weit, dass ich auch die verkappten Gotos genannt Exits praktisch immer vermeide (und zum Beispiel dafür lieber eine Flag-Variable verwende, welche dann unmerklich weniger performant ist als ein Exit, aber ich weiss das). Deine Bemerkungen über OO und strukturierte Programmierung und zuerst saubere Strukturen und dann Performance, da kann man nur sagen, das sollte man mal GANZ LAUT IN DIE WELT HINAUSSCHREIEN !!

In dem Sinne ganz sicher vielen vielen Dank für diese Auflistung.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #52 am: 04.10.03 - 19:57:10 »
OK, überarbeitete Dokumentation siehe 1.Posting.

Recherchen von Rob's Links muss ich noch machen und einbauen.

Teilweise sind noch praxisnähere Beispiele erwünscht, als nur die von mir erwähnten (Zahlen von 1-20).

Also Beispiele für
  kopfgesteuerte
    - Do While...Loop
    - Do Until...Loop
  fußgesteuerte
    - Do...Loop While
    - Do...Loop Until
  sonstige
   - forall
   - do...loop

Thema Performance erwarte ich mir noch einiges von Rob's Links, muss die erstmal durcharbeiten.

Thema "Wie komm ich wieder raus": Hier brauche ich noch Input.
Was ja geht ist ein goto, was allerdings vermieden werden sollte weil es unübersichtlich werden könnte.
Dann wäre da noch ein Exit Sub, aber auch nicht so schön.

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #53 am: 04.10.03 - 21:06:26 »
Die Frage nach dem "wie komme ich wieder raus" ist weniger eine Frage des technischen "raus" (also goto oder exit) sondern mehr eine Frage der korrekten Logik:

Extremfall: For i= 1 to 20 step -1

.... verlässt den Loop nach einer Ewigkeit mit einem negativen Overflow ......

Für Forall ist der Ausstieg ja vorgegeben, Ueberlegung überflüssig, er nimmt einach alle Elemente des übergebenen Objektes.

Für do while, do until, while wend, loop until, loop while ist wichtig, sich beim Konzept der Schlaufe die Abbruchbedingung genau zu überlegen: Wird die Schleife überhaupt durchlaufen? Wenn ja, wird die Bedingung zur Abbruch der Schleife irgendwann erreicht? Gibt es Bedingungen, in denen die Schleife (vielleicht wegen Datenfehlehrn) gar nie verlassen werden kann und somit zum endlos-loop wird?

.... und dann bleibt ja noch der "nackte" do .... loop, bei dem der Hinweis fällig ist, dass er mit exit loop verlassen werden muss, da er keine steuernde Bedingung besitzt.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #54 am: 05.10.03 - 23:14:01 »
Da habe ich mal die Links von Rob zur Schleifenperformance rasch überflogen und wurde eigentlich darin bestätigt, dass Performance ein hervorragendes Thema für eine Entwickler-Konferenz ist. Es beschäftitgt sporadisch wohl fast jedes Diskussions-Forum und ist trotzdem etwas, das für viele Entwickler, ganz besonders für "Quereinsteiger", recht schwer zu fassen ist. Eine gute Präsentation zum Thema dürfte deshalb ein willkommenes Ereignis darstellen.

Ich werde jedenfalls mal die Sache noch genauer studieren und dann wahrscheinlich entsprechende Vorschläge bei einschlägigen Konferenzen einreichen.

Ich halte Euch auf dem Laufenden, wenn irgendwo etwas in die Richtung "einschlägt".
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #55 am: 07.10.03 - 00:27:22 »
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.

Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #56 am: 10.10.03 - 20:53:30 »
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
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Welche Schleife wann in Script
« Antwort #57 am: 10.10.03 - 21:06:53 »
No problem ...

Alle:
Schade, dass da nicht noch mehr Beispiele kommen.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Welche Schleife wann in Script
« Antwort #58 am: 10.10.03 - 21:09:30 »
jip, hab mir auch etwas mehr erhofft.

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

 ;)

TMC
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re:Welche Schleife wann in Script
« Antwort #59 am: 08.11.03 - 14:13:59 »
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz