empty? nil? blank? <> 聽說今天是滿月?戰鬥力爆表的月亮獅子變身!

[Day23] 加洛特的月亮獅子型態瞬間炸裂全場!

抱歉今天的圖和主題可能關聯性沒這麼強,但選在今天放這張真的再適合不過了!
先祝 IT 邦的各位大大中秋節快樂!


這篇要來繼續弄懂一些自己不是很清楚的東西!
接著我們來比較三個很像的概念

  • empty?
  • nil?
  • blank?

empty?

翻譯:這個是空的嗎?(誰吃完了?)

empty? 是一個用來檢查集合裡是否為空的方法,這裡指的集合包括陣列、雜湊以及字串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 空的陣列
[].empty?
=> true

# 空的雜湊
{}.empty?
=> true

# 空的字串
"".empty?
=> true

# 有東西的字串
" ".empty?
=> false

最後一個 " "empty? 方法檢查後得到 false,原因是字串內含有「空白」這個值,所以並不是真的為空。


nil?

翻譯:我說你,是不存在嗎?(推眼鏡)

一開始學的時候,會覺得 falsenil 很像,後來才發現意思其實差很多。因為 false 代表的是「錯誤」、「假的」,而 nil 則代表「空的」或「不存在」,在其他語言可能是用 null

先把 nil 印出來看看:

1
2
puts nil
=> nil

在 Ruby 裡,所有的物件都不是 nil,而只有 nilnil ,因此在 nil? 方法檢查下:

1
2
3
4
5
6
7
nil.nil?       #true
[].nil? #false
{}.nil? #false
"".nil? #false
" ".nil? #false
"abc".nil? #false
123.nil? #false

nil 一個跟大家不一樣,也太沒人緣了啊!

所以我說,nil 它存在嗎?

這個問法好像在討論哲學議題 :D

nil 在 Ruby 裡其實是真實存在的物件,它只是被用來表示「空的」、「不存在」的概念而已,可以用 nil? 方法來問它是不是 nil (有點詭異)

1
2
nil.nil?
=> true

nil :我就沒存在感了,還特別問我在不在是怎麼樣?當我塑膠膩!

關於 nil 可以參考龍哥的大作 為你自己學 Ruby on Rails ,裡面有更詳細的說明!


blank?

翻譯:沒有帶奇怪的東西進來就行~(睜一隻眼閉一隻眼)

blank? 則是一個較為寬鬆的檢查方法,不管集合內是「真·空」,還是集合內有「空白」,甚至代表不存在的 nilblank? 都可以接受。

1
2
3
4
5
6
7
nil.blank?     #true
[].blank? #true
{}.blank? #true
"".blank? #true
" ".blank? #true
"abc".blank? #false
123.blank? #false

也就是說,前面 empty?nil? 的所要篩選的概念「空的」以及「不存在」,到了 blank? 這裏一律都會回傳 true

blank?:同意啦~哪次不同意~啊等等!有東西的話就真的不行~(追上)


簡單的比較就到這邊啦!是不是覺得似乎有那麼一點更了解了?(正能量上身)

在這邊敬祝大家中秋佳節愉快~