<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Ruby 控制流 > 原文: [https://zetcode.com/lang/rubytutorial/flowcontrol/](https://zetcode.com/lang/rubytutorial/flowcontrol/) 在 Ruby 教程的這一部分中,我們將討論流控制。 我們將定義幾個關鍵字,這些關鍵字使我們能夠控制 Ruby 程序的流程。 條件和循環會改變 Ruby 程序的流程。 條件語句是在特定條件下執行特定語句的關鍵字。 循環是多次執行的程序塊。 當程序運行時,語句從源文件的頂部到底部逐一執行。 ## Ruby `if`語句 `if`關鍵字用于檢查表達式是否為真。 如果為`true`,則執行一條語句。 該語句可以是單個語句或復合語句。 復合語句由該塊包圍的多個語句組成。 塊是由`end`關鍵字括起來的代碼。 `then`關鍵字是可選的。 ```ruby #!/usr/bin/ruby num = gets.to_i if num > 0 then puts "num variable is positive" puts "num variable equals to #{num}" end ``` 我們從用戶那里讀取了一個號碼。 如果數字大于零,那么我們將兩個消息打印到控制臺。 如果沒有,則什么也不做。 ```ruby $ ./simpleif.rb 4 num variable is positive num variable equals to 4 ``` 滿足條件,并將消息寫入控制臺。 我們可以使用`else`關鍵字來創建一個簡單的分支。 如果`if`關鍵字后方括號內的表達式的值為假,則將自動執行`else`關鍵字后方的語句。 代碼塊包含在`end`關鍵字中。 ```ruby #!/usr/bin/ruby age = 17 if age > 18 puts "Driving license issued" else puts "Driving license not permitted" end ``` 我們有一個年齡變量。 布爾表達式的計算結果為`false`,并且在控制臺中得到`"Driving license not permitted"`。 ```ruby $ ./licence.rb Driving license not permitted ``` 我們可以使用`elsif`關鍵字創建多個分支。 僅當不滿足先前條件時,`elsif`關鍵字才會測試其他條件。 請注意,我們可以在測試中使用多個`elsif`關鍵字。 ```ruby #!/usr/bin/ruby print "Enter a number: " num = gets.to_i if num < 0 puts "#{num} is negative" elsif num == 0 puts "#{num} is zero" elsif num > 0 puts "#{num} is positive" end ``` 我們有一個數值變量,并測試它是否為負數或正數或等于零。 根據從用戶讀取的值,我們將其中一條消息打印到控制臺。 ## Ruby `case`語句 `case`語句是選擇控制流語句。 它允許變量或表達式的值通過多路分支控制程序執行的流程。 與使用`if`和`elsif`語句的組合相比,它以更簡單的方式創建多個分支。 我們有一個變量或一個表達式。 `case`關鍵字用于根據值列表測試變量或表達式中的值。 值列表用`when`關鍵字顯示。 如果值匹配,則執行`when`之后的語句。 有一個可選的`else`語句。 如果找不到其他匹配項,則執行該命令。 ```ruby #!/usr/bin/ruby print "Enter top level domain: " domain = gets.chomp case domain when "us" puts "United States" when "de" puts "Germany" when "sk" puts "Slovakia" when "hu" puts "Hungary" else puts "Unknown" end ``` 在我們的程序中,我們有一個域變量。 我們從命令行讀取變量的值。 我們使用`when`語句測試變量的值。 有幾種選擇。 例如,如果該值等于`"us"`,則將`"United States"`字符串打印到控制臺。 ```ruby domain = gets.chomp ``` 我們使用`gets`方法從用戶那里得到輸入。 輸入還包括換行符。 `chomp`方法排除換行符。 ```ruby $ ./domains.rb Enter top level domain: hu Hungary ``` 我們在控制臺輸入了`"hu"`字符串,程序以`"Hungary"`作為響應。 ## Ruby `while`,`until`語句 `while`語句是一個控制流語句,它允許根據給定的布爾條件重復執行代碼。 條件為真時,它將執行代碼。 `while`關鍵字在`end`關鍵字包圍的塊內執行語句。 每次將表達式求值為`true`時都會執行這些語句。 ```ruby #!/usr/bin/ruby i = 0 sum = 0 while i < 10 do i = i + 1 sum = sum + i end puts "The sum of 0..9 values is #{sum}" ``` 在代碼示例中,我們從一系列數字計算值的總和。 `while`循環包含三個部分:初始化,測試和更新。 語句的每次執行都稱為循環。 ```ruby i = 0 sum = 0 ``` 我們啟動`i`和`sum`變量。 `i`用作計數器。 ```ruby while i < 10 do ... end ``` `while`和`do`關鍵字之間的表達式是第二階段,即測試。 請注意,`do`關鍵字是可選的。 執行主體中的語句,直到表達式的計算結果為`false`。 ```ruby i = i + 1 ``` 這是`while`循環的最后一個第三階段-更新。 我們增加計數器。 請注意,對`while`循環的不正確處理可能會導致循環不斷。 ```ruby $ ./while.rb The sum of 0..9 values is 55 ``` 這是示例的輸出。 `until`是一個控制流語句,在條件為`false`時執行代碼。 當條件為真時,循環停止。 ```ruby #!/usr/bin/ruby hours_left = 12 until hours_left == 0 if hours_left == 1 puts "There is #{hours_left} hour left" else puts "There are #{hours_left} hours left" end hours_left -= 1 end ``` 在我們的示例中,我們有一個變量`hours_left`。 我們開始倒數。 在每個循環周期中,我們打印那里還有多少小時。 當變量等于零時,循環停止。 ```ruby $ ./until.rb There are 12 hours left There are 11 hours left There are 10 hours left There are 9 hours left There are 8 hours left There are 7 hours left There are 6 hours left There are 5 hours left There are 4 hours left There are 3 hours left There are 2 hours left There is 1 hour left ``` 運行示例,我們得到了這個結果。 ## Ruby `for`語句 如果在啟動循環之前知道周期數,則可以使用`for`語句。 `for`循環與范圍結合使用。 對于范圍的每個元素,將執行語句塊。 語句包含在`end`關鍵字中。 `do`關鍵字是可選的。 ```ruby #!/usr/bin/ruby for i in 0..9 do puts "#{i}" end ``` 在此示例中,我們將數字`0..9`打印到控制臺。 在每個循環中,`i`變量均包含一個數字范圍內的值。 該值將打印到控制臺。 `..`范圍運算符創建一個數字列表,包括最后一個數字。 ```ruby $ ./forloop.rb 0 1 2 3 4 5 6 7 8 9 ``` This is the output of the example. 要使用`for`循環遍歷元素數組,可以使用數組的`length`方法。 ```ruby #!/usr/bin/ruby planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"] for i in 0...planets.length puts planets[i] end ``` 在這個例子中,我們有一系列的行星。 我們遍歷數組并打印數組的每個元素。 ```ruby planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"] ``` 這是一系列行星。 ```ruby for i in 0...planets.length ``` `length`方法返回數組的長度。 由于數組以 0 開頭,因此最后一個索引為`n-1`。 `...`范圍運算符創建一個數字范圍,但最后一個高值除外。 ```ruby puts planets[i] ``` 我們在數組中打印具有特定索引的元素。 ```ruby $ ./planets2.rb Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune ``` 運行上面的 Ruby 程序將給出此輸出。 ## Ruby `each`方法 在 Ruby 中,我們可以使用`each`方法來遍歷數組的各項。 它有兩個參數。 一個元素和一個塊。 元素放置在管道之間。 它是當前迭代項目的占位符。 塊是在每次迭代中執行的代碼。 ```ruby #!/usr/bin/ruby planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"] planets.each do |planet| puts planet end ``` 在此示例中,我們使用`each`迭代器遍歷了一系列行星。 ```ruby planets.each do |planet| puts planet end ``` `each`迭代器是一種適用于行星數組的方法。 該行星是迭代中當前項目的占位符。 我們可以把任何想要的角色放在那里。 我們可以使用`{}`字符代替`do`和`end`關鍵字。 ## Ruby `break`,`next`語句 `break`語句可用于終止由`while`,`for`或`case`語句定義的塊。 ```ruby #!/usr/bin/ruby while true r = 1 + rand(30) print "#{r} " if r == 22 break end end puts ``` 我們定義了一個無限的`while`循環。 我們使用`break`語句退出此循環。 我們從 1 到 30 中選擇一個隨機值。我們打印該值。 如果該值等于 22,則結束無窮的`while`循環。 ```ruby while true ... end ``` 這是一個無盡的循環。 while 循環的條件始終為 true。 擺脫這種無窮循環的唯一方法就是突破。 ```ruby r = 1 + rand(30) print "#{r} " ``` 我們計算一個從 1 到 30 的隨機數,并將其打印到控制臺。 ```ruby if r == 22 break end ``` 如果數字等于 22,我們將打破循環。 while 循環終止。 ```ruby $ ./break.rb 20 14 6 26 30 12 2 10 18 29 28 11 30 26 20 22 ``` 我們可能會得到這樣的東西。 `next`語句用于跳過循環的一部分,并繼續循環的下一個迭代。 它可以與`for`和`while`語句結合使用。 在下面的示例中,我們將打印一個數字列表,這些數字不能除以 2 而沒有余數。 ```ruby #!/usr/bin/ruby num = 0 while num < 100 num += 1 if (num % 2 == 0) next end print "#{num} " end puts ``` 我們使用`while`循環遍歷數字`1..99`。 ```ruby if (num % 2 == 0) next end ``` 如果表達式`num % 2`返回 0,則可以將所討論的數字除以 2。執行`next`語句,并跳過循環的其余部分。 在我們的例子中,循環的最后一條語句將被跳過,并且數字不會輸出到控制臺。 下一個迭代開始。 ```ruby $ ./next.rb 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 ``` 這是程序的示例輸出。 ## Ruby `redo`語句 `redo`語句重新啟動循環的迭代,而無需檢查循環條件。 最后一個示例將是一個更復雜的示例。 還將演示`redo`語句和其他功能。 ```ruby #!/usr/bin/ruby options = ["rock", "scissors", "paper"] while true print <<TEXT 1 - rock 2 - scissors 3 - paper 9 - end game TEXT val = gets.to_i r = rand(3) + 1 if val == 9 puts "End" exit end if ![1, 2, 3, 9].include?(val) puts "Invalid option" redo end computer = options[r-1] human = options[val-1] puts "I have #{computer}, you have #{human}" if val == r puts "Tie, next throw" redo end if val == 1 and r == 2 puts "Rock blunts scissors, you win" elsif val == 2 and r == 1 puts "Rock blunts scissors, you loose" elsif val == 2 and r == 3 puts "Scissors cut paper, you win" elsif val == 3 and r == 2 puts "Scissors cut paper, you loose" elsif val == 3 and r == 1 puts "Paper covers rock, you win" elsif val == 1 and r == 3 puts "Paper covers rock, you loose" end end ``` 我們有一個簡單的剪刀石頭布游戲。 在此代碼示例中,我們將利用`redo`語句,條件,隨機數,數組和用戶輸入。 ```ruby options = ["rock", "scissors", "paper"] ``` 在選項數組中,我們擁有游戲的所有可能性。 將消息打印到控制臺時,將使用這三個詞。 ```ruby print <<TEXT 1 - rock 2 - scissors 3 - paper 9 - end game TEXT ``` 我們使用 heredoc 語法將菜單打印到控制臺。 Heredoc 以`<<`開頭,后跟一個字符串。 相同的字符串關閉構造。 它必須保持對齊。 這使我們可以一步打印多行。 每個游戲周期都會打印此菜單。 ```ruby val = gets.to_i r = rand(3) + 1 ``` 在這些代碼行中,我們從終端讀取一個值。 然后,我們從 1、2 和 3 中隨機選擇一個數字。請注意`rand(3)`返回 0、1 和 2 中的一個數字。這就是為什么要加 1 的原因。 ```ruby if val == 9 puts "End" exit end ``` 如果來自用戶的輸入等于 9,我們將`"End"`打印到終端并結束游戲。 `exit`方法終止程序。 ```ruby if ![1, 2, 3, 9].include?(val) puts "Invalid option" redo end ``` 如果用戶選擇的值與菜單中提供的值不同,我們將告知無效選項并重做周期。 ```ruby computer = options[r-1] human = options[val-1] puts "I have #{computer}, you have #{human}" ``` 數字將轉換為字符串。 我們同時打印用戶和計算機的選擇。 ```ruby if val == r puts "Tie, next throw" redo end ``` 如果雙方有相同的選擇,那就是平局。 我們開始一個新的游戲周期。 我們利用`redo`關鍵字。 ```ruby if val == 1 and r == 2 puts "Rock blunts scissors, you win" elsif val == 2 and r == 1 puts "Rock blunts scissors, you loose" ... ``` 使用多個`if`和`elsif`分支,我們比較用戶和計算機的選擇。 我們決定誰是贏家。 ```ruby $ ./redo.rb 1 - rock 2 - scissors 3 - paper 9 - end game 3 I have paper, you have paper Tie, next throw 1 - rock 2 - scissors 3 - paper 9 - end game 2 I have rock, you have scissors Rock blunts scissors, you loose 1 - rock 2 - scissors 3 - paper 9 - end game 1 I have scissors, you have rock Rock blunts scissors, you win 1 - rock 2 - scissors 3 - paper 9 - end game 9 End ``` 這是一個示例輸出。 在 Ruby 教程的這一部分中,我們正在討論控制流結構。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看