iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 13
5
Modern Web

只要有心,人人都可以做卡米狗系列 第 13

第十三天:認識 Ruby 的資料型態

今天要來學寫程式囉,今天就只講資料型態的部分,想要一天學完全部,我怕你的腦子會爆炸,畢竟在學校的話,這是一學期的課程。我們慢慢來就好,30 天之內一定會讓你學會寫聊天機器人的。

認識 irb

平常我們寫程式是寫在文字檔,然後再拿程式碼檔去一行行的執行程式。但當我們想要測試某一行程式碼的結果時,我們會使用 irb(Interactive Ruby) 來做測試。irb 很方便,我們可以在 irb 的環境裡面輸入一行程式碼,就能馬上得到這行程式碼的結果。

進入 irb

先按 Windows+R 輸入 cmd 叫出小黑框:

D:\只要有心,人人都可以作卡米狗>

輸入 irb

D:\只要有心,人人都可以作卡米狗>irb
irb(main):001:0>

輸入完之後就會進入 irb 的世界,在左側看到 irb 開頭就代表現在在 irb 裡面。

離開 irb

要離開 irb 的話就輸入 exit 或者按 Ctrl+C

D:\只要有心,人人都可以作卡米狗>irb
irb(main):001:0> exit

D:\只要有心,人人都可以作卡米狗>

就像這樣,就離開了 irb 的環境。

認識資料型態

再次進到 irb ,我們先認識一下資料型態:

數字

數字就是我們一般理解的數字,數學課教的那種。

輸入 5566:

D:\只要有心,人人都可以作卡米狗>irb
irb(main):001:0> 5566
=> 5566

輸入 5566 之後看到 => 5566 代表 5566 這行程式碼的執行結果是 5566

接下來輸入 5566+9527 看看:

irb(main):002:0> 5566+9527
=> 15093

輸入 5566+9527 之後看到 => 15093 代表 5566+9527 這行程式碼的執行結果是 15093

輸入 5566.class 可以讓 ruby 告訴我們,5566 是什麼型態:

irb(main):003:0> 5566.class
=> Integer

5566 是 Integer(整數)。

字串

輸入 '5566'.class 看看:

irb(main):004:0> '5566'.class
=> String

用單引號或雙引號包起來的東西是字串,字串就是文字的意思。

輸入 '5566+9527' 看看:

irb(main):005:0> '5566+9527'
=> "5566+9527"

因為加號也是文字的一部分,所以就不會做計算。

讓我們試著把兩個字串加起來看看,輸入'5566'+'9527'

irb(main):006:0> '5566'+'9527'
=> "55669527"

就像是在 5566 後面輸入 9527 一樣。

在 windows 的 irb 可能會遇到不能輸入中文的情形,目前請先別介意,我們用英文就好。

變數

我們可以使用等號來幫數字或文字取名字。

irb(main):007:0> idol = 5566
=> 5566

變數定義完之後,我們只要叫到他,就視同輸入等號右邊的結果。

irb(main):008:0> idol
=> 5566

事實上我們可以取名字的東西非常多,不是只有數字和文字能被取名。

陣列

我們可以一次宣告大量變數,語法是中括號 [] 的中間用逗號區隔。

irb(main):009:0> eat = ["Mcdonald's", 'KFC', 'BUG King', 'MOS BUG']
=> ["Mcdonald's", "KFC", "BUG King", "MOS BUG"]

我們這樣就宣告了4個字串變數,分別是:

  • eat[0] = "Mcdonald's"
  • eat[1] = "KFC"
  • eat[2] = "BUG King"
  • eat[3] = "MOS BUG"

在電腦的世界裡第一個數字是 0,所以宣告一堆變數之後,第一個變數的索引是 0。

你也可以這樣寫,效果是相同的:

irb(main):010:0> eat = []
=> []
irb(main):011:0> eat[0] = "Mcdonald's"
=> "Mcdonald's"
irb(main):012:0> eat[1] = 'KFC'
=> "KFC"
irb(main):013:0> eat[2] = 'BUG King'
=> "BUG King"
irb(main):014:0> eat[3] = 'MOS BUG'
=> "MOS BUG"
irb(main):015:0> eat
=> ["Mcdonald's", "KFC", "BUG King", "MOS BUG"]

第一行是宣告一個空陣列,然後接下來的每一行都是塞入一個值。

你也可以這樣寫,效果也是相同的:

irb(main):016:0> eat = []
=> []
irb(main):017:0> eat << "Mcdonald's"
=> ["Mcdonald's"]
irb(main):018:0> eat << 'KFC'
=> ["Mcdonald's", "KFC"]
irb(main):019:0> eat << 'BUG King'
=> ["Mcdonald's", "KFC", "BUG King"]
irb(main):020:0> eat << 'MOS BUG'
=> ["Mcdonald's", "KFC", "BUG King", "MOS BUG"]

<< 表示放一個東西進入陣列。

查看 eat 的資料型態會發現資料型態是 Array(陣列)。

irb(main):021:0> eat.class
=> Array

查看 eat[0] 的資料型態會發現資料型態是 String(字串)。

irb(main):022:0> eat[0].class
=> String

跟一般的變數一樣,輸入 eat[2] 可以取得他的內容。

irb(main):023:0> eat[2]
=> "BUG King"

但是你還可以這樣:

irb(main):024:0> bgk = 2
=> 2
irb(main):025:0> eat[bgk]
=> "BUG King"

也許現在還很難理解把 2 換成 bgk 會有什麼好處,本篇結尾會說明。

雜湊陣列

在陣列中,我們學到可以用數字作為索引,而雜湊陣列則是把數字改成任何資料型態的變數。

雜湊陣列(Hash)是使用大括號作為定義:

irb(main):026:0> eat_hash = {}
=> {}
irb(main):027:0> eat_hash[0] = "Mcdonald's"
=> "Mcdonald's"
irb(main):028:0> eat_hash[1] = "KFC"
=> "KFC"
irb(main):029:0> eat_hash[2] = "BUG King"
=> "BUG King"
irb(main):030:0> eat_hash[3] = "MOS BUG"
=> "MOS BUG"
irb(main):031:0> eat_hash
=> {0=>"Mcdonald's", 1=>"KFC", 2=>"BUG King", 3=>"MOS BUG"}

你也可以這樣寫:

irb(main):032:0> eat_hash = {0=>"Mcdonald's", 1=>"KFC", 2=>"BUG King", 3=>"MOS BUG"}
=> {0=>"Mcdonald's", 1=>"KFC", 2=>"BUG King", 3=>"MOS BUG"}

和陣列不同的是,雜湊陣列不需要從 0 開始。

而且雜湊陣列的特性是可以用不是數字的變數作為索引,其中最常用的索引是字串索引,舉例來說:

irb(main):033:0> kamigo = {}
=> {}
irb(main):034:0> kamigo['Q'] = 'A'
=> "A"

而這就是卡米狗學說話的核心原理。

卡米狗有一個很大的雜湊陣列,當有人教卡米狗說話時,我就會將關鍵字和要回應的內容儲存到雜湊陣列裡,像這樣:

kamigo[關鍵字] = 要回應的內容

之後任何人說話,我就會去檢查 kamigo[關鍵字] 是不是有值,如果有值的話卡米狗就會做出回應。

講到這,應該就知道為什麼索引可以用變數代換是一件很重要的事情了吧?


上一篇
第十二天:從瀏覽器認識 HTTP 協定
下一篇
第十四天:最基本的 Rails 運作流程
系列文
只要有心,人人都可以做卡米狗33

尚未有邦友留言

立即登入留言