Оператор switch

Description: Основы скриптинга
Moderator: SJplayer

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Posts: 1611
Joined: 5 Apr 2013
With us: 11 years 5 months

#1by Дим » 24 Apr 2013, 18:04

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

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

Code: Select all

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


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

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

Code: Select all

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


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

Code: Select all

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.

Code: Select all

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


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

Code: Select all

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 функции.

Code: Select all

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]


  • Similar Topics
    Replies
    Views
    Last post

Return to “Основы скриптинга”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest