Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

IF-y Warunki / Pytanie teoretyczne


  • Zamknięty Temat jest zamknięty
8 odpowiedzi w tym temacie

#1 dram

    Wszechwidzący

  • Użytkownik

Reputacja: 16
Początkujący

  • Postów:277
  • Lokalizacja:xxxx
Offline

Napisano 27.02.2011 00:28

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"?
  • +
  • -
  • 0
Co oferuje?

Pisanie pluginów amxx/modow itd
Skryptow php

Kontakt na PW LUB GG

#2 Lukasz5

    Godlike

  • Power User

Reputacja: 280
Wszechwidzący

  • Postów:1 414
  • Imię:Łukasz
  • Lokalizacja:C: / WINDOWS
Offline

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

  • +
  • -
  • 0

#3 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

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
}

  • +
  • -
  • 0

#4 dram

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 16
Początkujący

  • Postów:277
  • Lokalizacja:xxxx
Offline

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)

Użytkownik dram edytował ten post 27.02.2011 01:34

  • +
  • -
  • 0
Co oferuje?

Pisanie pluginów amxx/modow itd
Skryptow php

Kontakt na PW LUB GG

#5 Lukasz5

    Godlike

  • Power User

Reputacja: 280
Wszechwidzący

  • Postów:1 414
  • Imię:Łukasz
  • Lokalizacja:C: / WINDOWS
Offline

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ć...
  • +
  • -
  • 0

#6 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

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"
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
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

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) :D

#7 dram

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 16
Początkujący

  • Postów:277
  • Lokalizacja:xxxx
Offline

Napisano 03.03.2011 22:01

No chyba ,że jeden warunek w if-ie musi wykonać ok. 100 zapytań do bazy^^
  • +
  • -
  • 0
Co oferuje?

Pisanie pluginów amxx/modow itd
Skryptow php

Kontakt na PW LUB GG

#8 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

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
  • +
  • -
  • 0

#9 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

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

  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

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) :D




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych