Ruby循环的概述

131 阅读4分钟

什么是循环?

我们可以把循环解释为一遍又一遍地重复同一事物的行为。在编程中,正如在现实生活中,我们需要流水线。想象一下,一个蛋糕工厂有一个确定的流程:混合原料、烘烤蛋糕、拆模、倒糖霜、包装蛋糕。这个过程每天都要进行100次。如果工厂的活动被翻译成代码,并且这个过程被定义在一个叫做 "cake_process "的方法中,我们就可以按照下面的方法对每一天进行编程。

# DAY 1  
cake_process()  
cake_process()  
...  
# continue 97 times  
...  
cake_process()  

或者我们可以做一些更简单的事情,在烘烤方法中循环100次。

# DAY 1  
100.times do  
  cake_process()  
end  

红宝石循环

循环是面向对象编程语言中的一个关键概念,根据接口数据创建实例是反复进行的。换句话说,循环是一个能够通过对象进行迭代的功能,如通过数组循环或通过哈希循环。

Ruby-on-Rails为这一目的做了很好的准备,因为它配备了一组辅助方法,使循环非常直接。这些方法将迭代的逻辑作为代码的抽象提供,因此代码保持了更高的可读性。

Ruby中最有用的循环方法

让我们来分析一下我们在Ruby中拥有的不同的循环选项的语法。目的是为了了解我们应该在什么时候使用每个方法。

for ... in

通常情况下,当我们知道循环需要执行的确切次数时,我们会使用for...in

比如说。

ingredients = "eggs, flour, sugar, milk"  
  
for ingredients in 0..99 do  
p "First step is mix ingredients: #{ingredients}"  
end  
#=> First step is mix ingredients: eggs, flour, sugar, milk  
#=> First step is mix ingredients: eggs, flour, sugar, milk  
#=> ...  

请注意,与变量ingredients 有关的动作将被执行100次,因为这个范围(0...99)包括0和99这两个值。

我们在上面的文章中已经看到了这种方法。它非常直观,它可以用来执行非常简单的任务(见下文),也可以通过传递一个块来执行更复杂的任务。

# Simple syntax:  
5.times p "Hello"  

each和each_with_index

each方法是用来迭代元素的,当元素用完时,循环结束。因此,不需要为迭代指定一个范围或次数。

ingredients.each do |ingredient|  
p "Add the #{ingredient}"  
end  
#=> Add the eggs  
#=> Add the flour  
#=> ...  

记住,在这个例子中我们使用的是数组,但你也可以通过哈希或任何其他对象进行循环

如果愿意,而且我们想跟踪元素的索引位置,我们也可以使用each_with_index

ingredients.each_with_index do |ingredient, index|  
p "#{ingredient} is the #{index + 1} in the list."  
end  
#=> eggs is the 1 in the list.  
#=> flour is the 2 in the list.  
#=> ...  

非常相似的是map 方法;而且它也允许用索引进行循环

each_with_object

在面向对象的编程语言中,each_with_object可能非常有用。例如,如果我们想把一个数组转换为一个哈希值。

cakes = ["Brownie", "Cheesecake", "Brownie", "Brownie", "Carrotcake", "Cheesecake"]  
cakes.each_with_object(Hash.new(0)) do |element, hash|  
hash[element] += 1  
end  
  
#=> { "Brownie": 3, "Cheesecake": 2, "Carrotcake": 1 }  

为了理解这里的逻辑,我们必须知道我们传递的对象是一个哈希,其中每个元素代表一个值为0的键。然后,每当循环找到数组上的元素时,它就把值增加1。

while 和 until

这些方法用于当我们想在一个对象中迭代若干次,但我们事先不知道它。在这种情况下,我们总是需要一个变量(在循环开始前声明)和一个条件。

i = 0  
while i < 3  
p i  
i += 1  
end  
#=> 0  
#=> 1  
#=> 2  

循环控制

循环允许在块内部进行一定程度的控制。这可以帮助我们避免某些情况下的复杂性,也可以使代码更易读。让我们看一个数字的例子,并使用nextbreak 关键字的功能。

i = 0  
  
while i < 100  
i += 1  
if i == 10  
p "hey this is 10"  
next  
end  
p i  
if i == 20  
break  
end  
end  

这将打印从1到9的数字,然后进入if语句并打印 "嘿,这是10",并在这个特定的迭代中跳过循环的其余部分,因为next 关键字。然后,循环将以i=11恢复,并继续打印数字,直到19。当i达到20时,由于break ,if语句导致停止循环

总结

掌握循环是非常重要的。Ruby提供了强大的方法,可以帮助你保持代码的干燥,节省空间,编写易于浏览的代码,并创建高效的Rails应用程序