第一章:認識 Ruby

其實過份強調 Ruby 是一種物件導向語言並不是什麼好事情, 因為物件導向設計的三大特性(封裝、繼承、多型) 至今都還存在著若干爭議, 特別是繼承的討論, 造成「物件導向」至今仍存在著混沌面. 不過那都是細節部分, 如果只是想要單純的講求方便, 物件導向的這些基本特性確實擁有很多方便性. 因此在這整份參考資料裡, 我們並不對於 OO 是什麼樣子有所評論, 而是用一些已經公認的觀念, 以及 Ruby 本身的規則進行陳述.

哪一種語言?

Ruby 官方定義 Ruby 是一種「快速而簡易的直譯命令稿式物件導向語言」 (Interpreted Scripting Language for Quick And Easy Object-Oriented Programming) 稍嫌囉唆了點. 不過這也告訴了我們 Ruby 的特性:

  • 直譯命令稿 (Interpreted Scripting)

    1. 直譯代表了程式碼將不被編譯, 而是直接透過直譯器執行
    2. 承襲命令稿式語言的最大特點: 強大的字串處理能力
    3. Regular Expression 的支援
    4. 使用直譯器, 在開發時遇到錯誤會將原因直接告知開發者
  • 快速而簡易

    1. 變數不需要定義
    2. 變數並非資料型態, 不太需要考慮到溢位 ( Overflow ) 等較低階的問題
    3. 文法單純一致, 容易學習卻不容易犯錯
    4. 記憶體管理由 Ruby 本身控制, 使用者可以專心在想要開發的功能上, 而不需要對記憶體作管理的動作
  • 物件導向程式設計 ( Object-Oriented Programming )

    1. 四海之內皆物件
    2. 充滿了類別和繼承 ( 可以一次看個夠 )
    3. 獨立方法 ( Singleton Methods )
    4. 可與模組交替應用
    5. Ruby 的最大特點: 可用特定物件輕易地進行流程控制、程序控制, 甚至是很讓程式設計師頭痛的執行緒 ( Thread ) 控制

Hello, Ruby!

什麼? 又是 Hello, world! 唉, 我好難過, 你一定沒有看上一章就跳來這邊了對不對. 不是的, 這裡我們要來介紹 Ruby 的幾個基本模式. 別以為這不重要, 熟知 Ruby 的基本操作, 它將不只會是一個直譯器, 還會是你生活的好幫手呢! 雖然他目前應該沒辦法幫你養牛就是了.

$ ruby -v

那個… 裡面的 $ 是代表命令提示字元, 請千萬別打 $ 字號上去啊!

執行結果: 
$ ruby -v
ruby 1.8.2 (2004-12-25) [i386-freebsd5]

其實查詢 Ruby 版本是一件重要的事情, 由於它現在尚在開發階段, 有些語法可能會跟舊版不相容, 加上可能會有些 Bug 需要更新漏洞, 所以請務必要時常更新 Ruby 並留意最新動態.

#!/usr/local/env ruby
#[filename.rb] 
puts 'Feed the cow!'

$ ruby filename.rb
Feed the cow!

第一章的介紹, 所有的程式檔案都可以這樣執行, 也是 Ruby 最常被使用的模式. 嗯? 我們家真的養了一頭牛耶……

$ ruby -e 'puts rand(45)+1'
37

颱風天在家閒得發慌, Ruby 擠了牛奶等你一起共進晚餐, 正要開動時才想到, 樂透就要開獎了! 離投注截止時間只剩下十分鐘, 平常 Ruby 會吃下一整個程式檔案然後慢慢消化, 不過今天情況緊急, 你請他趕快幫你想個號碼, 於是他在 1~45 的號碼中他選了 37, 就這樣你很高興的去投注了, 結果發現只有一個號碼是沒用的, 於是你鎩羽而歸, 然後糗得要死. 這就是 ruby -e 的作用, 它可以讓你只執行一小段程式碼, 幫助您解決生活上的小問題.

注意事項

使用產品時最怕看到的就是注意事項了, 裡面總是寫著一些不堪入目的可能狀況, 像是生髮水會請您小心長頭髮, 礦泉水可能會要我們注意沉澱物, 還會請我們安心飲用這些沉澱物等等; 相較之下 Ruby 的注意事項似乎沒有這麼嚇人, 頂多是請您停止散布該軟體, 有些話我們總是希望說在前頭 ( 雖然這已經算是第二章 ):

  1. 新生的紅寶石
    松本行弘 (Matsumoto Yukihiro) 先生, 網路上慣用 ID 為 Matz, 在 1995 年時發表了 Ruby, 創造者不是歐美人, 這與一些知名的程式語言不同. 而後出版了下列兩本書:

    其中 The Ruby Programming Language 一書成為聖經本, 在 Ruby-doc 官方網站中也可以找到其電子書. 由於 Ruby 至今 (2006) 也才發展十年左右, 創造者也才年近不惑, 因此也許哪天在高爾夫球場上看到 Matz 先生揮杆, 也不要覺得意外.

  2. 來勢洶洶的挑戰者
    近年來 Ruby 開始受到各界矚目, 並討論它將如何挑戰現有的語言, 沒錯, 他帶來了一些前所未有的概念, 期望可以改善人類生活 ( 例如養牛之類的 ), 但是正因為 Ruby 屬於變革的里程碑, 可能挑戰現有的設計原則 ( Design Principle ) 所以若是硬要將現有程式改成 Ruby, 反而會帶來意想不到的後果.

    因此個人在此希望 JAVA 使用者不用太過緊張, Ruby 確實帶有挑戰的意味, 跟十年前 JAVA 挑戰 C++ 一樣. 不過紅寶石有他的光澤與美好, 但縱使它亮麗奪目, 爪哇咖啡還是可以照喝的.

  3. 版權
    這個就傷腦筋了, 談到自由軟體大家都很快樂, 因為不用花錢, 想取得又很容易, 但是一提到 GPL 就面如死灰, 了無生趣, Ruby 在此提供了一些解決方案, 如果你只是拿 Ruby 來寫程式的話不會出什麼問題, 拿出去賣也無所謂, 也就是說: Ruby 財產權依然歸屬 Matz 先生, 但原則上同意您將用 Ruby 寫的程式連同 Ruby 直譯器一起出售, 只要不要更動到 Ruby 本身的程式碼, 就沒有問題.

    以上版權解釋僅供參考, 請詳見 Ruby 授權條約原文, 若因本文件解釋有誤致使他人產生法律問題, 本人將不負任何責任.

Posted by Ruby@Taiwan on Monday, July 30, 2007