Оператор switch

Описание: Основы скриптинга
Модератор: SJplayer

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 24 апреля 2013, 18:04

Оператор switch
Автор Cloud

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

Код: Выделить всё

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


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

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

Код: Выделить всё

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


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

Код: Выделить всё

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


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

Код: Выделить всё

case 0..2printf(”Переменная samp = %d” samp); //условие внутри switch
if(samp && samp 2printf(”Переменная samp = %d” samp); //то же условие, но уже в 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(playeridnicksizeof(nick));
return 
nick;


В этом случае функцию GetPlayerName можно просто убрать из switch, а вместо переменной plname подставить вызов данной функции. Саму переменную plname также нужно удалить.
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Основы скриптинга»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 2 гостя