zoukankan      html  css  js  c++  java
  • Ruby学习笔记循环与选择结构

    一、循环结构

    1.    for…in语句:

    Ruby提供的for...in语句主要用于迭代数组和Hash对象中的元素,与其它语言的for

    语句有一定的差距,语法格式:

           for val  in  Array | Hash | Range [do]

                  #code

           End

    ----------------------------------------------------

    迭代数组:

      for i in ['one','two','three'] do

          puts i

      end

    迭代Hash对象:

           h = {1=>'aaa',2=>'bbb'}

          for i in h                                       

              puts i[0] .to_s + “ : ” +i[1].to_s

          end

    OR

          for key,value in h                                          #指定多个循环变量

              puts key.to_s + ": "+ value.to_s

          end

    ------------------------------------------------------

    另外,在Ruby中除了可以用for…in来迭代数组和Hash对象外,还可以用each方法来进行迭代:

       ['one','two','three'].each do |x|

    puts x

       end

              ----------------------------------------

              {1=>'aaa',2=>'bbb'}.each do  |a,b|

                     puts a.to_s + ": " +b.to_s

             end 

    Note:

    1.       使用for…in语句时,每次只能取出一个数组元素,而不能一次取出多个。

    2.       for循环的代码全在一行上时不能省略掉do,否则会报错; 只有当for循环的代码在多行上时才可以省略掉do;

     

    2.       Blocks

    Ruby中有两种定义块的方法:do…end {…}

    #do…end

    [‘1’,’2’,’3’].each do

            |a,b,c|

                   Puts(‘#{a},#{b},#{c}’)

    end

    # 大括号 {..}

    [[1,2,3],[3,4,5],[6,7,8]].each{

     |a,b,c|

    puts( "#{a}, #{b}, #{c}" )

    }

    Note: 不管我们用哪种方式定义一个块,我们都必须确保’do’要和each关键字放在同一行上,否则会出现语法错误

     

    3.       While语句:

    这个和其它语言差别不大,没什么好说的,语法格式如下:

    while condition [do]

            #code

    end

           or   

           code while condition

    在这要提一下的是上面的第二种定义,代码会先执行一次然后在进行判断。如果我们想用这种方式执行很多句代码,可以把它们放在beginend之间:

           begin

                  code1

                  code2

            end while condition

          

    Note: 当一个块被在beginend之间时(如上),那么这段代码到少会执行一次,其它格式定义的while循环里面的代码可能执行0或多次;

           x=100

    begin

                puts("x=#{x}")

    end while(x<100)                        #outputx=100

    puts ("-------------------")

    y=100

    puts("y=#{y}") while(y<100)              #无输出

     

    4.       until语句

    until语句与while语句作用正好相反,当条件表达式返回结果为时执行循环体,直到

    条件表达式为true为止,语法格式:

    until condition [do]

           #code

    end

    unitl语句的功能完全可以由wihle语句来实现,大多数其它语言中也没有until语句,感觉用起来容易出错,本人还是喜欢用while;

     

    5.       Loop 语句

    这是Ruby中提供的一个内建的最基本的迭代器,它可以执行循环功能,它会对指定代

    码进行无限次的循环,除非使用break语句跳出循环,语法格式:

           loop{

           #code

    }

    Or

    loop do

           #code

    end

     

    二、选择结构

    1.       If…Then…Else/If……then(可以用冒号代替Then)

    if x == 1 then puts( 'ok' ) end # with 'then'

    if x == 1 : puts( 'ok' ) end # with colon

    if x == 1 puts( 'ok' ) end # syntax error!代码在一行时不能省略then

     

    2.       And…Or…Not/&&…||…!

    Ruby中有两种方式来判定一个布尔表达式的值是true/false,但是这两种操作符不是完

    全等价的,比如他们的计算优先级别就不一样,&&/||/!的优先级别要高些,所以一般用的时候尽量不要将这两种操作符混合起来用;

    if 1==2 and 2==3 or (||)3==3

       puts('hello')  

    end

    Or

    if 1==2 && 2==3 || 3==3

       puts('world')  

    end

     

    3.       Unless

    该语句与if语句作用正好相反,当条件表达式返回结果为假时,计算then关键字后的代

    码片段,与if语句不同的是,unless语句中不能使用elsif语句,因些不能处理多分支的程序流程,语法格式如下:

           unless  condition [then]

                  #code1

           [else

    #code2    ]

           end

     

    4.       Case Statements

    Ruby中,将case关键字后表达式的值与各个常量进行比较时,使用的是”===”比较运算符,这就是说when关键安后的常量可以是一个Range对象, 此时只要case后的表达式的值在Range内,就可以执行相应的when后的代码片段了; 语法格式:

    case [表达式]

    [when 常量1 [,常量2] [,常量] then

            #code1

    ]

    [when 常量1 [,常量2] [,常量] then

            #code2

    ]

    [else

            #code3

    ]

    end

    case语句中,将case关键字后的表达式的值依次与when后的多个常量进行比较,一但相等,则执行对应的when语句块中的代码片段;

    case(i)

            when 1: puts(“It’s Monday”)

            when 2: puts(“It’s Tuesday”)

            when 3: puts(“It’s Wednesday”)

           when 4: puts(“It’s Thursday”)

            when 5: puts(“It’s Friday”)

            when (6..7): puts(“It’s the weekend!”)

            else puts(“error”)

    end 

    OR

    case(i)

            when 1

     puts(“It’s Monday”)

            when 2

    puts(“It’s Tuesday”)

            when 3

    puts(“It’s Wednesday”)

            when 4

    puts(“It’s Thursday”)

            when 5

    puts(“It’s Friday”)

            when (6..7)

    puts(“It’s the weekend!”)

            else

    puts(“error”)

    end 

    另外,当匹配成功后我们不需要为输入break语句来退出case语句,在Ruby中,一量匹配成功,case语句会自动跳出。

  • 相关阅读:
    2021软工-提问回顾与个人总结
    2021软工-调研作业-Notion
    2021年软工-个人阅读作业2
    tester
    tableau学做两个集合的维恩图(文氏图)Venn diagram 二维文氏图
    python学习
    pv操作是否会造成死锁呢?
    提问的正确姿势
    【BUAA OO Unit3】史上最全OpenJML摸索实录
    MVC和三层架构的区别
  • 原文地址:https://www.cnblogs.com/puresoul/p/2219055.html
Copyright © 2011-2022 走看看