Szerző Téma: [ Leírás ] Hármas operátor  (Megtekintve 3950 alkalommal)

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Dátum: 2011. március 13. - 18:09:23 »
0 Show voters
Az utóbbi idõben egyre több forrás kerül hozzám (a segítségek által), amelyekben az elágazásoknál csak a „berögzült” megoldást alkalmazzátok.
 
if ( x == 2 )
    SendClientMessage(playerid,COLOROM,”2”);
else
   SendClientMessage(playerid,COLOROM,”Nem2”);

 
 
Ezzel nincs semmi baj, viszont ki ne akarna magának jót?
A fenti példát meglehet oldani egy sokkal rövidebb, kényelmesebb és átláthatóbb (kinek mi..) módszerrel;
 
SendClientMessage(playerid,COLOROM,(x == 2) ? (\"2”) : (\"Nem2”));

 
 
Elsõre ez igencsak barátságtalannak tûnhet, de érdemes vele jóba lenni, mert sokszor segíthet rajtunk.
Nézzük hogyan épül fel


A funkció eleje gondolom mindenkinek még ismerõs, viszont a szöveg helyén megjelenõ zárójel már okozhat furcsa tekinteteket. A feltétel amit az elõbb if után láthattunk beépült a funkcióba. Az után ? választja el a feltétel és a két végkimenetelt. Egyik kimenetel az igaz/true: ez az elsõ. Ezt követi :-tal elválasztva a hamis/false kimenetel.
Példák


 

new bool: goodboy = true;
// .. sok minden ..
SetPlayerHealth(playerid,(!goodboy) ? 0.0 : 100.0);

 

SetPlayerColor( playerid, (Team[playerid] == TEAM_BLUE ) ? COLOR_BLUE : COLOR_RED );

 

new cash = (IsPlayerAdmin(playerid)) ? 400 : 20; 

 

SetPlayerHealth( playerid, ( IsSuddenDeathEnabled() ) ? 1.0 : 100.0 );

 

GivePlayerWeapon( playerid, ( IsMadnessEnabled() ) ? WEAPON_MINIGUN : WEAPON_FLOWER, 5000 );

 

file = fopen( ( useSpecialFile ) ? (\"special_file.txt\") : (\"normal_file.txt\") );

 


if ( ( IsPlayerAdmin( playerid ) ) ? SetPlayerPos( playerid, AdminSpawnX, AdminSpawnY, AdminSpawnZ ) : SetPlayerPos( playerid, PlayerSpawnX, PlayerSpawnY, PlayerSpawnZ ) ){}

 
 
Csak a karakterláncoknál kötelezõ a zárójelek használata! (Lásd: elsõ példa)
A végére pedig valami finomat tartogattam, még pedig azt, hogy ilyen hármas operátorokat egymásba is lehet építeni, de vigyázzatok, könnyen téveszthettek!
 
new c = random (3);
GivePlayerMoney(playerid, (c==0) ? 14524 : (c == 1) ? 42541 : (c == 2) ? 78541 : (c == 3) ? 7000 : 0);

 
 
Hozzászólásként küldjétek el, ha valamit nem értetek és kibõvítem annak megfelelõen!
« Utoljára szerkesztve: 2011. október 08. - 23:02:09 írta ChuckNorris »

Nem elérhető ZeRo

  • 4620
  • Ex Globális Moderátor
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Válasz #1 Dátum: 2011. március 13. - 18:44:04 »
0 Show voters
Errõl még anno én is akartam írni, de valahogy nem kerítettem rá sort. Szép leírás, pontos megfogalmazások, elegáns kifejezések. ;)
Csak egy szépséghiba, a logikai változó deklarációjánál kimaradt a \'d\' betû.

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Válasz #2 Dátum: 2011. március 13. - 18:53:48 »
0 Show voters
Köszönöm, korrigálva.

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Válasz #3 Dátum: 2011. március 13. - 20:13:40 »
0 Show voters
Szép leírás!
Én a többi helyen is használtam zárólejelek, mivel szerintem úgy átláthatóbb...
Amúgy az ugye nembaj ?

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Válasz #4 Dátum: 2011. március 13. - 21:11:25 »
0 Show voters
Köszönöm.
Nem.

Nem elérhető Iceaac

  • 2187
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Válasz #5 Dátum: 2011. március 14. - 09:04:49 »
0 Show voters

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Válasz #6 Dátum: 2011. március 14. - 11:42:29 »
0 Show voters
Kösz, kiegészítettem az ottani példákkal.

Nem elérhető ►ѕтa

  • 2016
  • Newbie
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Válasz #7 Dátum: 2011. szeptember 25. - 19:58:16 »
0 Show voters
Áthelyezve, szerintem ide való.
Mellesleg jó leírás.

[ Leírás ] Hármas operátor
« Válasz #8 Dátum: 2011. november 19. - 05:23:44 »
0 Show voters
Szép lett GRAT!

Nem elérhető maark

  • 565
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Válasz #9 Dátum: 2012. március 10. - 10:59:30 »
0 Show voters
Ne haragudjatok a bumpért, de lenne egy kérdésem. Az egy dolog hogy egyszerûbb, de a régi módi \"if\" elágazás lassabb mint a hármas operátor?

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
[ Leírás ] Hármas operátor
« Válasz #10 Dátum: 2012. március 10. - 11:58:35 »
+1 Show voters
Ugyanolyan gyorsak.
A fordító ugyanolyan kóddá fordítja mind2-t.

Gang[St]e[R]

  • Vendég
[ Leírás ] Hármas operátor
« Válasz #11 Dátum: 2012. március 10. - 12:03:05 »
0 Show voters
Ugyanúgy lekérdezi mintha benne lenne a függvényben az if elágazás úgy is veheted, csak ez megoldja egy sorba.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal