Ruby入门(2)——基本流程控制

简介: (一)条件判断 条件判断为基本式: if expression        code end 表达式如果不是false或nil,则可执行code部分,所以对于else来说,如果为false或nil,则else下的代码是要执行的。

(一)条件判断

条件判断为基本式:

if expression

       code

end

表达式如果不是falsenil,则可执行code部分,所以对于else来说,如果为falsenil,则else下的代码是要执行的。要注意的是表达式与执行代码之间要有分界符:例如换行或分号或是then关键字。

多条件分支情况下,除了可以用else if之外,可以用省略式:elsif

if expression1

       code1

elsif expression2

       code2

else

       code3

end

 

如果通过then做为分界符:

if expression then code end,那么可以把if直接做为分界符:code if expression,这时,if称为表达式修饰符。先写执行再写执行条件。要注意的是:如果成为表达式修饰符,则执行代码与if之间不能带换行符。虽然这种方式也是一种条件句,但我觉得它更像一种修饰。

对于if判断来说,它可以返回执行代码后的值。

if条件类似,还有unless判断,它和if相反。

C#中,多分支语句有个switch case开关,在ruby中,则是case whencase when非常灵活。

 

(二)循环

循环条件是while dountil do,而位于它们之间的是循环体。

现条件if相似,循环语句也可以用分界符的形式做紧凑循环,这时,省略了换行符和end

x=1 
puts x,x+=1 while x<10 
 
while x<20 do 
  puts x 
  x+=1 
end 
 

 

C#中有for循环应用非常广泛,在ruby中,for循环与foreach的作用类似,用于对可枚举对象进行迭代。

for var in collection do

       code

end

其中collection是带有each迭代方法的对象;do关键字可选(可以用换行符或分号替代)。

arr=%w[1 2 3 4 5 6
for item in arr 
  print item<<" " 
end 
 
hash1={:a=>1,:b=>2,:c=>3
for key,value in hash1 
  print "#{key}=#{value}"<<" " 
end 

 

(三)迭代器和枚举

除了循环控制whileforuntil外,有种特殊的方法用于循环,也就是迭代器,它是ruby最重要的特性之一。

1)数值迭代器

upto:为一个区间内的所有整数调用其关联的代码块。左边为起始,右边为结束。

downto:与upto相反。

times:调用关系的代码一定的次数,且把0n-1传递给代码。

step:以一定的步长,迭代增加到指定数值。第二个参数为步长。

1.upto(5){|x|print "#{x} "} 
puts 
5.downto(1){|x|print "#{x} "} 
puts 
3.times{|x|print "#{x} "} 
puts 
3.step(5,0.5){|x|print "#{x} "} 

 

2)枚举迭代器

each:将迭代元素传递给代码。

collect:为调用它的枚举的每个元素执行关联代码后,组合到一起做为一个数组返回。

select:为调用它的枚举的每个元素执行关联代码后,如果为真,组合到一起做为一个数组返回。

reject:与select相反。它把为falsenil的元素做为一个数据返回。

inject:求累积值迭代。通过两个参数调用关联代码块,第一个参数是前次调用代码块的累积值,第二个参数指调用进行迭代的下一个元素。如果有传递参数,则做为第一个参数的初始值,如果没有,则把第一次进行迭代的元素值做为初始值。

a1=[1,2,3
a2=a1.map{|x| x+1
a3=a2.collect{|x| x+1
print a2,a3 
 
#o
偶数 
a5=a1.select{|x|x%2==0
print a5 
 
a6=a1.reject{|x|x%2==0
print a6 
puts 
a7=a1.inject{|sum,x|x+sum} 
puts a7 
a8=a1.inject(10){|sum,x|x+sum} 
puts a8 

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
算法 Ruby
【Ruby on Rails全栈课程】2.1 ruby语言入门
在第一章中,项目我们已经创建好并且能输出第一个helloworld了,我们先不急着做项目,先了解一下ruby,只是需要看得懂代码。这一章我们简单介绍一些ruby语言的语法
175 0
|
Web App开发 Java iOS开发
Ruby on Rails入门——macOS 下搭建Ruby Rails Web开发环境
这里只介绍具体的过程及遇到的问题和解决方案,有关概念性的知识请参考另一篇:Ruby Rails入门——windows下搭建Ruby Rails Web开发环境 macOS (我的版本是:10.12.3 )下已经自带了 ruby  和 gem ,但 ruby 的版本有点低。
1509 0
|
Ruby Python Linux
Ruby(1):入门
安装:   一般来说linux会自动装ruby,可以通过:  ruby -v 来查看ruby版本   直接使用ruby命令的话,是用来执行ruby文件的。如果要打开交互式ruby解释器。只需要在控制台输入:irb 即可。
901 0
|
Web App开发 Ruby Windows
Ruby Rails入门——windows下搭建Ruby Rails Web开发环境
Ruby on Rails 是一个可以使你开发,部署,维护 web 应用程序变得简单的框架。2015年10月编程语言排行榜 Ruby进入TIOBE排行榜前十,可见其流行程度如此之高。本文就帮你打开Ruby on Rails Web开发的大门,助你进入Ruby on Rails的世界,感受不一样的风景。
1159 0
|
C# Ruby
Ruby入门
一、Ruby  Introduction:   Ruby is "an interpreted scripting language for quick and easy object-oriented programming"。
726 0
|
自然语言处理 Ruby 安全
Ruby入门(3)——方法、代码段
Ruby中的方法是一个有名称的代码块,是与一个或多个对象关联的参数化的代码。调用时须给出方法名,接收者(所在对象),参数值,且最后一个表达式的值做为返回值。与Ruby方法相似的是代码块,它没有名字,且调用时只通过迭代器或被间接调用。
856 0
|
C# Ruby Java
Ruby入门(4)——类
创建类: class后跟类名,其中类名的首字母必须要大写。实例化时,通过new方法实例化。在c#中有构造器,构造器与类同名。在ruby中,构造器为initialize方法。当通过new方法实例化一个类对象后,会自动调用initialize方法,把new中的参数传递给initialize方法进行初始化。
819 0
|
7月前
|
JSON 数据格式 Ruby