<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # **第 1 章 Ruby 初探** 那么,我們趕快來看一下 Ruby 能做些什么。 本章會介紹以下內容。 - **使用 Ruby** 了解如何使用 Ruby 編寫并執行程序。 - **使用字符和數值** 了解字符和數值是如何輸出、計算以及給變量賦值等內容。 - **使用條件判斷和循環處理** 了解如何通過字符串或數值比較進行條件判斷處理,以及如何進行循環處理。 讀完本章,大家就能大概掌握用 Ruby 編寫程序的方法了。 ![{%}](https://box.kancloud.cn/2015-10-26_562e01d4acc8b.png) ### **1.1 Ruby 的運行方法** 首先,讓我們用 Ruby 編寫一個在屏幕上輸出字符的小程序。 Ruby 程序有多種執行方法,其中最常見的方法是使用 ruby 命令來執行,其次就是使用 irb 命令,以交互式命令行方式來執行。若只是想執行小程序,使用 irb 命令會相對簡單一點。 接下來,我們先介紹 ruby 命令以及 irb 命令的使用方法。 另外,讀者如果還沒安裝 Ruby,請參考附錄 A 預先安裝好 Ruby 運行環境。 > **注** 本書適用于 Ruby 2.0 或者 Ruby 1.9。由于 Mac OS X 和 Linux 系統默認安裝的 Ruby 版本比較舊,因此請讀者安裝新版本的 Ruby。 ### **1.1.1 ruby 命令的執行方法** 首先,讓我們看看代碼清單 1.1 的程序。 **代碼清單 1.1 helloruby.rb** ~~~ print("Hello, Ruby.\n") ~~~ > **注** 日文 Windows 系統中的 \ 會顯示為¥。原則上,本書統一書寫為 \。 各位是否有些沮喪呢?一般聽到“程序”,我們可能會聯想到一長串密碼似的東西。但這個程序的代碼只有一行,總共才 20 來個字符。可這的確是一個真真切切的程序,執行后就可以達到我們預想的目的。 請大家打開編輯器,寫入上述程序,將文件名修改為 helloruby.rb,保存文件。.rb 是 Ruby 程序的后綴,表示這個文件內容是 Ruby 程序。 > **備注** 寫代碼時會用到編輯器或者 IDE,它們的相關內容請參考 A.5 節。 接下來讓我們啟動控制臺,執行程序。 > **備注** 關于控制臺的啟動方法,請參考附錄 A 里各操作系統的說明。 啟動控制臺后,使用 cd 命令,移動到存放 helloruby.rb 的文件夾中。例如,使用 Windows,文件放在 C 盤的 src 文件夾(`c:\src`),然后執行以下命令, ~~~ > cd c:\src ~~~ 接著再執行, ~~~ > ruby helloruby.rb ~~~ 執行后,如圖 1.1 所示,會顯示“`Hello, Ruby.`”。 ![{%}](https://box.kancloud.cn/2015-10-26_562e01d4c8496.png) **圖 1.1 執行 Ruby** > **備注** 如果執行時出錯,請參考附錄 A 以及 B.5 節的內容。 ### **1.1.2 irb 命令的執行方法** 接下來,我們介紹 irb 命令的執行方法。 與 ruby 命令一樣,irb 命令在控制臺執行,不過不需要指定程序文件。 執行 irb 命令后,就會出現以下這樣的命令提示符。1 1使用 Ruby Instarller for Windows 安裝包安裝的 Ruby,在執行 irb 命令的時候有可能會顯示“DL is deprecated, please use Fiddle”這樣的警告。這是由于 Ruby Instarller for Windows 安裝包附帶的 readline 庫引用了名為 DL 的舊版本的庫,但這個警告不會對使用有任何影響。——譯者注 > **執行示例** ~~~ > irb irb(main):001:0> ~~~ 在這里,只需把剛才代碼清單 1.1 的代碼原封不動地在控制臺寫一次,然后直接按下回車鍵,即可執行程序。 > **執行示例** ~~~ irb(main):001:0> print("Hello, Ruby.\n") Hello, Ruby. ← print 方法輸入的結果 => nil irb(main):002:0> ~~~ > **備注** 第三行的 `nil` 是 `print` 方法的返回值。關于方法的返回值我們將在 7.3.1 節詳細說明。 像這樣,在控制臺寫的程序可以馬上在控制臺里執行,這對進行簡單的小測試非常方便。但是,這個方法并不適合大程序,這時我們應該考慮使用 ruby 命令。 > **注** 在使用 Mac OS X 時,irb 命令會有無法正確輸入日語的情況。這時可在 irb 命令后加上 --noreadline 選項,執行 irb --noreadline 命令。這樣一來,關閉 readline 功能后,就可以正常輸入日語了。但請注意,由于關閉了 readline 功能,在控制臺編輯已經輸入的字符、查看歷史輸入記錄等功能都將無法使用。 在控制臺輸入 `exit` 后,按回車鍵,或者同時按下 Ctrl + d,都可以終止 irb 命令。 ### **1.2 程序解說** 接下來,讓我們詳細解說一下代碼清單 1.1 的程序,雖然代碼只有孤零零的一行。 ### **1.2.1 對象** 首先,請留意 `"Hello, Ruby.\n"` 這部分。 ![%](https://box.kancloud.cn/2015-10-26_562e01d4d7d4d.png) 這部分被稱為 String 對象或者字符串對象,也可以直接稱這部分為字符串。也就是說,這部分是一個代表字符串 Hello, Ruby. 的對象(圖 1.2)。 ![{%}](https://box.kancloud.cn/2015-10-26_562e01d4c8496.png) **圖 1.2 數據與對象** 字符串、數值、時間等各種數據,在 Ruby 中都是對象。 > **備注** 字符串末尾的 \n 是換行符。 ### **1.2.2 方法** 這一次,讓我們留意一下 `print` 這部分。 ![%](https://box.kancloud.cn/2015-10-26_562e01d4d7d4d.png) `print` 是一個方法。所謂方法,就是對象的行為。數值的加法或乘法運算、字符串的合并、某時刻一小時后或者一天后的計算等操作,都是通過執行方法來實現。 `print` 方法的作用就是輸出 `()` 里的內容。因此,執行 helloruby.rb 后,在控制臺顯示了字符串對象——`Hello, Ruby.`。 我們把執行方法時必需的條件稱為參數。例如,我們在說明 `print` 方法時,會說“`print` 方法會把作為參數傳遞過來的字符串,輸出到控制臺中”。 我們更換一下 `print` 方法的參數,試一下把它換成其他字符串。 ~~~ print("Hello, RUBY!\n") ~~~ 這一次,我們希望輸出大寫字母的 `Hello, RUBY!`。是不是感覺會更加精神點呢? ### **1.3 字符串** 我們再詳細看看有關字符串的內容。 ### **1.3.1 換行符與 \** 上文我們提到過字符 `\n` 是換行符。利用換行符,我們可以用普通的字符達到換行的效果,例如,為達到以下效果, ~~~ Hello, Ruby ! ~~~ 程序可以這么寫: ![{%}](https://box.kancloud.cn/2015-10-26_562e01d57ce62.png) 原本也可以像下面一樣這么寫: ~~~ print("Hello, Ruby ! ") ~~~ 輸出結果雖然與第一種寫法是一樣的,但是,這樣的寫法會降低程序的可讀性,因此并不是一個好的寫法。既然 Ruby 已經幫我們準備了換行符,我們就直接用第一種方法吧。 除了 `\n` 以外,當我們想在字符串里嵌入特殊符號時,也會用到 \。雙引號是表示字符串開始和結束的符號,假設我們希望字符串里包含雙引號,程序要寫成 `\"`。 ~~~ print("Hello, \"Ruby\".\n") ~~~ 的輸出結果為: ~~~ Hello, "Ruby". ~~~ 像這樣,程序會對字符串里 \ 后的字符做特殊處理。2 因此,如果字符串里需要包含 \,程序要寫成 \\。例如, 2這個過程稱為轉義,\ 稱為轉義字符。——譯者注 ~~~ print("Hello \\ Ruby!") ~~~ 的輸出結果為: ~~~ Hello \ Ruby! ~~~ 請注意,兩個 \ 的輸出結果是一個 \。 ### **1.3.2 ' ' 與 " "** 創建字符串對象除了可以使用`" "`(雙引號)外,也可以使用`' '`(單引號)。我們試試把之前程序的雙引號換成單引號,看一下有什么樣的效果。 ~~~ print('Hello, \nRuby\n!\n') ~~~ 這次的輸出結果為: ~~~ Hello, \nRuby\n!\n ~~~ 程序會原封不動地輸出單引號里的內容。 也就是說,在單引號里,像 `\n` 這樣的特殊字符不經過轉義,程序會原封不動地直接輸出。但也有例外,例如在字符串里想嵌入 \ 與單引號時,還是需要在之前加上 \。也就是像這樣, ~~~ print('Hello, \\ \'Ruby\'.') ~~~ 的輸出結果為: ~~~ Hello, \ 'Ruby'. ~~~ ### **1.4 方法的調用** 關于方法,我們再詳細說明一下。 Ruby 在調用方法時可以省略 ()。因此,代碼清單 1.1 的 `print` 方法可以這樣寫: ~~~ print "Hello, Ruby.\n" ~~~ 另外,如果想連續輸出多個字符串,可以用逗號(`,`)分隔各字符串,程序會按順序輸出字符串。因此,如下寫法也是可以的: ~~~ print "Hello, ", "Ruby", ".", "\n" ~~~ 雖然這種寫法可以方便地輸出多個字符串,但是如果遇到比較復雜的參數,使用 `()` 會更加便于理解。因此,建議在習慣 Ruby 的語法之前,不要使用省略 `()` 的寫法。在一些較為簡單的情況下,本書會使用省略 `()` 的寫法。 一般來說,Ruby 是以從上到下的順序執行方法的。例如,執行下面的程序會得到相同的結果,也就是 `Hello, Ruby.`。 ~~~ print "Hello, " print "Ruby" print "." print "\n" ~~~ ### **1.5 puts 方法** `puts` 方法與 `print` 方法稍有區別,`puts` 方法在輸出結果的末尾一定會輸出換行符。用 `puts` 方法時,代碼清單 1.1 的程序可改寫為這樣: ~~~ puts "Hello, Ruby." ~~~ 不過,當參數為兩個字符串時, ~~~ puts "Hello, ", "Ruby!" ~~~ 各字符串末尾都會加上換行符,因此會輸出下面的結果: ~~~ Hello, Ruby! ~~~ 某些情況下,使用 `print` 方法可能會順手些;而某些情況下,使用 `print` 方法并不方便。請大家按照實際情況選擇該使用哪個方法。 ### **1.6 p 方法** 接下來,我們再介紹一個與輸出有關的方法。Ruby 提供了一個更簡單的輸出對象內容的方法——`p` 方法。 無論使用 `print` 方法還是 `puts` 方法,輸出數值 1 和字符串 `"1"` 時,結果都只是單純的 1。這樣一來,我們就無法判斷輸出的結果到底是屬于哪個對象。這種情況下,`p` 方法可以很好地解決這個問題。使用 `p` 方法時,數值結果和字符串結果會以不同的形式輸出。讓我們趕快來嘗試一下。 ~~~ puts "100" #=> 100 puts 100 #=> 100 p "100" #=> "100" p 100 #=> 100 ~~~ > **備注** 本書在表示程序輸出內容時,會在方法的旁邊添加`#=>` 字符,其右側即為方法的輸出結果。在這個例子里,`puts "100"`、`puts 100`、`p 100` 的輸出結果為字符串 `100`,`p "100"` 的輸出結果為字符串 `"100"`。 像這樣,輸出結果為字符串時,輸出結果會被雙引號括起來,一目了然。另外,使用 `p` 方法時,換行符(`\n`)、制表符(`\t`)等特殊字符不會轉義,會像下面那樣直接輸出(代碼清單 1.2)。 **代碼清單 1.2 put_and_p.rb** ~~~ puts "Hello, \n\tRuby." p "Hello, \n\tRuby." ~~~ > **執行示例** ~~~ > ruby puts_and_p.rb Hello, Ruby. "Hello, \n\tRuby." ~~~ 如果只是需要輸出程序執行的結果、信息等,可以選擇 `print` 方法;如果想確認程序的執行情況,則可選擇 `p` 方法。原則上,`p` 方法是提供給編程者使用的。 ### **1.7 中文的輸出** 到目前為止,我們使用的字符串都只包含字母。 接下來,我們看看如何輸出中文字符。其實,輸出中文字符也不是多難的事,只要把雙引號內的字母換成中文字符即可。像下面這樣: **代碼清單 1.3 kiritsubo.rb** ~~~ print "話說某個朝代,后宮妃嬪甚多,\n" print "其中有一宮女,出身并不十分高貴,卻蒙圣恩寵愛。\n" ~~~ > **執行示例** ~~~ > ruby kiritsubo.rb 話說某個朝代,后宮妃嬪甚多, 其中有一宮女,出身并不十分高貴,卻蒙圣恩寵愛。 ~~~ 不過,編碼設定不當也會導致輸出錯誤、亂碼等情況。遇到這樣的情況時,請參考專欄“中文使用注意事項”。 > **專欄** > **中文使用注意事項** > 在某些 Ruby 運行環境里,執行包含中文的腳本時,有可能出現以下錯誤。 > > **執行示例** ~~~ > ruby kiritsubo.rb kiritsubo.rb:1: invalid multibyte char (US-ASCII) kiritsubo.rb:1: invalid multibyte char (US-ASCII) ~~~ > 這是由于編寫程序時沒有指定程序的編碼方式造成的。Ruby 程序的編碼方式,是通過在程序的首行代碼添加注釋“`# encoding: 編碼方式`”來指定的(編碼的規則稱為 encoding)。我們稱這個注釋為魔法注釋(magic comment)。 > 例如,使用簡體中文版 Windows 常用編碼 GBK 編寫代碼時,可像下面這樣寫魔法注釋: ~~~ # encoding: GBK print "話說某個朝代,后宮妃嬪甚多,\n " print "其中有一宮女,出身并不十分高貴,卻蒙圣恩寵愛。\n " ~~~ > 這樣指定程序的編碼方式后,Ruby 在執行程序時就可以正確識別程序中的中文。下表是各平臺常用的編碼方式。平臺有多個常用編碼方式時,請按照實際情況選擇適合的編碼方式。 <table border="1" data-line-num="322 323 324 325 326 327" width="90%"><thead><tr><th> <p class="表頭單元格">平臺</p> </th> <th> <p class="表頭單元格">編碼方式</p> </th> </tr></thead><tbody><tr><td> <p class="表格單元格">Windows</p> </td> <td> <p class="表格單元格">GBK(或者GB 2312)</p> </td> </tr><tr><td> <p class="表格單元格">Mac OS X</p> </td> <td> <p class="表格單元格">UTF-8</p> </td> </tr><tr><td> <p class="表格單元格">Unix</p> </td> <td> <p class="表格單元格">UTF-8</p> </td> </tr></tbody></table> > 另外,從 Ruby 2.0 開始,若沒指定魔法注釋,Ruby 會默認使用 UTF-8 編碼方式。因此,在 Ruby 2.0 中如果希望代碼采用 UTF-8 的編碼方式時,可省略魔法注釋 。 > 除此以外,使用上述 p 方法輸出中文時,有時也會出現亂碼的情況。這時,可使用“`-E 編碼方式`”這個選項來指定輸出結果的編碼方式。例如,希望以 UTF-8 編碼方式在控制臺輸出結果,可像下面這樣執行命令: > > **執行示例** ~~~ > ruby -E UTF-8 腳本文件名 ← 腳本執行 > irb -E UTF-8 ← irb 啟動 ~~~ ### **1.8 數值表示與計算** 講解了字符串之后,讓我們再來看看 Ruby 是怎么處理數值的。在 Ruby 程序里,整數和小數(浮點數)的處理方式都很自然。 ### **1.8.1 數值** 首先,讓我們先了解一下 Ruby 是如何表示數值的。1.2 節提到,Ruby 中的字符串是以字符串對象的形式存在的。同樣地,數值也是以“數值對象”的形式存在的。也就是說,在程序里操作的都是數值對象。 Ruby 的整數的表示方法很簡單。直接輸入數字就可以了,例如, ~~~ 1 ~~~ 表示 1 的整數(`Fixnum`)對象。同樣地, ~~~ 100 ~~~ 表示 100 的整數對象。 再如, ~~~ 3.1415 ~~~ 這表示的是 3.1415 的浮點數(`Float`)對象。 > **備注** `Fixnum` 和 `Float` 是對象所屬類(class)的名稱。類的詳細內容我們將會在第 4 章和第 8 章說明。 數值的輸出與字符串輸出一樣,也是用 `print` 方法和 `puts` 方法。 ~~~ puts(10) ~~~ 執行以上代碼后, > **執行示例** ~~~ 10 ~~~ 會輸出到屏幕中。 ### **1.8.2 四則運算** Ruby 還可以對數值進行運算,并輸出其結果。我們來看看 Ruby 是怎么進行四則運算的。首先,我們用一下 irb 命令。 > **執行示例** ~~~ > irb --simple-prompt >> 1 + 1 => 2 ← 1 + 1 的執行結果 >> 2 - 3 => -1 ← 2 - 3 的執行結果 >> 5 * 10 => 50 ← 5 * 10 的執行結果 >> 100 / 4 => 25 ← 100 / 4 的執行結果 ~~~ > **備注** irb 命令后的選項 --simple-prompt 會簡化 irb 的輸出結果。 在一般的編程語言里,乘法運算符用 *,除法運算符用 /。Ruby 也延續了這個習慣。 讓我們再試一下復雜點的四則運算。四則運算的基本原則是“先乘除后加減”,Ruby 也遵循這個原則。也就是說, ~~~ 20 + 8 / 2 ~~~ 的結果是 24。如果 20 + 8 后再想除 2,可以使用括號, ~~~ (20 + 8) / 2 ~~~ 這時答案為 14。 ### **1.8.3 數學相關的函數** 除四則運算外,Ruby 中還可以使用數學函數,如平方根、sin 和 cos 等三角函數、指數函數等。使用數學函數時,必須在函數前加上 `Math.` 標識。 > **備注** 不想在函數前加 `Math.` 時,則需要 `include Math` 這段代碼。關于這些用法,我們會在 8.6.1 節進行說明。 求正弦時使用 `sin` 方法,求平方根時使用 `sqrt` 方法。執行相對應的函數方法,即可得到該函數的計算結果。一般我們稱這一過程為“執行方法后得到結果”,所得到的結果則稱為返回值。 > **執行示例** ~~~ > irb --simple-prompt >> Math.sin(3.1415) => 9.26535896604902e-05 ← sin 方法的返回值 >> Math.sqrt(10000) => 100.0 ← sqrt 方法的返回值 ~~~ > **注** 不同的 Ruby 版本,或者在不同平臺下執行時,返回值的位數可能會不同。 第一個返回值的結果是 9.26535896604902e-05,這是一種用來表示極大數或極小數的方法。“`(小數)e(整數)`”表示“`(小數) *10 的(整數)次冪`”。這個例子中,其結果值為“9.26535896604902 * 10 的-5 次冪”,也就是 0.0000926535896604902。 ### **1.9 變量** 變量是程序里不可缺少的元素之一。可以將其理解為給對象貼上的標簽。 我們可以像下面這樣給對象貼上標簽(圖 1.3): **變量名 = 對象** 我們稱這個過程為“將對象賦值給變量”。 ![{%}](https://box.kancloud.cn/2015-10-26_562e01d58b775.png) **圖 1.3 變量和對象** ~~~ alphabet = "abcdefg" num = 10 age = 18 name = 'TAKAHASHI' ~~~ 為了說明如何使用變量,讓我們看看以下這個求長方體表面積和體積的例子(代碼清單 1.4)。 **代碼清單 1.4 area_volume.rb** ~~~ x = 10 y = 20 z = 30 area = (x*y + y*z + z*x) * 2 volume = x * y * z print "表面積=", area, "\n" print "體積=", volume, "\n" ~~~ 若不使用變量,則程序會像下面這樣: ~~~ print "表面積=", (10*20 + 20*30 + 30*10) * 2, "\n" print "體積=", 10*20*30, "\n" ~~~ 這樣一來,一旦要修改一個值,那么好幾個地方也必須一起修改。上例只有兩行代碼,修改起來并不太麻煩,但遇到比較復雜的程序時,修改起來就會非常費勁。 另外,變量還可以清晰地表示某個值所代表的含義。因此,為變量起一個容易理解的名稱是非常重要的。例如, ~~~ hoge = (foo*bar + bar*baz + baz*foo) * 2 funi = foo * bar * baz ~~~ 像這樣的代碼,使人完全搞不清楚這個程序的目的。所以,建議大家平時多加注意,最好使用 `area`、`volume` 等意義明確的單詞作為變量名。 ### **print方法和變量** 讓我們再回顧一下print 方法。 ~~~ print "表面積 =", area, "\n" ~~~ 這個 `print` 方法有三個參數:`"表面積 = "`、`area`、`"\n"`。`print` 方法會按照順序,輸出這三個參數。 `"表面積 ="` 表示值為“`表面積 =`”的字符串,因此 `print` 方法會直接輸出。`area` 表示 `area` 這個變量引用的對象,在這個例子里就是 `2200` 這個整數,因此 `print` 方法輸出的是該整數值。 最后那個 `"\n"` 是換行符,因此 `print` 方法也會直接輸出。 這三個值經過 `print` 方法處理后,會在屏幕輸出“`表面積 = 2200`”加換行的結果。 傳遞給 `print` 方法的字符串參數也可以像下面這樣寫: ~~~ print "表面積 = #{area}\n" ~~~ `"表面積 = #{area}\n"` 為一個整體的字符串。`#{area}` 這樣的寫法,表示把 `area` 的值嵌入到字符串中。在字符串里使用 `#{...}` 這樣的寫法,可以把通過計算后得到的值嵌入到字符串中。輸出結果里除了可以嵌入變量名,也可以嵌入 `"表面積 = #{(x*y + y*z + z*x) * 2}\n"` 這樣的計算公式,得到的輸出結果是一樣的。 一般向屏幕輸出結果時,我們都希望同時輸出換行符,因此使用 `puts` 方法時,連 `\n` 也都不需要了,這樣程序會變得更加簡潔。 ~~~ puts "表面積 = #{area}" ~~~ ### **1.10 注釋** 我們在程序里可以寫注釋。注釋雖然寫在程序里面,但程序并不會執行注釋的內容,也就是說,注釋的內容對程序的執行結果不會產生任何影響。 大家也許會問:“為什么會在程序里寫這種與程序運行無關的東西呢?”的確,對于只執行一次就可以的簡單程序,并不需要特別的注釋。但是,一般來說,我們都會多次使用寫好的程序。那么,若希望記錄 - **程序的名稱、作者、發布條件等信息** - **程序說明** 等內容時,就需要用到注釋。 Ruby 用`#`表示注釋的開始 3。某行是以 `#` 開頭時,則整行都是注釋。某行中間出現`#` 時,則`#`以后部分就都是注釋。另外,行的開頭用 `=begin` 和 `=end` 括起來的部分也是注釋 4。這樣的注釋方法,在程序開頭或結尾寫長說明時會經常用到。 3單行注釋。——譯者注 4多行注釋。——譯者注 **代碼清單 1.5 comment_sample.rb** ~~~ =begin 《Ruby 基礎教程(第 4 版)》示例 注釋的使用示例 2006/06/16 創建 2006/07/01 追加一部分注釋 2013/04/01 第 4 版更新 =end x = 10 # 寬 y = 20 # 長 z = 30 # 高 # 計算表面積和體積 area = (x*y + y*z + z*x) * 2 volume = x * y * z # 輸出 print "表面積=", area, "\n" print "體積=", volume, "\n" ~~~ 除此以外,注釋還有使某行代碼“暫時不執行”的作用。 Ruby 沒有 C 中使行的某部分成為注釋的寫法,只要是以`#` 開始的部分,到行末為止一定都是注釋。 ### **1.11 控制語句** 編程語言中都有控制語句。 控制語句能讓程序在某種條件下,改變執行順序,或者只執行某一部分。 ### **控制語句的分類** 控制語句大致可以分成以下幾類。 - **順序控制**:按照程序的編寫順序,從頭到尾執行。 - **條件控制**:若某條件成立,則執行○○,否則執行 ××。 - **循環控制**:在某條件成立之前,反復執行○○。 - **異常控制**:發生某種異常時,執行○○。 順序控制是程序最常見的處理方式。若不做特殊處理,程序會按照代碼的編寫順序執行。 條件控制,是指根據條件執行分支處理。如果沒有滿足條件,程序會跳過某部分處理,繼續執行其他處理。在 Ruby 中,可使用的條件判斷語句有 `if`、`unless`、`case` 等。 循環控制,是指根據條件反復執行某個處理。在這種情況下,該處理的執行順序會與程序編寫的順序不同,執行過一次的程序,會從頭再執行一次。 異常控制有點特殊。程序執行時,意料之外的錯誤發生后,就會跳出正在執行的那部分程序,然后執行其他地方的程序,使程序能繼續執行下去。根據實際情況,有時也會讓程序馬上結束。 接下來,我們進一步介紹條件控制和循環控制。 ### **1.12 條件判斷:if~then~end** `if` 語句用于根據條件變化,改變程序的行為。`if` 語句的語法如下所示: **`if` 條件 `then`  條件成立時執行的處理 `end`** 條件一般是指能返回 `true` 或者 `false` 的表達式。例如比較兩個值,相同則返回 `true`,不同則返回 `flase`,這樣的表達式可作為條件。 我們在比較數值的大小時,會用到等號、不等號等運算符。在 Ruby 中,`=` 已經被用作賦值運算了,因此判斷是否相等的運算符要用兩個并列等號`==` 來代替`=`。另外,`≤`和`≥`運算符在 Ruby 中分別用 `<=` 和 `>=` 來替代。 條件表達返回的結果為 `true` 或者 `false`,`true` 表示條件成立,`false` 表示條件不成立。 ~~~ p (2 == 2) #=> true p (1 == 2) #=> false p (3 > 1) #=> true p (3 > 3) #=> false p (3 >= 3) #=> true p (3 < 1) #=> false p (3 < 3) #=> false p (3 <= 3) #=> true ~~~ 我們也可以使用`==`運算符比較字符串。字符串內容相同則返回 `true`,內容不同則返回 `false`。 ~~~ p ("Ruby" == "Ruby") #=> true p ("Ruby" == "Rubens") #=> false ~~~ 判斷值不相等時要使用`!=` 運算符,它與≠意思相同。 ~~~ p ("Ruby != "Rubens") #=> true p (1 != 1) #=> false ~~~ 那么,接下來讓我們來看一下如何使用這些運算符編寫條件語句。代碼清單 1.6 是一個簡單的程序:變量 a 大于等于 10 時輸出 `bigger`,小于 9 時輸出 `smaller`。 **代碼清單 1.6 bigger_smaller.rb** ~~~ a = 20 if a >= 10 then print "bigger\n" end if a <= 9 then print "smaller\n" end ~~~ 在這里可以省略 `then` 關鍵字。 ~~~ if a >= 10 print "bigger\n" end ┊ ~~~ 如果希望對條件成立和條件不成立時采取不同的處理,我們可以使用 `else` 關鍵字。 **`if` 條件 `then`  條件成立時執行的處理 `else`  條件不成立時執行的處理 `end`** 使用 `else` 關鍵字改寫剛才的程序后,會變成下面這樣, ~~~ if a >= 10 print "bigger\n" else print "smaller\n" end ~~~ ### **1.13 循環** 有時,我們會遇到希望多次循環執行同樣的處理的情況。下面,我們來介紹兩種執行循環處理的方法。 ### **1.13.1 while 語句** `while` 語句是執行循序時用到的一種基本語句。同樣地,`do` 關鍵字可以省略。 **`while` 循環條件 `do`  希望循環的處理 `end`** - **例:按順序輸出從 1 到 10 十個數字** ~~~ i = 1 while i <= 10 print i, "\n" i = i + 1 end ~~~ ### **1.13.2 times 方法** 循環處理的循環次數如果已確定,使用 `times` 方法會更加簡單。 **循環次數 .`times do`  希望循環的處理 `end`** - **輸出 100 行“All work and no play makes Jack a dull boy.”** ~~~ 100.times do print "All work and no play makes Jack a dull boy.\n" end ~~~ `times` 方法被稱為迭代器(iterator)。迭代器是 Ruby 的一個特色功能。從迭代器的英語拼寫方法我們可以知道,迭代器表示的是循環(iterate)的容器(-or)。類似地,運算符(operator)也就是運算(operate)的容器(-or),等等。總之,迭代器就是指用于執行循環處理的方法。 Ruby 除了 `times` 方法外,還提供了很多迭代器,典型的有 `each` 方法。`each` 方法的相關內容,我們會在第 2 章中與數組、散列一起介紹。
                  <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>

                              哎呀哎呀视频在线观看