2017年11月12日 星期日

## 作業 005

我認為 Ruby 這個程式語言跟別的程式語言不太一樣的地方

Ruby 是「用於快捷易用物件導向程式設計的直譯式腳本語言」
--這是甚麼意思呢?

直譯式腳本語言 (interpreted scripting language)
Ø 能夠直接產生作業系統呼叫
Ø 強大的字串處理 (string operations) 及正規表示式 (regular expressions)
Ø 在開發時提供即時回饋


快捷易用:
Ø 不需要變數宣告 (variable declarations)
Ø 變數不需要型別 (typed)
Ø 語法簡單一致
Ø 自動管理記憶體


物件導向程式設計:
Ø 任何東西都是物件
Ø 類別、方法、繼承等
Ø 單件方法 (singleton methods)
Ø 模組提供「混入」(mixin) 功能
Ø 迭代器 (iterators) 及閉包 (closures)


以及:
Ø 多精確度整數 (multiple precision integers)
Ø 方便的例外處理 (exception processing)
Ø 動態載入 (dynamic loading)
Ø 執行緒支援 (threading support)

以上資料來源https://guides.ruby.tw/ruby/index.html





Ruby Java程式語言的比較:

1.       Ruby Java程式語言都有引進物件導向的概念
物件(object = 狀態(state + 行為(behavior
物件是根據類別所建立的實體(Instance

不過和 Java不同的是,Ruby 是一款物件化相當徹底的程式語言,在 Ruby裡的東西幾乎都是物件,數字 1、字串hello”,陣列、Hash 都是物件。
2.      Ruby的命名規則用來表示變數與類別的關係
除了上述這幾款變數外,Ruby 還有一種稱之虛擬變數(Pseudo Variable)的東西,這是在 Ruby 內部定義的,例如 nilselftruefalse,虛擬變數通常有特別的用途或意義,內容不能被改變。


Java則需要變數宣告如下:
型態名稱;
型態名稱1, 名稱2, 名稱3
INT textGrade ;
值得注意的是,不能少了;(分號)要不然不能執行程式。

3.      Java程式語言會使用像是 myShoppingCart 之類的方式來命名,稱之駝峰式命名法(Camel Case),在 Ruby 世界的不成文規定,是使用小寫英文字母以及底線來組合變數名稱,例如像是 my_shopping_cart,稱之蛇形命名法(Snake Case)。當然,即使在 Ruby 使用駝峰式命名法來命名,程式碼一樣可以正常運作,只是大部份的 Ruby 開發者都習慣 Snake Case 這樣的風格。

4.      每個Java應用程式由類別(class)組成,至少會含一個自訂類別。

5.      Ruby Java類別的名稱都規定必須是常數,也就是必須是大寫英文字母開頭。

6.      Ruby Java存取模式都主要有publicprotectedprivate三種
Ruby 的類別裡,方法如果沒有特別限制,預設就是 publilc,也就所有的類別都可以存取它。
Java的存取模式都固定寫在class關鍵字前面,
Ruby 的設定在這方面跟其它程式語言不太一樣,
Ruby 的方法存取限制有兩種寫法,一種是寫在方法定義之前:





另一種的方法存取限制是寫在方法定義之後:

7.      動態執行模型,一言以蔽之,就是執行中的程式可以看懂程式本身、進行操作的意思。
這是對程式自身進行操作的程式設計,所以也稱為「metaprogramming」。

RubyJavaScriptmetaprogramming十分自然,查詢某個物件擁有哪些方法、或是在執行時定義新classmethod都是理所當然的事情。
另一方面,Java在需要metaprogramming的時候,必須透過「reflection API」進行。取得class、改寫內容都辦得到,但不像RubyJavaScript那樣自由自在,而比較有「雖然辦得到,但平常用不太到」的感覺。

8.      Ruby的字串是可改變的,這與Java固定不變的字串不同,Java的字串比較像RubySymbol

9.      註解(Comment),程式碼裡的註解,在程式執行的時候會被忽略,註解通常有兩個主要的用途:
  說明這段程式碼的用途。
  讓該行程式碼不執行。
Ruby 使用井字符號 # 做為單行註解的符號,
多行註解則是使用 =begin .. =end
Java 使用兩條斜線 // 做為單行註解的符號,
多行註解則是使用/* .. */

10.    Ruby的繼承功能相當脆弱,儘管Ruby是一個物件導向語言,Ruby內的許多規則,卻使得子類別有可能不小心就覆寫了父類別的功能,在《The Ruby Programming Language》一書中,建議除非程式設計師對一個類別相當了解,否則盡可能不要使用繼承。

我覺得學習程式語言最重要的就是實作,然後多多練習,才能熟能生巧,愈寫愈順愈做愈好。
剛開始學習Java程式語言的時候,我常常會少加上分號逗號括號,導致不能執行程式,那時候我還不會看錯誤訊息,也不知道怎麼找到錯誤,直到教我們程式設計的老師告訴我,原來我少寫了一個符號,沒想到就是這麼一個符號讓我的程式不能動。而學習Ruby程式語言,它比較重視程式的可讀性,沒了那些符號整個程式就像一篇篇的文章,我覺得好讀多了,但它也讓我更感覺到英語學習的重要性。

資料來源
Ruby 使用手冊https://guides.ruby.tw/ruby/index.html
為你自己學 Ruby on Rails  http://railsbook.tw/
Ruby之父談語言設計新潮流https://www.ithome.com.tw/article/94140