Autor Thema: Frage zum AND-Operator  (Gelesen 2546 mal)

Offline el_erik

  • Frischling
  • *
  • Beiträge: 13
Frage zum AND-Operator
« am: 27.04.06 - 10:31:45 »
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

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

  • Gast
Re: Frage zum AND-Operator
« Antwort #1 am: 27.04.06 - 10:55:00 »
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)........

Offline ghost

  • Aktives Mitglied
  • ***
  • Beiträge: 174
  • Geschlecht: Männlich
  • Notes ist gut!
Re: Frage zum AND-Operator
« Antwort #2 am: 27.04.06 - 11:11:15 »
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

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Frage zum AND-Operator
« Antwort #3 am: 27.04.06 - 11:17:59 »
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é
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Frage zum AND-Operator
« Antwort #4 am: 27.04.06 - 11:28:03 »
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.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline el_erik

  • Frischling
  • *
  • Beiträge: 13
Re: Frage zum AND-Operator
« Antwort #5 am: 27.04.06 - 11:33:18 »
Hallo ghost,

recht vielen Dank fuer den Hinweis.
Ich habe meine If-Bedingung nun aufgesplittet, aber schoen sieht es nicht aus. :(
Es macht das ganze unübersichtlich.
Ein Kollege meinte, dass es in VisualBasic auch so waere.

Welche Peformance-Verbesserungen koennen denn erzielt werden, wenn alle Operanden ausgewertet werden? Falls bereits der erste And-Operand False liefert, ist es doch eigentlich sinnlos den Rest noch zu betrachten?

@DerAndre
Sicherlich kann der Code auch umgeschrieben werden. Allerdings ist dieser dann unübersichtlicher.
Ein Umschreiben scheint ja nur notwendig zu sein, wenn der zweite Operand auf das Ergebnis des ersten Operanden angewiesen ist.

Recht vielen Dank fuer die Info's.

Bye Marco

Offline el_erik

  • Frischling
  • *
  • Beiträge: 13
Re: Frage zum AND-Operator
« Antwort #6 am: 27.04.06 - 11:40:24 »
Hallo Thomas,

ueber das was in diesem Fall logisch richtig ist, laesst sich sicher endlos diskutieren. Es gibt sicherlich fuer beide Ansichten Argumente, welche dafuer und dagegen sprechen.
Allerdings muss ich mich mit den Gegebenheiten abfinden  und jammern hilft nicht :)

Bye Marco

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Frage zum AND-Operator
« Antwort #7 am: 27.04.06 - 11:43:46 »
Zur Ergänzung von meinem vorherigen Fred:
Das Ergebnis ist natürlich nur gleich, wenn b keine Abhängigkeit von a hat.
 
Solche Abhängigkeiten sollte man dann tunlichst getrennt Auswerten, dann kann das jeden zweiten Tag geändert werden und es ist egal.

Und das ist ja das, was Du auch gemacht hast.

Als Tipp, geh immer davon aus, das alle Statements ausgewertet werden und Du brauchst Dir keine Sorgen mehr zu machen.

Gruss

André

 ::) Wieder zulange Rumgemacht...

Manchmal geht Funktionalität vor Schönheit  :)
Dann drappier das Ganze noch mit einer Erklärung, warum das so ist und schon klappt es mit dem Nachbarn
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz