Ruby – Циклы

Циклы в 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
A 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