Domino 9 und frühere Versionen > ND6: Entwicklung
Frage zum AND-Operator
el_erik:
Hallo,
ich habe da mal eine blöde Frage. Ich habe folgendes Konstrukt:
if (a_expr AND b_expr) Then
...
End If
a_expr liefert den Wert False. Trotzdem wird noch der Wert von b_expr ausgewertet.
Konkret sieht der Code wie folgt aus:
--- Code: ---If (doc.HasEmbedded) Then
Dim item As NotesItem
Dim attachmentnames As Variant
Set item = doc.GetFirstItem ("Body")
attachmentnames = Evaluate( |@Attachmentnames|, doc )
If (Not item Is Nothing) Then
If (item.Type = RICHTEXT) Then
Dim rtitem As NotesRichTextItem
Set rtitem = doc.GetFirstItem ("Body")
If (Isarray (rtitem.EmbeddedObjects)_
And Ubound (attachmentnames) = Ubound (rtitem.EmbeddedObjects)) Then
'exportiere Attachments ueber EmbeddedObjects...
ElseIf
'exportiere Attachments ueber doc.GetAttachment...
End If
End If
End If
--- Ende Code ---
Isarray (rtitem.EmbeddedObjects) liefert False
Ubound (attachmentnames) liefert irgendeine Zahl
Ubound (rtitem.EmbeddedObjects) faellt auf die Nase (was ja auch richtig ist)
Ich habe mich nun darauf verlassen, dass die If-Bedingung in diesem Fall bereits nach dem der Auswertung des ersten Operanten abgebrochen wird. Zumindest ist es in anderen Sprachen so.
Muss ich nun wirklich die If-Bedingung in 2 If-Konstrukte aufsplitten oder sehe ich den Wald vor lauter Bäumen nicht :(
Ich bin für jede Erleuchtung dankbar.
Bye Marco
klaussal:
Da "IsArray" ja entweder False oder True zurückliefern kann, du aber das Ergebnis nicht abfragst, kann das m.E. nicht funzen.
Es müsste wohl so (oder ähnlich) lauten: If( isArray = true and yxz = 123)........
ghost:
Hallo Marco,
es ist in LS tatsächlich so, dass beim logischen Operatoren alle Ausdrücke ausgewertet werden. Deshalb muss die Prüfung auf zwei If-Bedingungen aufgeteilt werden. Das kann bei anderen Fällen, wo es nicht wie bei Dir zu einem Laufzeitfehler führt, dann aber zu Performanceverbesserungen beitragen.
Viele Grüße
ghost
DerAndre:
Hi Marco.
In anderen Ländern ißt man mit Stäbchen. ;)
Es ist einfach so, das solche Auswertungen von Sprache zu Sprache anders gehandelt werden. In Pascal ist es auch so, das alle Bedingungen eine Auswertung erfahren, aber was ist daran so schlimm?
Das Ergebnis von If a und b
oder if a then
if b then
.
.
end
end
sollte immer gleich aussehen. Beide haben zum Ergebnis, das was passiert wenn a und b True sind.
Gruss
André
Thomas Schulte:
Das Verhalten von Notes war übrigens an dieser Stelle ursprünglich genau so wie du es erwartet hast. Mit irgendeiner 5er Version ist das dann geändert worden, weil das jetzige Verhalten nämlich eigentlich das logisch richtige ist. Das hat damals einen ziemlichen Aufruhr verursacht weil etliche Anwendungen die sich genau darauf verlassen haben danach auf die Nase gefallen sind.
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln