Ruby Циклы

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

Ruby whileОператор

Синтаксис

while условие [do] код end

или

Синтаксис

while условие [:] код end

КогдаусловиеКогда истинно, выполнитькод。

В синтаксисе do или : можно опустить. Но если вы хотите записать выражение while в одну строку, вы должны использовать do или :, чтобы отделить условие от блока кода.

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 while $i < $num do puts("#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 while $i < $num do puts("In the loop statement i = #$i" ) $i +=1 end" ) $i +=1 end

Попробуйте »

Вывод приведенного выше примера:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4

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

Синтаксис

код while условиеorbegin код end while условие

КогдаусловиеКогда истинно, выполнитькод。

ЕслиwhileМодификатор следует за ... безrescueили предложения ensurebeginпосле инструкции,кодбудетусловновыполнен один раз до вычисления условия.

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 begin puts("#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 begin puts("In the loop statement i = #$i" ) $i +=1 end while $i < $num" ) $i +=1 end while $i < $num

Попробуйте »

Вывод приведенного выше примера:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4

Ruby untilОператор

Синтаксис

until условие [do] код end

КогдаусловиеКогда ложно, выполнитькод。

В синтаксисе do можно опустить. Но если вы хотите записать выражение until в одну строку, необходимо использовать do, чтобы отделить условие от блока кода.

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 until $i > $num do puts("#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 until $i > $num do puts("In the loop statement i = #$i" ) $i +=1; end" ) $i +=1; end

Попробуйте »

Вывод приведенного выше примера:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4
在循环语句中 i = 5

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

Синтаксис

код until условиеorbegin код end until условие

КогдаусловиеКогда ложно, выполнитькод。

Еслиuntilмодификатор следует за ... безrescueили предложения ensurebeginпосле инструкции,кодбудетусловновыполнен один раз до вычисления условия.

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 begin puts("#!/usr/bin/ruby # -*- coding: UTF-8 -*- $i = 0 $num = 5 begin puts("In the loop statement i = #$i" ) $i +=1; end until $i > $num" ) $i +=1; end until $i > $num

Попробуйте »

Вывод приведенного выше примера:

在循环语句中 i = 0
在循环语句中 i = 1
在循环语句中 i = 2
在循环语句中 i = 3
在循环语句中 i = 4
在循环语句中 i = 5

Ruby forОператор

Синтаксис

for переменная [, переменная ...] in выражение [do] код end

Сначала вычислите выражение, чтобы получить объект, затем длявыражениекаждого элемента в нём выполните один разкод。

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 puts "#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 puts "The value of the local variable is #{i}" end" end

Попробуйте »

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

Вывод приведенного выше примера:

局部变量的值为 0
局部变量的值为 1
局部变量的值为 2
局部变量的值为 3
局部变量的值为 4
局部变量的值为 5

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

(выражение).each do |переменная[, переменная...]| код end

Однако цикл for не создаёт новую область видимости для локальных переменных.

В этом синтаксисе do можно опустить. Но если вы хотите записать выражение for в одну строку, необходимо использовать do, чтобы отделить условие от блока кода.

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- (0..5).each do |i| puts "#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 do puts "The value of the local variable is #{i}" end" end

Попробуйте »

Вывод приведенного выше примера:

局部变量的值为 0
局部变量的值为 1
局部变量的值为 2
局部变量的值为 3
局部变量的值为 4
局部变量的值为 5

Ruby breakОператор

Синтаксис

break

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

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 if i > 2 then break end puts "#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 if i > 2 then break end puts "The value of the local variable is #{i}" end" end

Попробуйте »

Вывод приведенного выше примера:

局部变量的值为 0
局部变量的值为 1
局部变量的值为 2

Ruby nextОператор

Синтаксис

Далее

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

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 if i < 2 then next end puts "#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 if i < 2 then next end puts "The value of the local variable is #{i}" end" end

Попробуйте »

Вывод приведенного выше примера:

局部变量的值为 2
局部变量的值为 3
局部变量的值为 4
局部变量的值为 5

Ruby redoОператор

Синтаксис

redo

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

Пример

#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 if i < 2 then puts "#!/usr/bin/ruby # -*- coding: UTF-8 -*- for i in 0..5 if i < 2 then puts "The value of the local variable is #{i}" redo end end" redo end end

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

局部变量的值为 0
局部变量的值为 0
............................

Ruby retryОператор

Примечание: версии 1.9 и более поздние не поддерживают использование retry в циклах.

Синтаксис

retry

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

begin do_something #возникшее исключение rescue #обработка ошибок retry #перезапуск с начала begin end

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

for i in 1..5 retry if some_condition #перезапуск с i == 1 end

Пример

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

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

局部变量的值为 1
局部变量的值为 2
局部变量的值为 1
局部变量的值为 2
局部变量的值为 1
局部变量的值为 2
............................
Другие расширения