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!