iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
1
自我挑戰組

毫無基礎學習 Ruby on Rails 的 甘苦心得系列 第 5

DAY5 變數與常數 有點深 又不會太深的探討

  • 分享至 

  • xImage
  •  

變數種類

https://ithelp.ithome.com.tw/upload/images/20190919/20118842sTVmqGiL3r.png

虛擬變數(Pseudo Variable)
除了上述這幾款變數外,Ruby 還有一種稱之虛擬變數(Pseudo Variable)的東西,這是在 Ruby 內部定義的,例如 nil、self、true、false,虛擬變數通常有特別的用途或意義,內容不能被改變。

false = "abc"   # => 發生 Can't change the value of self 錯誤
nil = "hi,ruby"   # => 發生 Can't assign to true 錯誤

變數預設值
沒有初始化的全域變數以及實體變數的預設值是 nil,但一般的區域變數是沒有預設值的:

  p @age  # => nil
  p $age  # => nil
  p age   # => 發生 undefined local variable or method 錯誤

有效範圍
這些變數的有效範圍(scope)都有些差別。以全域變數來說,都可以用,但沒事不要亂用全域變數,可能會造成自己或其它人的困擾。區域變數的作用範圍舉個例子如下:

def say_hello
    name = "宅男"
    puts "hi, 我是#{name}"
end

say_hello     # => 印出 "hi, 我是宅男"
puts name     # => 發生變數找不到的錯誤

可以看到在 say_hello 這個方法裡,定義了name,當我們呼叫say_hello這個方法時,name有被讀取到,然後印出
"hi, 我是宅男",但當我們在外部想要印出 name 的時候 會出錯 因為name是定義在方法裡 外部沒辦法讀取

變數
在 Ruby 使用變數,不需要特別宣告或是指定型態,直接定義就可以了。在變數命名規則上,常見會使用英文字母、數字或底線的組合。或是非英文字母也可以,例如:

my_name = "kai"
age = 16
姓名 = "宅男"

常數
常數用起來其實跟變數差不多,也不需要特別宣告它是常數,但在 Ruby 對常數有特別的命名規定,就是「常數必須要是大寫英文字母開頭」,例如:

ExchangeRate = 0.16
Name = "kai"

所有的類別、模組的命名都必須是常數,要特別注意的是,其他程式語言裡,常數通常是不可被修改的,但在 Ruby 的常數的內容是可以修改而且不會發生錯誤(但會出現警告 程式仍然可執行):

MyName = "kai"      # => kai

上一篇
DAY4 變數(variable)與常數(Constant)是什麼?
下一篇
DAY6 數字
系列文
毫無基礎學習 Ruby on Rails 的 甘苦心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言