Re: @Perler Logigkoperatoren und Ausführungs"art" - wie am günstigsten? - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 23.Juli.2003, 00:49.
    Re: @Perler Logigkoperatoren und Ausführungs"art" - wie am günstigsten?

      Da muss ich Dir widersprechen (zumindest im 1. Punkt ;-) ):

      Bei

      if(BEDINGUNG1 && BEDINGUNG2) ...
      

      wird BEDINGUNG2 _nicht_ ausgeführt, wenn BEDINGUNG1 _falsch_ ist... Wenn ganz hinten ||1 steht, also

      if(BEDINGUNG1 && BEDINGUNG2 || 1) ...
      

      ändert das nix, weil das von links nach rechts interpretiert wird... Was anderes wäre

      if((BEDINGUNG1 && BEDINGUNG2) || 1) ...
      

      Hier würde alles immer ausgeführt und es wäre auch immer wahr ;-)

      Umgekehrt gilt das ganze auch:

      if(BEDINGUNG1 || BEDINGUNG2) ...
      

      hier wird BEDINGUNG2 _nicht_ ausgeführt, wenn BEDINGUNG1 _wahr_ ist...

      Das ist auch nützlich z.b. für folgendes Konstrukt:

      open(...) || die "Fehler!";

      ;-)

      Was die Ausführungszeit angeht hast Du natürlich Recht: Das nimmt sich nich viel, höchstes inner Schleife die 100000 Mal durchlaufen wird... Was Ruben immer alles wissen will ,-))


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von hempelr (1976 Beiträge) am Dienstag, 22.Juli.2003, 16:21.
    @Perler Logigkoperatoren und Ausführungs"art" - wie am günstigsten?

      Hallo,
      mach mir eben mal Gedanken zu Mehrfachabfragen und der internen Perl-Interpretation dazu.
      Wie macht man es bei und-Verknüpfungen am besten, die Bedingung, die mit grösster Wahrscheinlichkeit nicht zutrifft zuerst abfragen und dann die anderen - bringt das überhaupt was?
      Beispiel:
      hab ne dreifach-Möglichkeit mit mehreren unterschiedlichen Bedinungen:
      1. rest nicht vorhanden aber kleinwert < grosswert
      2. rest nicht vorhanden aber kleinwert == grosswert und kleinwert > 0
      3. rest vorhanden, alles andere egal
      meine Abfrage:
      if (!$rest && ($kleinwert < $grosswert)){
      
      mach irgendwas
      }elsif (!$rest && ($kleinwert > 0) && ($kleinwert == $grosswert)){
      mach was anderes
      } elsif ($rest){
      
      mach was ganz anderes
      }
      Geht Perl beim ersten Misserfolg der Prüfung gleich weiter oder checkt es den gesamten Wahrheitswert des aussen geklammerten Prüfterms ab?
      Danke für Infos
      Ruben

     Antworten

    Beitrag von Pouraga (1396 Beiträge) am Dienstag, 22.Juli.2003, 22:25.
    Re: @Perler Logigkoperatoren und Ausführungs"art" - wie am günstigsten?

      Das wird sich nichts tun in der Ausführungszeit, denn logischerweise müssen Bedingungen immer komplett interpertiert werden. (oder woher soll der Interpreter vorne wissen das hinten kein "|| 1" steht ;) )


      Anders würde es sein wenn du diese struktur nimmst.

      if (!$rest){
      
        if ($kleinwert < $grosswert)){
          mach irgendwas
         }
        elsif ($kleinwert > 0) && ($kleinwert == $grosswert){ 
          mach was anderes
         }
      } 
      elsif ($rest){
      
      mach was ganz anderes
      }


      macht im Prinzip das selbe, nur könnte vielicht etwas schneller sein. (aber ich denke das wenn überhaupt es erst nach mindestens über 100000 mal ausführen in den millisekunden auftaucht ;) Mussu mal ausprobieren)

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 23.Juli.2003, 00:49.
    Re: @Perler Logigkoperatoren und Ausführungs"art" - wie am günstigsten?

      Da muss ich Dir widersprechen (zumindest im 1. Punkt ;-) ):

      Bei

      if(BEDINGUNG1 && BEDINGUNG2) ...
      

      wird BEDINGUNG2 _nicht_ ausgeführt, wenn BEDINGUNG1 _falsch_ ist... Wenn ganz hinten ||1 steht, also

      if(BEDINGUNG1 && BEDINGUNG2 || 1) ...
      

      ändert das nix, weil das von links nach rechts interpretiert wird... Was anderes wäre

      if((BEDINGUNG1 && BEDINGUNG2) || 1) ...
      

      Hier würde alles immer ausgeführt und es wäre auch immer wahr ;-)

      Umgekehrt gilt das ganze auch:

      if(BEDINGUNG1 || BEDINGUNG2) ...
      

      hier wird BEDINGUNG2 _nicht_ ausgeführt, wenn BEDINGUNG1 _wahr_ ist...

      Das ist auch nützlich z.b. für folgendes Konstrukt:

      open(...) || die "Fehler!";

      ;-)

      Was die Ausführungszeit angeht hast Du natürlich Recht: Das nimmt sich nich viel, höchstes inner Schleife die 100000 Mal durchlaufen wird... Was Ruben immer alles wissen will ,-))

     Antworten


     
 Liste der Einträge von 36151 bis 36301:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.07s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!