Jak pominąć IF ?

0

Jezeli mam warunek

if ( ($dana1 >0 && $dana1 <= 50) || $dana1 == 100) ) {
	//wykonaj
}

Teraz w zaleznosci ktory z tych warunkow zostal spelniony
potrzebuje wykonac rozne czynnosci czyli musze dodac:

if ( ($dana1 >0 && $dana1 <= 50) || $dana1 == 100) ) {
	if ($dana1 == 100) {
		//zrob cos tu
	} elsee {
		//lub cos tu
	}	
}

A czy jest jakis sposob by nie stoswac drugiego IFa
tylko wykryc ktory z tych warunkow w tym jednym ifie
byl spelniony

0

Rozbić na dwa ify?

if ($dana1 == 100){
//...
}
if ( ($dana1 >0 && $dana1 <= 50){
//....
}

nadal nieładnie, bo można by wykorzystać jakaś strategię, ale przynajmniej prosto.

0

No nadal nadal dwa ify a jak zrobic to w jednym ?

0

Zawsze będziesz miał dwa ify, bo masz dwa warunki do sprawdzenia (tak naprawdę to trzy, bo jeszcze może nie spełniać żadnego z nich) to czy je wypiszesz w taki sposób, czy oddelegujesz do osobnych funkcji zmienia tylko czytelność kodu. Najładniej było by stworzyć coś w rodzaju prostej strategii:

doWhenFrom0To50($dana1);
doWhenEquals100($dana1);

i zamknąć w tych funkcjach sprawdzanie warunku. Zbliża to kod do formy znanej z programowania... hm... opisowego/funkcyjnego, gdzie mówimy CO ma być zrobione, ale nie interesuje nas JAK to jest robione.

0

Myślałem, że jest coś takiego jak na przykład macie warunek if tak?

if ($dana1 == 0 || $dana2 == 3) {
//do some...
}

i np jakas wewnetrzna tablica ktora wie ile bylo w ifie warunkow i ktory z nich zostal zmieniony na true
czyli $ifarray przetrzymalby zmienna ktora odpowiadalaby za warunek ktory byl spelniony
ale nie wiem czy to w ogole mozliwe

0

Można spróbować zaimplementować takie ustrojstwo (Java).

// T wartość zwracana z zadania
class ConfitionBaseRunner<T>{
    boolean flag;
    Task<T> taskToDoIfFlagTrue;

   public ConfitionBaseRunner(boolean condition, Task<T> task){
//...
   }

   public T run(){
      if(flag)
         return taskToDoIfFlagTrue.run();
      return null;
   }
}

// później 

Set<ConfitionBaseRunner<?>> conditionsAndTasks = new HashSet();

conditionsAndTasks.add(a>0||a<50, new Task<Void>{/*wywołanie*/} );
conditionsAndTasks.add(a==100, new Task<Void>{/*wywołanie*/} );

for(ConfitionBaseRunner<?> cbr: conditionsAndTasks )
   cbr.run();

W php pewno będzie podobnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1