@Anthony
Mi a harmadik operátor ebben?
Ha ez \":\"
Akkor az \"if else\" alkalmazásánál is a \"harmadik operator\" (<- ki indulva a megnevezésbõl) az \"else\".
Szerintem ez a felállás
(feltétel)?(true):(false) // nem olyan feltét mint a pizzákra :d
ugyanaz mint egy if else
if(feltétel) // ?
{
//true
} else { // :
//false
)
Teljesítményt nem mértem melyik gyorsabb de return után egy if-et lehet nem is fogad el a fordító. pl.: return if(bla)
Az a \"?:\" operátor neve, hogy
hármas operátor [eredeti nevén triadic operator]
if(akármi)
{
return...;
}
else
{
return...;
}
Biztos hogy gyorsabb, mert a WRP-be írtam egy-két függvényt régen if-else \"elágazásokkal\", majd most átírtam \"?:\"-ra, és sokkal lassabb
[bár így 1 sorba belefér az egész, és nem kell 8 formatot használni, elég egyet xD] No persze a \"lassabb\" az még így is csak nanosecben mérhetõ.
new string[256], T1, T2;
new a[32] = \"Magyar Állami Operaház\";
new b[32] = \"Budapest, Andrássy út 22.\";
new c[32] = \"operákra, balettekre\";
new a2[32] = \"Csóró Kocsma\";
new b2[32] = \"Bucsaröcsöge, Sosevolt út 666.\";
new c2[32] = \"vikingmetálra és goth metálra\";
T1 = GetTickCount();
for(new i=0; i< 100000; i++)
{
new r = random(2);
format(string, sizeof(string), \"A %s (%s) Magyarország egyetlen nagy létszámú társulattal rendelkezõ és kimondottan %s szakosodott színháza.\", (r)?(a):(a2), (r)?(b):(b2), (r)?(c):(c2));
//printf(string);
}
T2 = GetTickCount();
printf(\"\\\"?:\\\" - 100000x: %d ms\", T2-T1);
T1 = GetTickCount();
for(new i=0; i< 100000; i++)
{
new r = random(2);
if(r)
{
format(string, sizeof(string), \"A %s (%s) Magyarország egyetlen nagy létszámú társulattal rendelkezõ és kimondottan %s szakosodott színháza.\", a, b, c);
}
else
{
format(string, sizeof(string), \"A %s (%s) Magyarország egyetlen nagy létszámú társulattal rendelkezõ és kimondottan %s szakosodott színháza.\", a2, b2, c2);
}
//printf(string);
}
T2 = GetTickCount();
printf(\"if-else - 100000x: %d ms\", T2-T1);
T1 = GetTickCount();
for(new i=0; i< 100000; i++)
{
new r = random(2);
switch(r)
{
case 0: format(string, sizeof(string), \"A %s (%s) Magyarország egyetlen nagy létszámú társulattal rendelkezõ és kimondottan %s szakosodott színháza.\", a, b, c);
case 1: format(string, sizeof(string), \"A %s (%s) Magyarország egyetlen nagy létszámú társulattal rendelkezõ és kimondottan %s szakosodott színháza.\", a2, b2, c2);
}
//printf(string);
}
T2 = GetTickCount();
printf(\"switch - 100000x: %d ms\", T2-T1);
Ezt a tesztet lefuttatva az eredmény:
[11:54:09][11:59:10] \"?:\" - 100000x: 148 ms
[11:59:10] if-else - 100000x: 138 ms
[11:59:10] switch - 100000x: 142 ms
Csak ha sok-sok \"?:\" van egymásba ágyazva az sokkal lassabb, mint ha sok else-if van egymásban =/