LASKA-SAMP.RU
Всё о сервере, форум!
Основы программирования
ИНФОРМАЦИОННО-РАЗВЛЕКАТЕЛЬНЫЙ ПОРТАЛ
PrR[ Проект SAMP - Romashka [0.3e] ™18+™
Pawn :: Основы скриптинга
Оператор switch

Оператор switch – это оператор выбора.
Он удобен в первую очередь тем, что может заменить много условий if, которые проверяют значение одной переменной. Представим себе такой пример. У нас есть целочисленная переменная pawn, значение которой нужно проверить. И в зависимости от того, какое значение у данной переменной выполнить соответствующий код.

new pawn;
switch(pawn)
{
case 0: //аналог условия if(pawn == 0)
{
print(”Переменная pawn = 0”);
}
case 1: //аналог условия if(pawn == 1)
{
print(”Переменная pawn = 1”);
}
}


Обратите внимание, если в фигурных скобках указано одно действие, его можно упростить так же как в случае с обычной условной конструкцией.
Но, что если переменная не попадает ни под одно условие в операторе switch. Тогда можно использовать default, он выполняется только в том случае, если switch не попадает ни в один из case.

new pawn;
switch(pawn)
{
case 0: printf(”Переменная pawn = 0”);
case 1: printf(”Переменная pawn = 1” );
default: printf(”Переменная pawn = %d” , pawn);
}


То же самое можно сделать и с помощью обычной условной конструкции if, тогда код выглядел бы следующим образом:

if(pawn == 0)
{
printf(”Переменная pawn = 0”); //все равно что case 0
}
else if(pawn == 1)
{
printf(”Переменная pawn = 1”); //все равно что case 1
}
else
{
printf(”Переменная pawn = %d” , pawn); //все равно что default
}


Этот способ удобнее и читабельнее чем много if конструкций идущих подряд. Еще одно отличие, что в case можно указать диапазон значений куда проще, чем в обычной условной конструкции if.

case 0..2: printf(”Переменная pawn = %d” , pawn); //условие внутри switch
if(pawn > 0 && pawn < 2) printf(”Переменная pawn = %d” , pawn); //то же условие, но уже в if


Рассмотрим пример использования  данного оператора в функции OnPlayerDisconnect.
В данной функции параметр reason возвращает ID причины  отключения игрока от сервера.
Благодаря этому параметру можно сделать вот такой код оповещения игроков о уходе игрока с сервера с пояснением причины.

switch(reason)
{
case 0:
{
GetPlayerName(playerid,plname,24);
format(string,sizeof(string), "*** %s вылетел с сервера.(ID:%d)",plname,playerid);
SendClientMessageToAll(0xAA3333AA,string);
}
case 1:
{
GetPlayerName(playerid,plname,24);
format(string,sizeof(string), "*** %s покинул сервер.(ID:%d)",plname,playerid);
SendClientMessageToAll(0xAA3333AA,string);
}
case 2:
{
GetPlayerName(playerid,plname,24);
format(string,sizeof(string), "*** %s был кикнут.(ID:%d)",plname,playerid);
SendClientMessageToAll(0xAA3333AA,string);
}
}


Этот пример можно упростить с помощью вот такой stock функции.

stock GetName(playerid)
{
new nick[MAX_PLAYER_NAME];
GetPlayerName(playerid, nick, sizeof(nick));
return nick;
}


В этом случае функцию GetPlayerName можно просто убрать из switch, а вместо переменной plname подставить вызов данной функции. Саму переменную plname также нужно удалить.



Логин: Пароль:
Забыли пароль?Регистрация
При копировании материала с сайта активная ссылка обязательна!
Сайт управляется SiNG cms © 2010-2015