Chiayin's blog

【2020 12th鐵人賽】Ruby名詞解釋總匯 - Day 5 : Ruby中的「數字、符號」

字數統計: 1.1k閱讀時間: 4 min
2022/10/30

https://ithelp.ithome.com.tw/upload/images/20200912/20129424kGV2BMklLi.jpg

數字:整數 Integer、浮點數 Float

*英文發音
首先來聽聽英文發音~。

整數 Integer
Yes

浮點數 Float
Yes

名詞解釋

數字型別包含:

  • 整數 Integer:可數的,EX:1,2,3,4,5……。
  • 浮點數 Float:小數點,EX:3.33。

Ruby世界的數字?

因為Ruby是物件導向的程式語言,大多數看到的皆是「物件」,肉眼看起來像數字外觀的數字也是物件的一種唷。

△肉眼觀世間,曖昧難辨

1
2
puts 1 + 2
印出來 -> 3

以上看起來簡簡單單的加法運算,但其實加號在Ruby中只是一般的方法(method),省略了小括號。

原來的樣子應該是如下:

1
2
puts 1.+(2)
印出來 -> 3

這個加號,事實上是「數字物件 1」呼叫了「+」這個方法,並且把「數字物件 2」當做參數傳進去。也因為他是一個方法,所以也可以重新改寫它原來的功能,讓 1 + 1 不等於 2 都是有可能的。

浮點數轉整數

1
2
3
4
puts 3.33.round #轉成整數,四捨五入
puts 3.33.floor #轉成整數,無條件捨去
puts 3.33.ceil #轉成整數,無條件進位
puts 3.33.to_i #小數轉整數,無條件捨去

型別轉換 Conversions

字串可以使用以下轉型方法:

1
2
3
4
to_i: 轉整數
to_f: 轉浮點數
to_sym: 轉符號
to_s: 轉字串

如下範例:

1
2
3
4
p "169.99cm".to_f   # 169.99
p "169.99cm".to_i # 169
p "169.99cm".to_sym # :"169.99cm"
p :169cm.to_s # "169cm"

整數除法

因為Ruby是物件導向程式語言,看過去的東西大多為物件,因此在Ruby世界裡面,整數除以整數會得到整數10/3 == 3

*那要如何得到小數點?

除數或被除數其中一個改小數點即可!

1
2
3
10.0/3 == 3.333333
10/3.0 == 3.333333
10.0/3.0 == 3.333333

符號 Symbol

*英文發音
首先來聽聽英文發音~。
https://youtu.be/EJg47hnavNM

名詞解釋

在了解符號之前,先來加深「物件」的概念。在Ruby的世界裡,看到的大多是物件,如以下:

  • 1000:數字物件
  • "World peace":字串物件
  • :vegan:符號物件

由以上可以得知,「符號 Symbol」使用冒號:開頭,他類似一種無法修改的字串,我們會說他是「有名字的物件 an object with a name」。

要注意的是,「符號」不是「變數」,是值,本身不會只向任何東西。

1
2
3
4
5
# 「變數」可以指向
say = "hello world!"

# 「符號」不可以指向
:say = "hello world!" -> 會出錯!

*那字串跟符號哪裡不一樣?
字串的效能會比符號差了一點點,兩者最主要的差異在於「記憶體的管理方式」,由於 Ruby中的每個字串都是新的物件,所以即使是相同的字串也會佔用不同的記憶體,而符號則是重復利用:

1
2
3
4
puts "string".object_id # 2157007700 <- 不同記憶體位置
puts "string".object_id # 2157007540
puts :symbol.object_id # 391528 <- 相同的記憶體位置
puts :symbol.object_id # 391528

*不可變(immutable)的特性?
符號具有不可變的特性,字串可以改變值,符號不行。
可由以下例子得知:

1
2
3
4
5
6
7
name = "abcde"
name[3] = 4
p name -> "abc4e"

name = :abcde
name[3] = 4
p name -> undefined method `[]=' for :abcde:Symbol (NoMethodError)

*符號的功用是什麼呢?
因為以上的特性,讓符號在Ruby中主要用作hash的鍵(key)或者是用來指稱方法的名稱。

1
hash = {:key => "12345", :symbol => "string"}

總整理

  1. immutable:被建立後就不能改變。
  2. 任何「符號」都指稱到同一個記憶體位置,因此較省記憶體。
  3. 以「符號」當作鍵(key)的效能會比「字串」當作鍵的效能來得好。

回家作業

請回答以下問題:

1
2
3
4
5
6
7
1.請問符號是什麼?跟變數一樣嗎?
2.字串嵌入 String interpolation是什麼?如何實作?
3.請寫出以下p後會印出什麼?
p 3.30393.floor
p 1.33.to_i
p :hello.to_s

參考資料

本文於 2020-09-12 發表在舊網站。

發佈日期:2022-10-30

更新日期:2022-10-30

CATALOG
  1. 1. 數字:整數 Integer、浮點數 Float
    1. 1.1. 名詞解釋
      1. 1.1.1. Ruby世界的數字?
      2. 1.1.2. 浮點數轉整數
      3. 1.1.3. 型別轉換 Conversions
      4. 1.1.4. 整數除法
  2. 2. 符號 Symbol
    1. 2.1. 名詞解釋
    2. 2.2. 總整理
  3. 3. 回家作業
  4. 4. 參考資料