Цикл for в деталях

Description: Уроки по скриптингу
Moderator: SJplayer

Miranda F
Topic author, Старшина
Старшина
Avatar
Miranda F
Topic author, Старшина
Старшина
Posts: 143
Joined: 5 Jul 2013
With us: 11 years 2 months

#1by Miranda » 25 Oct 2013, 19:31

Цикл for в деталях

Здравствуйте, уважаемые пользователи форума!

Просматривая темы и сообщения неопытных программистов, все чаще можно замечать ошибки в использовании цикла for.
В этом уроке мне хотелось бы детально рассмотреть данный цикл, показать его использование на множестве примеров.

Code: Select all

for(new a;a<5;a++) 


В цикле for есть три параметра.

Первый параметр - действие, выполняющееся в момент начала выполнения цикла. Чаще всего, здесь объявляют переменную-счетчик, которую можно использовать только внутри цикла. Но, можно объявить и несколько переменных, если они потребуются вам только внутри цикла:

Code: Select all

for(new a,Float:b,c,d;a<5;a++) 


Тоже самое и с массивами:

Code: Select all

for(new a,b[100];a<5;a++)  


Кроме объявления переменных, можно и вызвать функции:

Code: Select all

new a
for(print(
"Цикл начат");a<5;a++)  


Второй параметр - условие выполнения цикла. Проверяется каждый раз, перед выполнением цикла. В случаях выше, цикл будет выполняться только тогда, когда значение переменной a меньше пяти. Можно добавить и несколько условий, через запятую:

Code: Select all

for(new a,b;a<5,b<10;a++)  


В данном случае, цикл будет выполняться, пока переменная a меньше пяти и переменная b меньше десяти. Так же, можно использовать логические операторы.
Например:

Code: Select all

for(new a,b;a<|| b<10;a++) 


Цикл будет работать пока a меньше пяти, или b меньше пяти.
Второй параметр, в отличии от первого и третьего - является обязательным в цикле for. Если его не будет - произойдет зацикливание и сервер зависнит, если конечно в теле цикла вы не используете служебное слово break

Третий параметр - действие, которое будет выполняться в конце каждой итерации цикла.
Здесь так же, имеют место быть функции, например:

Code: Select all

new a
for(print(
"Цикл начат");a<5;print("Конец итерации"),a++) 


Выполнение цикла сервером.
Разберем простенький цикл:

Code: Select all

for(new i,b;i<5;i++) 
  
b++;  


Вот, как его представляет наш сервер:

Code: Select all

new i,b
if(
i<5

  
b++; 
  
i++; 

else 
  break; 
if(
i<5

  
b++; 
  
i++; 

else 
  break; 
if(
i<5

  
b++; 
  
i++; 

else 
  break; 
if(
i<5

  
b++; 
  
i++; 

else 
  break; 
if(
i<5

  
b++; 
  
i++; 

if(
i<5//Условие ложное, произойдет выход из цикла. 

  
b++; 
  
i++; 

else 
  break;  


Тело цикла - код, который будет выполняться при каждой итерации цикла.

Code: Select all

for(new i,b;i<5;i++) 
  
b++; 


В данном случае, b++ - тело цикла.
Иногда бывают такие случаи, когда тело цикла можно сделать пустым, для этого ставят пустые операторные скобки:

Code: Select all

for(new i,b;i<5;i++,b++) {} 


Данный код будет соответствовать примеру выше в плане работы, но будет работать быстрее, почти в два раза.
Его можно ускорить ещё:

Code: Select all

for(new i=-1,b;i++<1000000;b++)  


Учитесь логически мыслить, разбираться в простейших конструкциях.
С уважением, Павел Остяков.
Image


Return to “Уроки”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest