Chiayin's blog

【Ruby】程式語言中「符號(Symbol)」的介紹

字數統計: 952閱讀時間: 3 min
2022/10/30

在 Ruby 的世界裡,幾乎什麼東西都是物件,即使是看起來很單純的數字,事實上它也是一個數字物件,本篇文章我們就來認識 Ruby 的符號(Symbol)

一、Ruby 世界裡的符號(Symbol)是什麼

可以想成「符號=有被命名的物件( an object with a name )」,屬於「值或物件」的概念( 符號==值(or物件) ),而非「變數」的概念( 符號!=變數 )。

  1. 跑程式碼會出現以下:
    「p :hello」跑出來「:hello」;「p 2」跑出來「2」。

  2. 「變數成立」的成功寫法:「x=”小松菜奈”」

  3. 「非變數不成立」的錯誤寫法:「2=”小松菜奈”」、「 :hello=”小松菜奈”」

舉例來說,今天我們創造一個物件,將他命名為「小松菜奈」,透過程式碼寫出來長這樣「:小松菜奈」,這就是「==符號==」。這個物件(值)為「小松菜奈」,我們不能代入「大塚愛」或「松嶋菜菜子」,讓小松菜奈變成另外兩種物件,這樣是不可以的。

PS:「變數」與「值」的分辨

  1. 變數(Variable)。
  2. 數學的角度來看,變數是指沒有固定的值,可以”改變的數”。這些變數通常使用英文字母或拉丁字母表示,Ex: x、y、z……等,大多數人在國中數學課的「二元一次方程式」與變數初次見面。
  3. 在程式設計中,變數(英語:Variable,scalar)是指一個包含部分已知或未知數值或資訊(即一個值)之儲存位址,以及相對應之符號名稱(識別字)。

在程式設計中,變數的值不一定要為方程或數學公式之一部分。程式設計中的變數可使用在一段可重復的程式:在一處賦值,然後使用於另一處,接著在一次賦值,且以相同方式再使用一次(見疊代)。程式設計中的變數通常會給定一個較長的名稱,以描述其用途;數學中的變數通常較為簡潔,只給定一、兩個字母,以方便抄寫及操作。

  1. 值(Value)
    是一無法進一步求值的表達式。[1]例如,表達式「1 + 2」不是一個值,因為它可以被化簡為表達式「3」。表達式「3」不能夠繼續化簡,因此它是一個值。

  2. 小結
    「變數」:可代入、內容物可變動。
    「值/物件」:不可代入、不可修改、已經塑造好的個體,不可變動。

二、符號、數字、字串?

  1. 符號、數字、字串的認識:
    看起來相像的三個物件,讓我們透過表格來了解他們的差異。

  2. 「符號」與「字串」的差別:
    (1) 「符號」不可以變動;「字串」可以改變
    (2) 「字串」的效能比「符號」差一點點。

1
2
3
4
舉例 1:
name="abcdefg"
name[1]="x"
p name

程式碼跑出來:axcdefg

1
2
3
4
舉例 2:
name=:abcdefg
name[1]="x"
p name

程式碼跑出來出現錯誤訊息:undefined method

1
2
舉例 3:
利用「object_id」在「物件」的空間印出Ruby序號(也可當作記憶體的位置),每次印都會出現不同的序號。

1
2
舉例 4:
利用「object_id」在「:符號」的空間印出Ruby序號,出現過一次後,在Ruby的空間取得一個ID,都會使用同一個。

三、結論:寫程式該選則「字串」還是「符號」

情境一:當你寫的資料不可變,選擇符號
情境二:當你寫的資料需要有多變使用方法,例如:排序、翻轉……等,選擇字串

不同的情境選用不同的物件,讓你在寫 Ruby 時更加上手唷!
謝謝觀看。

四、參考資料

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

發佈日期:2022-10-30

更新日期:2022-10-30

CATALOG
  1. 1. 一、Ruby 世界裡的符號(Symbol)是什麼
    1. 1.1. PS:「變數」與「值」的分辨
  2. 2. 二、符號、數字、字串?
  3. 3. 三、結論:寫程式該選則「字串」還是「符號」
  4. 4. 四、參考資料