Bagaimana jika kita ingin mengatakan “Hello” sekaligus banyak tanpa
membuat jari dan tangan kita semua kelelahan? Kita perlu mendefinisikan
sebuah *method*!

<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">hi</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="ss">:hi</span></code></pre></figure>

Kode `def hi` memulai definisi suatu *method*. Kode tersebut berkata pada
Ruby bahwa kita sedang mendefinisikan sebuah *method*, yang bernama `hi`.
Baris selanjutnya adalah *body* (badan) *method*, baris yang sama seperti
yang sudah kita lihat sebelumnya: `puts "Hello World"`. Baris terakhir
`end` memberi tahu Ruby bahwa kita sudah selesai mendefinisikan metode.
Ruby merespons `=> :hi` yang mana memberi tahu kita bahwa kita sudah selesai
mendefinisikan *method*. Respons bisa jadi `=> nil` pada Ruby 2.0 dan versi
sebelumnya. Tetapi, ini bukanlah hal yang penting di sini. Mari kita lanjut.

## Ringkasan, Kehidupan Berulang-ulang dari Sebuah Method

Sekarang mari kita coba menjalankan *method* tersebut berulang kali:

<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">hi</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">hi</span><span class="p">()</span>
<span class="go">Hello World!
</span><span class="p">=&gt;</span> <span class="kp">nil</span></code></pre></figure>

Nah, mudah bukan? Pemanggilan *method* di Ruby memang semudah menyebut
nama *method* yang bersangkutan. Jika *method* tidak menerima
parameter berarti memang itu saja yang Anda butuhkan. Anda bisa
menambahkan tanda kurung jika Anda suka, tetapi tanda kurung tersebut
tidak diperlukan.

Bagaimana kalau kita ingin mengatakan *hello* ke satu orang, tetapi bukan
ke seluruh dunia? Caranya, Anda tinggal mendefinisikan ulang *method* `hi`
agar menerima `name` sebagai parameter.

<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">hi</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="ss">:hi</span>
<span class="gp">irb(main):018:0&gt;</span><span class="w"> </span><span class="n">hi</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>

Sukses… tetapi coba kita lihat dulu sebentar apa yang terjadi disini.

## Variabel dalam Sebuah String

Apa itu tadi artinya `#{name}`? Tanda pagar dan kurung kurawal tadi
adalah cara Ruby untuk menyisipkan sesuatu ke dalam sebuah *string*.
Jadi objek di antara kurung kurawal menjadi sebuah *string*
(jika belum berbentuk String) kemudian diganti dengan string di luar
kurung kurawal tersebut. Anda juga bisa menggunakan tanda pagar dan
kurung kurawal ini untuk memastikan nama seseorang telah diubah menjadi
kapital huruf depannya (*capitalized*):

<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">hi</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="ss">:hi</span>
<span class="gp">irb(main):022:0&gt;</span><span class="w"> </span><span class="n">hi</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">hi</span>
<span class="go">Hello World!
</span><span class="p">=&gt;</span> <span class="kp">nil</span></code></pre></figure>

Ada beberapa trik yang bisa dilihat di sini. Trik pertama, kita panggil *method*
tanpa menggunakan tanda kurung lagi. Jika sudah jelas apa yang Anda lakukan,
maka tanda kurung boleh dihilangkan (opsional). Trik lainnya adalah
menggunakan *default parameter* `World`. Jadi apa yang *method* `hi` katakan
adalah “Jika parameter name tidak ada, maka gunakan default name
yaitu `"World"`”.

## Hello World Berkembang Menjadi Penyapa

Bagaimana jika kita ingin membuat penyapa, yang mengingat nama Anda dan
menyambut serta selalu memperlakukan Anda dengan hormat. Anda akan membutuhkan
sebuah objek untuk ini. Mari kita buat sebuah kelas “Greeter”.

<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="ss">:say_bye</span></code></pre></figure>

*Keyword* baru di sini adalah `class`. *Keyword* ini mendefinisikan kelas
baru yang disebut Greeter dan beberapa *method* untuk kelas tersebut.
Perhatikan juga `@name`. Ini adalah variabel objek, yang tersedia
di semua *method*. Seperti yang bisa Anda lihat, variabel objek `@name`
digunakan pada *method* `say_hai` dan `say_bye`.

Lalu, bagaimana cara menjalankan kelas Greeter? [Membuat sebuah objek](../3/).
