Циклы в Ruby используются для выполнения одного и того же блока кода определенное количество раз. В этой главе описываются все операторы цикла, поддерживаемые Ruby.

Ruby. Заявление while

Синтаксис

while conditional [do] code
end

 

Выполняет code, пока if равно true. Цикл while  отделен от code зарезервированным словом do, символом новой строки, обратным слэшем или точкой с запятой;.

Пример

#!/usr/bin/ruby
$i = 0
$num = 5
while $i < $num do puts("Внутри цикла i = #$i" ) $i +=1
end

 

Это приведет к следующему результату:

Внутри цикла i = 0
Внутри цикла i = 1
Внутри цикла i = 2
Внутри цикла i = 3
Внутри цикла i = 4

Ruby. Модификатор while

Синтаксис

code while condition
OR
begin code
end while conditional

Выполняет code, пока while равно true.

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

Пример

#!/usr/bin/ruby
$i = 0
$num = 5
begin puts("Внутри цикла i = #$i" ) $i +=1
end while $i < $num

 

Это приведет к следующему результату:

Внутри цикла i = 0
Внутри цикла i = 1
Внутри цикла i = 2
Внутри цикла i = 3
Внутри цикла i = 4

Ruby. Заявление until

until conditional [do] code
end

 

Выполняет code, а while – false. Утверждение until  условно отделяются от code зарезервированным словом do, переводом строкой или точкой с запятой.

Пример

#!/usr/bin/ruby
$i = 0
$num = 5
until $i > $num do puts("Внутри цикла i = #$i" ) $i +=1;
end

 

Это приведет к следующему результату:

Внутри цикла i = 0
Внутри цикла i = 1
Внутри цикла i = 2
Внутри цикла i = 3
Внутри цикла i = 4
Внутри цикла i = 5

Ruby модификатор until

Синтаксис

code until conditional
OR
begin code
end until conditional

 

Выполняет code, пока until – false.

Если модификатор until не будет следовать за инструкцией begin без каких- либо действий, code выполняется один раз перед вычислением выражения conditional.

Пример

#!/usr/bin/ruby
$i = 0
$num = 5
begin puts("Внутри цикла i = #$i" ) $i +=1;
end until $i > $num

 

Это приведет к следующему результату:

Внутри цикла i = 0
Внутри цикла i = 1
Внутри цикла i = 2
Внутри цикла i = 3
Внутри цикла i = 4
Внутри цикла i = 5

Ruby. Заявление for

Синтаксис

for variable [, variable ...] in expression [do] code
end

 

Выполняет code один раз для каждого элемента в expression.

Пример

#!/usr/bin/ruby
for i in 0..5 puts "Значение локальной переменной #{i}"
end

 

Здесь мы определили диапазон 0..5. Заявление для i в 0..5 позволит iпринимать значения в диапазоне от 0 до 5 (включая 5). Это приведет к следующему результату:

Значение локальной переменной 0
Значение локальной переменной 1
Значение локальной переменной 2
Значение локальной переменной 3
Значение локальной переменной 4
Значение локальной переменной 5

 

for … in loop почти точно эквивалентно следующему:

(expression).each do |variable[, variable...]| code end

 

за исключением того, что цикл for не создает новую область для локальных переменных. Для передачи контура в выражении отделен от code зарезервированным словом do, переводом строки или точкой с запятой.

Пример

#!/usr/bin/ruby
(0..5).each do |i| puts "Значение локальной переменной #{i}"
end

 

Это приведет к следующему результату:

Значение локальной переменной 0
Значение локальной переменной 1
Значение локальной переменной 2
Значение локальной переменной 3
Значение локальной переменной 4
Значение локальной переменной 5

Ruby. Заявление break

Синтаксис

break

 

Завершает самый внутренний цикл. Завершает метод с ассоциированным блоком, если он вызван внутри блока (с возвратом метода nil).

Пример

#!/usr/bin/ruby
for i in 0..5 if i > 2 then break end puts "Значение локальной переменной #{i}"
end

 

Это приведет к следующему результату:

Значение локальной переменной 0
Значение локальной переменной 1
Значение локальной переменной 2

Ruby. Заявление next

Синтаксис

next

 

Переход к следующему циклу внутри цикла. Завершает выполнение блока, если он вызван внутри блока (с выходом или возвратом вызова nil).

Пример

#!/usr/bin/ruby
for i in 0..5 if i < 2 then next end puts "Значение локальной переменной #{i}"
end

 

Это приведет к следующему результату:

Значение локальной переменной 2
Значение локальной переменной 3
Значение локальной переменной 4
Значение локальной переменной 5

Ruby. Заявление redo

Синтаксис

redo

 

Перезапускает цикл самого внутреннего цикла, не проверяя условия цикла. Перезапускает yield  или call, если вызывается внутри блока.

Пример

#!/usr/bin/ruby
for i in 0..5 if i < 2 then puts "Значение локальной переменной #{i}" redo end
end

 

Это приведет к следующему результату и пойдет в бесконечном цикле:

Значение локальной переменной 0
Значение локальной переменной 0
............................

Ruby. Заявление retry

Синтаксис

retry

 

Если в предложении rescue выражения begin отображается retry, перезапустите программу с начала тела begin.

begin do_something # exception raised
rescue # handles error retry # restart from beginning
end

 

Если в цикле отображается retry, блок или тело выражения for перезапускает вызов вызова цикла. Аргументы цикла повторно вычисляются.

for i in 1..5 retry if some_condition # restart from i == 1
end

Пример

#!/usr/bin/ruby for i in 0..5 retry if i > 2
puts "Значение локальной переменной #{i}"
end

 

Это приведет к следующему результату и пойдет в бесконечном цикле:

Значение локальной переменной 1
Значение локальной переменной 2
Значение локальной переменной 1
Значение локальной переменной 2
Значение локальной переменной 1
Значение локальной переменной 2
............................

Источник: AndreyEx.ru