Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu if....

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Frage zu if....

    Hallo zusammen,

    Ein if MyVar1... wird ja wie ein if change behandelt -> also jede Änderung in der Variablen wird geprüft.
    Wie verhält es sich denn wenn zwei Variablen dabei noch 'und' Verknüpft sind?

    Beispiel
    if (MyVar1 && MyVar2) then....

    Wird die Bedingung jedesmal geprüft wenn sich eine der beiden ändert?

    Danke!

    #2
    Nicht getestet, aber muss so sein!
    ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

    Kommentar


      #3
      Zitat von DerMitdemBusSpricht Beitrag anzeigen
      Beispiel
      if (MyVar1 && MyVar2) then....

      Wird die Bedingung jedesmal geprüft wenn sich eine der beiden ändert?
      Ja, die Bedingung wird immer geprüft, sobald sich eine der Variablen ändert, der then-Zweig wird aber nur ausgeführt, wenn sich das Ergebnis der if-Abfrage ändert.

      Beispiel:
      if MyVar1 or MyVar2 then ...

      Wenn MyVar1 EIN ist und später MyVar2 auf EIN wechselt, dann wird beim Ändern von MyVar2 auf EIN der then-Zweig NICHT mehr ausgeführt, da sich am Ergebnis der if-Abfrage nichts geändert hat.

      Kommentar


        #4
        Moment. Das widerspricht sich doch...?

        Du sagt zur jeden Änderung wird geprüft. OK.

        Jetzt werden die Inhalte beide true - dann sollte der then Zweig doch ausgeführt werden?

        Kommentar


          #5
          das Beispiel bezieht sich auf OR

          da ist es egal welche der beiden Variablen oder ob BEIDE True sind:
          es wird nur ausgeführt wenn es sich ÄNDERT
          EPIX
          ...und möge der Saft mit euch sein...
          Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

          Kommentar


            #6
            Sorry, das leuchtet mir jetzt nicht ganz ein.

            Geht es nicht auch um den Unterschied, ob es sich um ein "if" erster Ordnung, oder ein "if" n-ter Ordnung (also ein "if im if im ...") handelt?
            Also

            if (MyVar1 && MyVar2) then { //1. Ordnung

            } endif


            if (Bedingung 1. Ordnung) then {
            //1. Ordnung
            if (MyVar1 && MyVar2) then { //2. Ordnung

            } endif;

            } endif

            Im zweiten Fall muss ich doch sicher gehen können, dass entsprechend der "Weichenstellung" durch MyVar1 und MyVar2 der richtige Zweig ausgeführt wird. Sonst könnte das Folgende ja gar nicht richtig funktionieren - tut's aber:

            [highlight=epc]
            if rpmFaster@ and rpmCanAutoChange@ and pGApumpeStat then {
            if ( (pGArpmStat + pRpmInc) > rpmMax@) then {
            rpm@ = rpmMax@;
            } else {
            rpm@ = pGArpmStat + pRpmInc;
            } endif;
            } endif;
            [/highlight]

            und wo ich's jetzt anschaue, ginge es viel eleganter mit:

            [highlight=epc]
            if rpmFaster@ and rpmCanAutoChange@ and pGApumpeStat then {
            rpm@ = min(rpmMax@,pGArpmStat + pRpmInc);
            } endif;
            [/highlight]

            Das kommt beim nächsten Flashen gleich rein....

            Kommentar


              #7
              Zitat von DerMitdemBusSpricht Beitrag anzeigen
              hen Zweig doch ausgeführt werden?
              Nein, weil das Ergebnis sich nicht ändert.
              Beim Verschachteln ist das anders, wie Du schon richtig bemerkt hast, vgl. Handbuch S. 111, "Verschachteln von If".
              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
              Enertex Produkte kaufen

              Kommentar


                #8
                Ich versteht nicht warum sich das Ergebnis sich nicht ändern soll!?

                Wertetabelle:
                if(...
                !a && !b - kein then...
                !a && b - kein then...
                a && !b - kein then
                a && b - then... wird ausgeführt.

                Geprüft wird jede Änderung.
                Zwischen 3 und 4 ist dann ist doch eine Änderung da?
                Warum sollte es nicht gehen?

                Kommentar


                  #9
                  es wird ja funktionieren!

                  das Beispiel war mit OR

                  Beispiel:
                  if MyVar1 or MyVar2 then ...
                  da ändert sich eben nichts ob

                  !var1 OR var2
                  var1 OR var2
                  var1 OR var2

                  EPIX
                  ...und möge der Saft mit euch sein...
                  Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                  Kommentar

                  Lädt...
                  X