iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
0
Modern Web

關於 Ruby on Rails,我想說的是系列 第 2

[Day 2] 動態型別語言 Ruby

  • 分享至 

  • xImage
  •  

Ruby 是動態型別語言,相對而言 C 跟 Java 是靜態語言。

靜態語言的變數本身帶有型態資訊。以 Java 為例,text 宣告為 String ,就僅可參考 String 實例,若嘗試參考至其它型態,則會引發編譯錯誤:

String text = "programmer";
text = {'p', 'r', 'o'}; // 編譯錯誤

動態型別指的是變數的型別是動態沒有固定的,好處是命名變數時,不需要提供型態資訊,所以可以寫出比較簡潔的程式碼。也因為不用先決定下型態資訊,所以變數的型態是可以改變的,比方說把字串令狐沖指定給區域變數a(區域變數之後會介紹)

a = '令狐沖'

a.class
#=> String    

可以知道這時變數 a 的型別是String(字串)
(本系列文,遇到回傳值一律放在 #=> 後面)

這時,可以改成指定整數1

a = 1

a.class
#=> Integer

型別就變成 Integer (整數)

這種可以改變變數型別的特性,讓 Ruby 工程師可以更有彈性使用變數,不需要思考形態問題,只要思考變數參考的物件有哪些特性,也就是 OOP (物件導向語言)的特性 Duck Type (鴨子型別)。

Duck Type 就是,只要你行為像鴨子,例如會鴨子走路,我就當你是鴨子,實際上妳不是鴨子,我不在意。關於 Ruby 的物件導向特性,之後會再詳細介紹。

你或許會有個疑問:

動態型別很好啊,為什麼還要用靜態型別語言?

靜態型別語言需要檢查型別,好處是可透過編譯器或工具,在程式執行前(編譯時期)就檢查出型態錯誤。
相對的,動態型別的型態錯誤在執行時期才會呈現出來,因為執行到程式碼時才檢查形別,效能表現較不理想,編輯輔助工具較為缺乏,依賴慣例或實體文件來得知API使用方式。

也因為天生的特性,讓 Ruby 的效能不會比靜態語言快,難怪 2019 Ruby Conf TW 幾乎一半的主題都是講如何優化 Ruby 的效能 (雖然我都聽不太懂)


還有28天,穩扎穩打。

就像少林武僧,從羅漢拳,韋陀掌開始,有一定實力才能一窺七十二絕技。

期待看到完賽的自己

上一篇
[Day 1] 緣起
下一篇
[Day 3] Ruby 常數與變數四兄弟(上)
系列文
關於 Ruby on Rails,我想說的是23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言