如果您想說很多次 “Hello”，卻不想敲太多按鍵。是時候定義一個方法了!

<figure class="highlight"><pre><code class="language-irb" data-lang="irb"><span class="gp">irb(main):010:0&gt;</span><span class="w"> </span><span class="k">def</span> <span class="nf">h</span>
<span class="gp">irb(main):011:1&gt;</span><span class="w"> </span><span class="nb">puts</span> <span class="s2">"Hello World!"</span>
<span class="gp">irb(main):012:1&gt;</span><span class="w"> </span><span class="k">end</span>
<span class="p">=&gt;</span> <span class="kp">nil</span></code></pre></figure>

從 `def h` 開始定義一個方法。它告訴 Ruby 方法名字是 `h`。下一行是方法的內容，也就是我們之前看過的 `puts "Hello
World"`。接著最後一行 `end` 表示方法定義結束。 Ruby 回應 `=> nil` 告訴我們它知悉了這個方法定義。

## 這個簡短可以反覆執行的方法

現在來試試看執行這個方法數次：

<figure class="highlight"><pre><code class="language-irb" data-lang="irb"><span class="gp">irb(main):013:0&gt;</span><span class="w"> </span><span class="n">h</span>
<span class="go">Hello World!
</span><span class="p">=&gt;</span> <span class="kp">nil</span>
<span class="gp">irb(main):014:0&gt;</span><span class="w"> </span><span class="n">h</span><span class="p">()</span>
<span class="go">Hello World!
</span><span class="p">=&gt;</span> <span class="kp">nil</span></code></pre></figure>

簡單吧。在 Ruby 中呼叫方法只要輸入方法名字就可以了。如果方法不需要參數，那麼括號可以省略。你也可以加上空括號，但不是必要的。

如果你只想對某個人打招呼呢? 只要重新定義 `h` 方法接受一個參數即可。

<figure class="highlight"><pre><code class="language-irb" data-lang="irb"><span class="gp">irb(main):015:0&gt;</span><span class="w"> </span><span class="k">def</span> <span class="nf">h</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
<span class="gp">irb(main):016:1&gt;</span><span class="w"> </span><span class="nb">puts</span> <span class="s2">"Hello </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">!"</span>
<span class="gp">irb(main):017:1&gt;</span><span class="w"> </span><span class="k">end</span>
<span class="p">=&gt;</span> <span class="kp">nil</span>
<span class="gp">irb(main):018:0&gt;</span><span class="w"> </span><span class="n">h</span><span class="p">(</span><span class="s2">"Matz"</span><span class="p">)</span>
<span class="go">Hello Matz!
</span><span class="p">=&gt;</span> <span class="kp">nil</span></code></pre></figure>

正如預期... 讓我們仔細看看到底發生什麼事情。

## 字串內嵌

什麼是 `#{name}` 啊? 這是 Ruby
用來在字串中插入資料的方式。大括號裡面的程式會被執行後變成一個字串，然後將整個大括號符號替換掉。例如，我們來把人名變成大寫：

<figure class="highlight"><pre><code class="language-irb" data-lang="irb"><span class="gp">irb(main):019:0&gt;</span><span class="w"> </span><span class="k">def</span> <span class="nf">h</span><span class="p">(</span><span class="nb">name</span> <span class="o">=</span> <span class="s2">"World"</span><span class="p">)</span>
<span class="gp">irb(main):020:1&gt;</span><span class="w"> </span><span class="nb">puts</span> <span class="s2">"Hello </span><span class="si">#{</span><span class="nb">name</span><span class="p">.</span><span class="nf">capitalize</span><span class="si">}</span><span class="s2">!"</span>
<span class="gp">irb(main):021:1&gt;</span><span class="w"> </span><span class="k">end</span>
<span class="p">=&gt;</span> <span class="kp">nil</span>
<span class="gp">irb(main):022:0&gt;</span><span class="w"> </span><span class="n">h</span> <span class="s2">"chris"</span>
<span class="go">Hello Chris!
</span><span class="p">=&gt;</span> <span class="kp">nil</span>
<span class="gp">irb(main):023:0&gt;</span><span class="w"> </span><span class="n">h</span>
<span class="go">Hello World!
</span><span class="p">=&gt;</span> <span class="kp">nil</span></code></pre></figure>

這裡還有幾個小訣竅。第一是我們再次省略了方法的括號。如果方法呼叫很簡單，那麼括號建議你可以省略掉。另一個訣竅是參數有預設值
`World`。意思是說 “如果沒有給 name 參數，那麼就使用預設值 `"World"`“。

## 發展成 Greeter (接待員)

如果我們需要一個接待員，可以記住你的名字，並且禮貌地歡迎你。你會開始需要使用物件(object)了。讓我們來建立 “Greeter”
類別(class)。

<figure class="highlight"><pre><code class="language-irb" data-lang="irb"><span class="gp">irb(main):024:0&gt;</span><span class="w"> </span><span class="k">class</span> <span class="nc">Greeter</span>
<span class="gp">irb(main):025:1&gt;</span><span class="w">   </span><span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="nb">name</span> <span class="o">=</span> <span class="s2">"World"</span><span class="p">)</span>
<span class="gp">irb(main):026:2&gt;</span><span class="w">     </span><span class="vi">@name</span> <span class="o">=</span> <span class="nb">name</span>
<span class="gp">irb(main):027:2&gt;</span><span class="w">   </span><span class="k">end</span>
<span class="gp">irb(main):028:1&gt;</span><span class="w">   </span><span class="k">def</span> <span class="nf">say_hi</span>
<span class="gp">irb(main):029:2&gt;</span><span class="w">     </span><span class="nb">puts</span> <span class="s2">"Hi </span><span class="si">#{</span><span class="vi">@name</span><span class="si">}</span><span class="s2">!"</span>
<span class="gp">irb(main):030:2&gt;</span><span class="w">   </span><span class="k">end</span>
<span class="gp">irb(main):031:1&gt;</span><span class="w">   </span><span class="k">def</span> <span class="nf">say_bye</span>
<span class="gp">irb(main):032:2&gt;</span><span class="w">     </span><span class="nb">puts</span> <span class="s2">"Bye </span><span class="si">#{</span><span class="vi">@name</span><span class="si">}</span><span class="s2">, come back soon."</span>
<span class="gp">irb(main):033:2&gt;</span><span class="w">   </span><span class="k">end</span>
<span class="gp">irb(main):034:1&gt;</span><span class="w"> </span><span class="k">end</span>
<span class="p">=&gt;</span> <span class="kp">nil</span></code></pre></figure>

新的關鍵字是 `class`。這定義了一個新的類別叫做 Greeter，以及屬於這個類別的方法。注意到 `@name`
這是一個實例變數，可以在類別裡面的方法中存取到。你可以看到在方法 `say_hi` 和 `say_bye` 裡使用了它。

如何讓 Greeter 類別動起來呢? 請接著看 [建立物件](../3/)。
