Тернарният оператор е inline условна конструкция (if-else) (т.е. може да използвате при параметри, return, switch-case, за да си спестите цяла if-else конструкция). Форматът на тернарния оператор е следният - условие ? стойност_при_вярно : стойност_при_грешно. Важно е стойностите при вярно условие и при грешно условие да са от един и същ тип данни (т.е. ако първата стойност е число, то задължително и втората трябва да е!). Ако типът данни е тип string, обърнете внимание, че не можете да използвате placeholders в него (%s, %d, %c, %i, %f, %x) За да стане по-ясно за какво говоря ще покажа един пример.
Код с пълна If-else конструкция
Код за потвърждение: Избери целия код
#include <amxmodx>
public plugin_init()
{
register_plugin("Ternary operator example", "1.0", "AMXX-BG.info");
register_clcmd("say /alive", "IsPlayerAlive");
}
public IsPlayerAlive(id)
{
if (is_user_alive(id))
{
client_print(id, print_chat, "You are alive!");
}
else
{
client_print(id, print_chat, "You are dead!");
}
}
Код за потвърждение: Избери целия код
#include <amxmodx>
public plugin_init()
{
register_plugin("Ternary operator example", "1.0", "AMXX-BG.info");
register_clcmd("say /alive", "IsPlayerAlive");
}
public IsPlayerAlive(id)
{
client_print(id, print_chat, "You are %s", is_user_alive(id) ? "alive" : "dead");
}
Код за потвърждение: Избери целия код
new bool:blIsUserAlive = is_user_alive(id) ? true : false;
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <fun>
public plugin_init()
{
register_plugin("Ternary Switch-Case Exmaple", "1.0", "TheRedShoko");
register_clcmd("say /health", "DisplayMenu");
}
public DispalyMenu(id)
{
new iMenu = menu_create("Health menu", "MenuHandler");
menu_additem(iMenu, "5 health");
menu_additem(iMenu, "10 health");
menu_additem(iMenu, "15 health");
menu_additem(iMenu, "20 health");
menu_display(id, iMenu);
}
public MenuHandler(id, iMenu, Item)
{
new iHealthAmount;
switch (Item)
{
case 0: iHealthAmount = 5;
case 1: iHealthAmount = 10;
case 2: iHealthAmount = 15;
case 3: iHealthAmount = 20;
default: iHealthAmount = 0;
}
set_user_health(id, get_user_health(id) + iHealthAmount);
menu_destroy(iMenu);
}
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <fun>
public plugin_init()
{
register_plugin("Ternary Switch-Case Exmaple", "1.0", "TheRedShoko");
register_clcmd("say /health", "DisplayMenu");
}
public DispalyMenu(id)
{
new iMenu = menu_create("Health menu", "MenuHandler");
menu_additem(iMenu, "5 health");
menu_additem(iMenu, "10 health");
menu_additem(iMenu, "15 health");
menu_additem(iMenu, "20 health");
menu_display(id, iMenu);
}
public MenuHandler(id, iMenu, Item)
{
new iHealthAmount = Item == 0 ? 5 :
Item == 1 ? 10 :
Item == 2 ? 15 :
Item == 3 ? 20 : 0;
set_user_health(id, get_user_health(id) + iHealthAmount);
menu_destroy(iMenu);
}
Също може да се използва и при return, ето и пример:
Код за потвърждение: Избери целия код
public cmdSayChat(id)
{
if(isUserGaGed[id])
{
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
Код за потвърждение: Избери целия код
public cmdSayChat(id)
{
return isUserGaGed[id] ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
}
- типът данни на вярната стойност не съответства на грешната (т.е. е пробвано да се направи нещо от типа на
new iTest = is_user_alive(id) ? 1 : "pesho";, което е ГРЕШНО)
- не е използван inline, a като собствена конструкция
- използвани са placeholders в стойностите (%s, %d, %c, %i, %f, %x)
Възможно е да не съм успял да обясня както трябва нещата или да съм пропуснал нещо, така че питайте.