Witam mam pytanie teoretyczne dot. IFów i wydajności na ich temat.
Wiem że lepiej jest użyć switch ale mi chodzi konkretnie o IF-y, przejdę więc do przykładu:
a = 10
b = 15
c = 20
if(a=a && b=a && c=a && b=c) {
// rob cos tam
}
W powyższym przypadku widzimy że 3 ostatnie warunki nie będą nigdy prawidłowe i warunek się nie wykona i teraz mam pytanie, jeżeli chociażby pierwszy warunek jest nie spełniony to w przypadku takiego if-a wykonuje się dalszy kod(czyli sprawdza czy następne warunki pasują do siebie?)
A jak jest w przypadku gdy jest tak:
a = 10
b = 15
c = 20
if(a=a){
if(b=c){
if(c=a){
}
}
}
W powyższym przypadku mogę rozumieć iż pierwsze nawiasy klamrowe (Czerwone) się wykonają, a co związku z pomarańczem czy jeżeli ten if się nie zgadza to mogę twierdzić iż kolejny warunek nie będzie nawet "odpytany"?
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Guest Message by DevFuse
IF-y Warunki / Pytanie teoretyczne
Temat rozp.
dram
, 27.02.2011 00:28
8 odpowiedzi w tym temacie
#1
Napisano 27.02.2011 00:28
Co oferuje?
Pisanie pluginów amxx/modow itd
Skryptow php
Kontakt na PW LUB GG
Pisanie pluginów amxx/modow itd
Skryptow php
Kontakt na PW LUB GG
#2
Napisano 27.02.2011 01:11
Jeżeli if'y są osobno i jeden jest dobry to wykonuje kod... Jeżeli nie robisz else, który robi co innego... Bo if to jeżeli np.: gracz żyję, a else jeżeli gracz nie żyje... Ja tak zawsze rozumuje... ;]
Użytkownik Lukasz5 edytował ten post 27.02.2011 01:12
#3
Napisano 27.02.2011 01:21
if(a=a && b=a && c=a && b=c)W przypadku amxx'a takie sprawdzanie jest "leniwe".
Jeżeli któryś z warunków nie jest spełniony to kolejne nie są sprawdzane.
Tylko nie a=a lecz a==a:
if(a==a && b==a && c==a && b==c) { //bez sensu ale zmienne a,b,c sa sobie rowne }Jak a będzie różne od a(pierwszy warunek ) to nie sprawdzi czy b == a.
Takie coś ma znaczenie zwłaszcza gdy korzystamy tam zamiast takiego porównania z wyników działania funkcji. np:
funkcja1() { return false; } funkcja2() { log_amxx('OK') return true; } if ( funkcja1() && funkcja2() ) { //zrob cos } if ( funkcja2() && funkcja1() ) { //zrob cos }
Oba porównania nie wykonają kodu zawartego między klamrami, ale drugi sposób(najpierw funkcja2 a potem funkcja1) uruchomi funkcję log_amxx a pierwszy nie.
Dlatego aby ominąć "leniwość" należy korzystać ze zmiennych:
new f1 = funkcja1(); new f2 = funkcja2(); if ( f1 && f2 ) { //zrob cos }
Natomiast opcja:
if(a==a) { if(b==c) { if(c==a) { //jakis kod } } }Zadziała tak jak:
if(a==a && b==c && c==a) { //jakis kod }
#4
Napisano 27.02.2011 01:34
tak dokładnie zamiast = miało być == czyli
Między zastosowaniem 1 a drugiej opcji nie ma różnicy w jej wydajności? ( a raczej w spadku wydajności serwera)
Między zastosowaniem 1 a drugiej opcji nie ma różnicy w jej wydajności? ( a raczej w spadku wydajności serwera)
Użytkownik dram edytował ten post 27.02.2011 01:34
Co oferuje?
Pisanie pluginów amxx/modow itd
Skryptow php
Kontakt na PW LUB GG
Pisanie pluginów amxx/modow itd
Skryptow php
Kontakt na PW LUB GG
#5
Napisano 27.02.2011 01:37
1 If sprawdza jeden raz... if'y 3 razy... 1 If zżera mniej kodu... Ale to i to powinno pykać...
#6
Napisano 03.03.2011 21:57
ehh a co cie obchodzi wydajnosc skoro twoj skrypt zapewne nie przekroczy 1k linii a nawet jesli to na pewno if'y nie beda najwiecej "mulic"
tylko taka jest roznica w optymalnosci ale czasem lepiej sobie tak to rozbic zeby latwiej to ogarnac
pozatym if(a==b && b==c)jest lepsze niz
if(a==b){ if(b==c){ // kod } }
tylko taka jest roznica w optymalnosci ale czasem lepiej sobie tak to rozbic zeby latwiej to ogarnac
Manual ponad wszystko, konsola ponad manual :&
Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka
GG:6022845 (nie pomagam za free osobom ponizej rangi MoD)
Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka
GG:6022845 (nie pomagam za free osobom ponizej rangi MoD)
#7
Napisano 03.03.2011 22:01
No chyba ,że jeden warunek w if-ie musi wykonać ok. 100 zapytań do bazy^^
Co oferuje?
Pisanie pluginów amxx/modow itd
Skryptow php
Kontakt na PW LUB GG
Pisanie pluginów amxx/modow itd
Skryptow php
Kontakt na PW LUB GG
#8
Napisano 04.03.2011 00:51
jeśli tyle razy to źle napisany skrypt :F ale 100 to nie jest tez ogromna liczba dla dzisiejszych procesorów
#9
Napisano 06.03.2011 00:39
nawet jesli to obciazenie nie bedzie zalezec od zlego if'a bo on i tak wykona sie w ulamku sekundy chyba ze zrobic
if(pobranie_danych_z_bazy) if(pobranie_danych_z_bazy2) if(pobranie_danych_z_bazy3) if(pobranie_danych_z_bazy4) itd
Manual ponad wszystko, konsola ponad manual :&
Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka
GG:6022845 (nie pomagam za free osobom ponizej rangi MoD)
Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka
GG:6022845 (nie pomagam za free osobom ponizej rangi MoD)
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych