2018/1/1
第十三天:認識 Ruby 的資料型態( 2018 iT邦幫忙鐵人賽-只要有心,人人都可以作卡米狗 )
markdown
今天要來學寫程式囉,今天就只講資料型態的部分,想要一天學完全部,我怕你的腦子會爆炸,畢竟在學校的話,這是一學期的課程。我們慢慢來就好,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[關鍵字]` 是不是有值,如果有值的話卡米狗就會做出回應。
講到這,應該就知道為什麼索引可以用變數代換是一件很重要的事情了吧?
訂閱:
張貼留言 (Atom)
1 則留言:
為啥不喜歡這麼多= =
張貼留言