[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[Урок] Оптимизация кода #2
Steep_NkДата: Воскресенье, 06.04.2014, 14:20 | Сообщение # 1
Прохожий
Группа: Пользователь
Сообщений: 37
Статус: Offline
Урок #2

В этом уроке я расскажу:
1) Как правильно использовать switchи case
2) Как правильно использовать циклы
3) Все о SetPVarInt

1. Все о switch и case

Многие где то прочли что лучше всего вместо обычных проверок:

Код
if(.....) //азаза
лучше использовать:

Код
switch(var)
{
case 0:
}
Однако, здравствуйте! Это не всегда так!

___________________________________________________________________________________

1. Этот код
Код
switch(var)
{
            case 40,80,150,160,230,420: return 1;
}
Быстрее чем:

Код
if ( var == 40 || var == 80 || var == 150 || var == 160 || var == 230 || var == 420 ) return 1;


___________________________________________________________________________________

2. Этот код


Код
switch(var)
{
            case 1..100,200..400,500..1000: return 1;
}
Медленнее чем:
Код
if ( var >= 1 && var <= 100 || var >= 200 && var <= 400 || var >= 500 && var <= 1000) return 1;

___________________________________________________________________________________

3. Этот код
Код
if ( var == 40 ) return 1;

Одинков с:
Код
switch(var)
{
case 40: return 1;
}
___________________________________________________________________________________

2. Как правильно использовать циклы

Код
for(переменные(обычно 1); условие цикла; операция с переменной)
{
//инструкции
}

Это цикл for именно о нем мы будем говорить! Так же есть циклы (while) (switch..case) и т.д

Допустим нам нужно в чат 10 раз вывести слово samp-ru.org
Код
for(new i; i<11; i++)  SendClientMessage(playerid,-1,"samp-ru.org");

Условие выполняется пока i < 11

И самое главное

Допустим у нас играет 100 человек и мы ищем игрока который едет в инфернусе чтобы написать ему "Привет!"
Код
for(new i; i<100; i++)
{
      if(GetVehicleModel(GetPlayerVehicleID(i)) == 411)
      {
          SendClientMessage(playerid,-1,"Привет!");
          return 1;// Вот тут внимательнее! Вот тут цикл прерывается!
      }
}

return 1; - цикл прервется при нахождении первого игрока с инфернусом!
Если  return 1;  убрать, то он выведет это всем игрокам с инфернусом!

2. Все о SetPVarInt

SetPVarInt очень удобен если мы используем данную переменную не только в моде а допустим еще и в каком-либо FS
В отличии от массивов их создавать не нужно!
Пример вставим в мод в паблик OnPlayerConnect:

Код
SetPVarInt(playerid,"Azaza",1); //установим Пвару с названием Azaza значение 1

В любой FS в паблик OnPlayerSpawn

Код
if(GetPVarInt(playerid,"Azaza")==1) SendClientMessage(playerid,-1,"В моде вам выдали Azaza 1");

С массивами такой фокус не пройдет!
SetPVarInt работает медленнее чем обычный массив new azaza[MAX_PLAYERS];

Поэтому если вам не нужны такие фокусы с передачи информации из Мода в FS и обратно, лучше их не использовать!


Сообщение отредактировал Steep_Nk - Воскресенье, 06.04.2014, 14:28
 
  • Страница 1 из 1
  • 1
Поиск: