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


    (一)条件判断

    条件判断为基本式:

    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/

    转载请注明:博客园

  • 相关阅读:
    MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例
    2018-2019-1 20189221《Linux内核原理与分析》第五周作业
    2018-2019-1 20189221 《构建之法》第 2 周学习总结
    2018-2019-1 20189221 《从问题到程序》第 4 周学习总结
    2018-2019-1 20189221 《深入理解计算机系统》第 2 周学习总结
    2018-2019-1 20189221 《从问题到程序》第 3 周学习总结
    2018-2019-1 20189221《Linux内核原理与分析》第四周作业
    2018-2019-1 20189221 《从问题到程序》第二周学习总结
    2018-2019-1 20189221《Linux内核原理与分析》第三周作业
    2018-2019-1 20189221 《构建之法》第一周学习总结
  • 原文地址:https://www.cnblogs.com/jams742003/p/2130877.html
Copyright © 2020-2023  润新知