Permalink
Browse files

Use 方法 instead of 函式 for method

  • Loading branch information...
1 parent 3705811 commit 06d78ea7e0235cf8f5a4f05acc89bc0c398b32d7 @ihower ihower committed Jul 30, 2010
@@ -1,4 +1,4 @@
-如果您想說很多次 "Hello",卻不想敲太多按鍵。是時候定義一個函式了!
+如果您想說很多次 "Hello",卻不想敲太多按鍵。是時候定義一個方法了!
<notextile><r:code>
irb(main):010:0> def h
@@ -7,11 +7,11 @@ irb(main):012:1> end
=> nil
</r:code></notextile>
-從 @def h@ 開始定義一個函式。它告訴 Ruby 函式名字是 @h@。下一行是函式的內容,也就是我們之前看過的 @puts "Hello World"@。接著最後一行 @end@ 表示函式定義結束。 Ruby 回應 @=> nil@ 告訴我們它知悉了這個函式定義
+從 @def h@ 開始定義一個方法。它告訴 Ruby 方法名字是 @h@。下一行是方法的內容,也就是我們之前看過的 @puts "Hello World"@。接著最後一行 @end@ 表示方法定義結束。 Ruby 回應 @=> nil@ 告訴我們它知悉了這個方法定義
-h2. 這個簡短可以反覆執行的函式
+h2. 這個簡短可以反覆執行的方法
-現在來試試看執行這個函式數次
+現在來試試看執行這個方法數次
<notextile><r:code>
irb(main):013:0> h
@@ -22,9 +22,9 @@ Hello World!
=> nil
</r:code></notextile>
-簡單吧。在 Ruby 中呼叫函式只要輸入函式名字就可以了。如果函式不需要參數,那麼括號可以省略。你也可以加上空括號,但不是必要的。
+簡單吧。在 Ruby 中呼叫方法只要輸入方法名字就可以了。如果方法不需要參數,那麼括號可以省略。你也可以加上空括號,但不是必要的。
-如果你只想對某個人打招呼呢? 只要重新定義 @h@ 函式接受一個參數即可
+如果你只想對某個人打招呼呢? 只要重新定義 @h@ 方法接受一個參數即可
<notextile><r:code>
irb(main):015:0> def h(name)
@@ -55,7 +55,7 @@ Hello World!
=> nil
</r:code></notextile>
-這裡還有幾個小訣竅。第一是我們再次省略了函式的括號。如果函式呼叫很簡單,那麼括號建議你可以省略掉。另一個訣竅是參數有預設值 @World@。意思是說 "如果沒有給 name 參數,那麼就使用預設值 @"World"@"。
+這裡還有幾個小訣竅。第一是我們再次省略了方法的括號。如果方法呼叫很簡單,那麼括號建議你可以省略掉。另一個訣竅是參數有預設值 @World@。意思是說 "如果沒有給 name 參數,那麼就使用預設值 @"World"@"。
h2. 發展成 Greeter (接待員)
@@ -76,7 +76,7 @@ irb(main):034:1> end
=> nil
</r:code></notextile>
-新的關鍵字是 @class@。這定義了一個新的類別叫做 Greeter,以及屬於這個類別的函式。注意到 @@name@ 這是一個實例變數,可以在類別裡面的函式中存取到。你可以看到在函式 @say_hi@ 和 @say_bye@ 裡使用了它。
+新的關鍵字是 @class@。這定義了一個新的類別叫做 Greeter,以及屬於這個類別的方法。注意到 @@name@ 這是一個實例變數,可以在類別裡面的方法中存取到。你可以看到在方法 @say_hi@ 和 @say_bye@ 裡使用了它。
如何讓 Greeter 類別動起來呢? 請接著看 "建立物件":../3/。
@@ -26,7 +26,7 @@ h2. 揭開物件的面紗
物件中的實例變數(Instance variables)是隱藏的。雖然可以透過檢查(inspect)物件看到這個變數,不過 Ruby 採用了物件導向的思維(譯註: 即封裝),內部屬性資料基本上是隱藏起來的。
-到底 Greeter 物件有哪些函式呢?
+到底 Greeter 物件有哪些方法呢?
<notextile><r:code>
irb(main):039:0> Greeter.instance_methods
@@ -42,14 +42,14 @@ irb(main):039:0> Greeter.instance_methods
"instance_variables", "instance_of?"]
</r:code></notextile>
-哇。有這麼多。我們不是只定義了兩個函式,怎麼回事呢? 這裡列出的是*所有* Greeter 物件的函式,因此也包括了它所繼承的類別的函式。如果我們只需要 Greeter 自己的函式,可以傳入一個 *false* 參數,表示我們不希望包括父類別的函式
+哇。有這麼多。我們不是只定義了兩個方法,怎麼回事呢? 這裡列出的是*所有* Greeter 物件的方法,因此也包括了它所繼承的類別的方法。如果我們只需要 Greeter 自己的方法,可以傳入一個 *false* 參數,表示我們不希望包括父類別的方法
<notextile><r:code>
irb(main):040:0> Greeter.instance_methods(false)
=> ["say_bye", "say_hi"]
</r:code></notextile>
-看起來好多了。讓我們看看 greeter 物件對哪些函式有反應?
+看起來好多了。讓我們看看 greeter 物件對哪些方法有反應?
<notextile><r:code>
irb(main):041:0> g.respond_to?("name")
@@ -60,7 +60,7 @@ irb(main):043:0> g.respond_to?("to_s")
=> true
</r:code></notextile>
-它知道 @say_hi@ 和 @to_s@ (意思是轉換成字串,這是每個物件都有的函式),但是不知道 @name@ 這個函式
+它知道 @say_hi@ 和 @to_s@ (意思是轉換成字串,這是每個物件都有的方法),但是不知道 @name@ 這個方法
h2. 變更類別,永不嫌晚
@@ -96,7 +96,7 @@ Hi Betty!
=> nil
</r:code></notextile>
-@attr_accessor@ 會定義兩個新的函式,@name@ 用來取值,而 @name=@ 用來給值。
+@attr_accessor@ 會定義兩個新的方法,@name@ 用來取值,而 @name=@ 用來給值。
h2. 可以歡迎任何東西的 MegaGreeter!
@@ -1,6 +1,6 @@
我們來深入看看這個新程式。注意到由井號(#)開頭的第一行,在 Ruby 裡,任何在井號之後的內容都是註解,會被直譯器忽略。除了檔案的第一行是個例外,在 Unix-like 作業系統下這告訴 Shell 如何執行這個檔案。其餘的註解則用來說明程式。
-我們的 @say_hi@ 函式也改變了
+我們的 @say_hi@ 方法也改變了
<notextile><r:code>
# 對每個人說 hi
@@ -22,7 +22,7 @@ end
h2. 循環、迴圈,迭代 (Iteration)
-如果 @@names@ 物件可以回應 @each@ 函式,那表示你可以迭代它,好讓我們輪流對其中的元素打招呼。如果 @@names@ 什麼都不是,我們透過字串內嵌把它轉化成字串,用預設的打招呼方式。
+如果 @@names@ 物件可以回應 @each@ 方法,那表示你可以迭代它,好讓我們輪流對其中的元素打招呼。如果 @@names@ 什麼都不是,我們透過字串內嵌把它轉化成字串,用預設的打招呼方式。
下面來看一看這是怎麼迭代的:
@@ -32,7 +32,7 @@ h2. 循環、迴圈,迭代 (Iteration)
end
</r:code></notextile>
-@each@ 是一個可以接受程式區塊(a block of code)的函式,它會對 @@names@ 裡的每個元素執行這個程式區塊,也就是從 @do@ 到 @end@ 的程式碼。一個程式區塊就像是一個匿名函式,也像是 @lambda@。而在直線 @|@ 符號之間的是這個程式區塊的參數。
+@each@ 是一個可以接受程式區塊(a block of code)的方法,它會對 @@names@ 裡的每個元素執行這個程式區塊,也就是從 @do@ 到 @end@ 的程式碼。一個程式區塊就像是一個匿名方法,也像是 @lambda@。而在直線 @|@ 符號之間的是這個程式區塊的參數。
具體來說就是,程式區塊裡的 @name@ 參數會被輪流指定為容器裡的每個元素,然後執行 @puts "Hello #{name}!"@ 。
@@ -45,11 +45,11 @@ for (i=0; i<number_of_elements; i++)
}
</r:code></notextile>
-這樣也行,只是沒這麼漂亮。你需要一個用過即丟的 @i@ 變數、需要計算容器的長度、檢查離開迴圈的條件。而 Ruby 的方式漂亮多了,所有的工作都被包裝在 @each@ 函式裡。在 @each@ 內部會去輪流呼叫 @yield "Albert"@、@yield "Brenda"@、@yield "Charles"@ 等等。(譯註:yield 的意思是"轉交",也就是跳去執行程式區塊)
+這樣也行,只是沒這麼漂亮。你需要一個用過即丟的 @i@ 變數、需要計算容器的長度、檢查離開迴圈的條件。而 Ruby 的方式漂亮多了,所有的工作都被包裝在 @each@ 方法裡。在 @each@ 內部會去輪流呼叫 @yield "Albert"@、@yield "Brenda"@、@yield "Charles"@ 等等。(譯註:yield 的意思是"轉交",也就是跳去執行程式區塊)
h2. 讓 Ruby 發光發亮的程式區塊(Blocks)
-程式區塊真正厲害的地方是,它可以處理比迭代更複雜的任務。你可以用來設定(setup)、卸載(teardown)和錯誤處理,這些都可以隱藏起來讓函式使用者無需擔心
+程式區塊真正厲害的地方是,它可以處理比迭代更複雜的任務。你可以用來設定(setup)、卸載(teardown)和錯誤處理,這些都可以隱藏起來讓方法使用者無需擔心
<notextile><r:code>
# 向每個人說 bye
@@ -65,7 +65,7 @@ def say_bye
end
</r:code></notextile>
-@say_bye@ 函式沒有用到 @each@,而是檢查 @@names@@ 是不是可以回應 @join@ 函式。如果可以,就呼叫它。不然它就把它當做字串輸出。這個函式並不在乎變數真正的 _型別(type)_,而只關心變數是不是可以回應支援某個函式,這種風格叫做 "鴨子型別(Duck Typing)",意義就是 "如果它走起來像鴨子,叫起來也像鴨子,那就當它是鴨子"。這種思維的好處是它不會被變數的型別所限制。如果有人寫了新的容器類別,並且也實作了 @join@ 這個函式,那麼我們就可以在這裡使用它。
+@say_bye@ 方法沒有用到 @each@,而是檢查 @@names@@ 是不是可以回應 @join@ 方法。如果可以,就呼叫它。不然它就把它當做字串輸出。這個方法並不在乎變數真正的 _型別(type)_,而只關心變數是不是可以回應支援某個方法,這種風格叫做 "鴨子型別(Duck Typing)",意義就是 "如果它走起來像鴨子,叫起來也像鴨子,那就當它是鴨子"。這種思維的好處是它不會被變數的型別所限制。如果有人寫了新的容器類別,並且也實作了 @join@ 這個方法,那麼我們就可以在這裡使用它。
h2. 讓腳本跑起來
@@ -75,7 +75,7 @@ h2. 讓腳本跑起來
if __FILE__ == $0
</r:code></notextile>
-@__FILE__@ 是一個預先定義好的變數,內容是目前這個檔案的名稱。而 @$0@ 是執行這隻程式的執行檔名稱。這個檢查是說 "如果這個檔案就是執行程式的檔案...."。這可以允許將這個檔案當做函式庫使用。也就是說,這個檔案如果當做函式庫使用時,不會執行這段程式。如果當做執行檔執行,就會執行這段程式。
+@__FILE__@ 是一個預先定義好的變數,內容是目前這個檔案的名稱。而 @$0@ 是執行這隻程式的執行檔名稱。這個檢查是說 "如果這個檔案就是執行程式的檔案...."。這可以允許將這個檔案當做方法庫使用。也就是說,這個檔案如果當做方法庫使用時,不會執行這段程式。如果當做執行檔執行,就會執行這段程式。
h2. 就這樣啦
@@ -71,11 +71,11 @@ irb(main):006:0> Math.sqrt(9)
h2. 給程式分類的模組(Modules)
-@Math@ 是一個內建的數學模組。Ruby 的模組有兩種作用。這裡介紹的是第一種:把功能相似的函式放在一起。@Math@ 模組還包括了像是 @sin()@ 和 @tan()@。
+@Math@ 是一個內建的數學模組。Ruby 的模組有兩種作用。這裡介紹的是第一種:把功能相似的方法放在一起。@Math@ 模組還包括了像是 @sin()@ 和 @tan()@。
-接下來介紹點(dot)。這個點是做什麼用的? 這個點是用來告訴接收者(即 Math 模組)一個訊息。什麼訊息呢? 在這個例子,訊息是 @sqrt(9)@,也就是呼叫 @sqet@ 函式,並傳遞 9 作為參數。sqrt 正是 "square root" 平方根的意思。
+接下來介紹點(dot)。這個點是做什麼用的? 這個點是用來告訴接收者(即 Math 模組)一個訊息。什麼訊息呢? 在這個例子,訊息是 @sqrt(9)@,也就是呼叫 @sqet@ 方法,並傳遞 9 作為參數。sqrt 正是 "square root" 平方根的意思。
-這個函式的回傳值是 @3.0@。你可能會發現到這不只是 @3@ 而已,還包括小數點。這是因為大多數的情況開根號不會剛好是整數,所以這個函數總是回傳浮點數。
+這個方法的回傳值是 @3.0@。你可能會發現到這不只是 @3@ 而已,還包括小數點。這是因為大多數的情況開根號不會剛好是整數,所以這個函數總是回傳浮點數。
如果我們想記住運算的結果呢? 指定到一個變數即可。
Oops, something went wrong.

0 comments on commit 06d78ea

Please sign in to comment.