因為發現昨天在講基礎運算子的時候很多地方需要先知道變數跟資料型別,所以今天趕快來補充一下。真的是越寫會越發現程式語言的每個知識都是環環相扣的,缺一不可,但是學習的順序又很難拿捏。可能就是全部一起看過去,當你在實作的過程中就會發現這一路上所學的會全部串在一起!
變數就像姓名貼紙一樣,可以讓我們簡單的叫出某個資料。就像是一個人會有很多特質,高矮、胖瘦、生理性別、膚色髮色...等,但如果每次要叫一個人就要把她所有特質都叫出來才能"呼叫"那個人,感覺就有點累、有點沒效率吧?所以我們出生的時候,有人會幫我們取名字,長大之後偶爾還會有綽號出現。這個取名的過程就像是變數宣告一樣,把你這個人指定給這個名字,以後只要叫到這個名字就是在說你啦!!!!
通常 Ruby 裡面的變數都是小寫英文字或 _
開頭,不過你如果要用中文或 Emoji 來當變數名稱也是可以的,只是會有點... 奇妙。 BUT!!! 在 Ruby 裡面變數是不能用數字開頭的。變數的命名是一門大學問,通常要注意可讀性,要把讀你的 Code 的人想像成對這個專案完全沒有背景的人,如果他也能看懂的話就代表是個好懂的 Code。
還有個很重要的東西忘了提!那就是在 Ruby 裡面英文大小寫是不一樣的唷!
> aBc = 123
=> 123
> aBc
=> 123
> abc
NameError (undefined local variable or method `abc' for main:Object)
昨天有說過我們在宣告變數的時候用的是一個等號,等號的左邊就是那個"名字",等號的右邊就是你想要連結的資料。
像是:a = 123
就是把 123 這串數字指定給 a 這個變數,所以你下次呼叫 a 的時候就會跑出 123 囉。
Ruby 裡的變數可以簡單地分成四種:
就我目前的觀察,在寫 Ruby on Rails APPs 剛開始最容易碰到的是前面兩個,後面兩個可能要等我功力比較高深之後才會慢慢碰到吧。
這四種變數最大的差異就是作用的範圍,
區域變數(英文其實是"當地"變數?)顧名思義就是只能在你那個小區域裏面作用,像是之後會提到的類別或方法的 block 裡面,如果還沒宣告就直接呼叫的話,會跳出NameError (undefined local variable or method 'l' for main:Object)
的命名錯誤。
實體變數則是可以存活在你新建了的一個類別實體裡面,另外如果你在還沒宣告實體變數的狀況下呼叫的話,會回傳 nil (空值,之後會提到)
(關於類別跟實體只能留待後面解釋,所以類別變數在這邊就先跳過)
全域變數就是照字面上說的一樣在哪裡都可以用啦!但是建議不要輕易使用全域變數,很容易就會造成汙染或是讓整個環境變得非常複雜。全域變數也是在還沒宣告的狀況下呼叫會回傳 nil 的。
Ruby 的資料型別可分為下面幾種
> 0.1 + 0.2
看會得出什麼結果。" "
包起來的資料,所以 "123"
也是屬於字串而不是數字喔!true
跟 false
[ ]
包起來的一串東西,具有順序性,不同的項目要用逗號隔開,
,裡面可以是各種資料,甚至可以是另一個陣列> a = []
> b = [123]
> c = [123, "123", "abc"]
> d = [123, 123, 123]
> e = [nil, 123, [1, 2], {abc: 123}, :abc, true]
> 以上都是可以的唷
{ }
包起來的一串東西,裡面會有 key 跟 value 的組合,key 會是符號或是字串, value 則是各種資料型別都可以,key 跟 value 會用 =>
來隔開,但是 Ruby 現在的版本讓我們可以比較直覺方便的宣告 Hash,所以可以直接用 :
來隔開,就會有一樣的效果> a = {:abc => 123}
> b = {abc: 123}
> c = {a: 1, b: 2}
> d = {"abc" => 123, "def" => [1, 2, 3], "g" => nil, "e" => true}
> e = {abc: 123, def: 123, g: nil, e: true}
其中要注意用符號當 key 跟用字串當 key 是代表不同意思的。另外在宣告時如果是用 {"abc": 123}
則 key 會直接從字串轉換成符號。還有 Hash 裡面的 key value 組合是沒有順序性的。
:
開頭的就是符號,像是 :abc
, :good
這種資料,Hash 的 Key 通常也會選擇使用符號另外值得一提的是在 ruby 裡面,會被當作 false
的就只有 false
本身還有 nil
,其他所有資料都會被當作 true
(不管是空字串、空陣列、空雜湊都是真的啦!都是存在的啦!)(是不是覺得我瘋了?)
> nil == "" # false
> nil == [] # false
> nil == {} # false
開始真正進入 Ruby 之後就發現之前很像真的學了一些東西,然後真的是環環相扣環環相扣扣扣扣扣啊!!!!! 寫到一半都會發現:啊,這個也要寫一下,啊,那個很像不解釋這邊會變很奇怪,那就等我繼續讓文章們堆疊出來之後再來做整理了... 如果有哪裡說錯的歡迎留言給我跟我說,畢竟我也還是個孩子啊!