2. MQL4 dla początkujących. Część II.

2.5. Operacje logiczne && oraz ||

Z celu demonstracji działania operatora iloczynu logicznego && (I) proponuję przeanalizować następujący przykład: "Jeśli dziś jest niedziela i (&&) jest słońce, to idę na spacer. Inaczej, zostaję w domu”. Przygotujmy taki skrypt.

Kod 1
#property strict

void OnStart()
  {
   bool IsTodaySunday = true;  // dziś jest niedziela
   bool IsTodaySunny  = true;  // dziś jest słońce
  
//---
   if(IsTodaySunday == true && IsTodaySunny == true)
      Print("Idę na spacer, ponieważ jest niedziela i jest słońce.");
   else
      Print("Zostaję w domu.");
//---
  }

W nagłówku operatora if, tj. między nawiasami ( ), widzimy dwa warunki rozdzielone symbolem &&. W pierwszym wyrażeniu sprawdzamy czy zmienna IsTodaySunday jest równa true: tak to prawda ponieważ podczas inicjalizacji została jej przypisana właśnie taka wartość. W drugim wyrażeniu sprawdzamy czy IsTodaySunny też jest równa true: tak - prawda. Ponieważ te dwa warunki jednocześnie są prawdziwe to możemy iść na spacer. Gdyby się okazało, że chociaż by jeden z nich nie był prawdziwy, np. podczas inicjalizacji jedna ze zmiennych miała by wartość false, to zgodnie z zapisanym kodem nie moglibyśmy pójść na spacer.


Operator iloczynu logicznego && stosujemy wtedy, gdy wszystkie zapisane warunki powinny być prawdziwe.

W MQL4 w taki sposób w jednym if można sprawdzać jednocześnie wiele warunków.

Kod 2
#property strict

void OnStart()
  {
   bool IsTodaySunday = true;   // dziś jest niedziela
   bool IsTodaySunny  = true;   // dziś jest słońce
   bool IsNewMovie    = false;  // nie ma nowego filmu

//---
   if(IsTodaySunday == true &&  // prawda - dziś jest niedziela
      IsTodaySunny  == true &&  // prawda - dziś jest słońce
      IsNewMovie    == false)   // prawda - nie ma nowego filmu
      Print("Idę na spacer, ponieważ jest niedziela i jest słońce i nie ma nowego filmu.");
   else
      Print("Zostaję w domu.");
//---
  }

W powyższym przykładzie (kod 2) dodatkowo sprawdzamy, czy w telewizji leci nowy film. Podczas inicjalizacji przypisaliśmy IsNewMovie wartość false, tj. brak nowego filmu. W nagłówku if w trzecim wyrażeniu sprawdzamy poprawność tego warunku i widzimy, że jest on prawdziwy (false równa się false co jest prawdą) i ponieważ wszystkie 3 warunki są prawdziwe, idziemy na spacer. Spróbuj jakąś zmienną zainicjalizować inaczej, a zobaczysz że skrypt będzie kazał zostać w domu (choć osobiście zalecam chodzić na spacery nie zależnie od tego co nam mówią komputery ).


Operator sumy logicznej || umożliwia realizację pożądanego działania jeśli przynajmniej jeden z warunków jest prawdziwy.

Sprawdź jak będzie działać poniższy skrypt.

Kod 3
#property strict

void OnStart()
  {
   bool IsTodaySunday = true;  // dziś jest niedziela
   bool IsTodaySunny  = false; // dziś nie ma słońca

//---
   if(IsTodaySunday == true || IsTodaySunny == true)
      Print("Idę na spacer, ponieważ albo jest niedziela albo jest słońce.");
   else
      Print("Zostaję w domu.");
//---
  }

Taki skrypt wyśle nas na spacer, ponieważ wystarczy aby przynajmniej jeden z warunków był prawdziwy. Tutaj pierwszy warunek jest prawdziwy, a drugi - nie. Gdyby było odwrotnie, tj. dziś nie była by niedziela, ale było by słońce, to też trzeba było by iść na dwór przewietrzyć się. Tylko w przypadku, gdyby żaden z warunków nie był by prawdziwy, wtedy działanie przeszło by do operatora else i skrypt poprosił by nas zostać w domu. Podobnie jak dla && operatorem sumy logicznej || można sprawdzać jednocześnie wiele warunków.