Co jeśli chcielibyśmy mówić “Hello World” tak aby nasze palce się nie
zmęczyły ? Musimy zdefiniować metodę!

<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>

Kod `def h` rozpoczyna definicję metody. Wskazuje Rubiemu, że
definiujemy metodę, która nazywa się `h`. Następna linia to ciało
metody, ten sam kod, który widzieliśmy już wcześniej: `puts "Hello
World"`. W końcu ostatnia linia `end` mówi Rubiemu, że skończyliśmy
definiować metodę. Odpowiedź Rubiego `=> nil` mówi nam, że zrozumiał to,
że skończyliśmy definiować metodę.

## Krótkie, Powtarzalne Życia Metody

Teraz wypróbujmy uruchomić tę metodę kilka razy:

<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>

No cóż, to było proste. Wywołanie metody w Rubim sprowadza się do
napisania jej nazwy. Jeśli metoda nie przyjmuje żadnych parametrów, to
wszystko czego potrzebujesz. Możesz dodać puste nawiasy, jeśli chcesz
ale nie jest to wymagane.

Co jeśli chcielibyśmy mówić “hello” do konkretnej osoby a nie do całego
świata ? Musimy po prostu przedefiniować `h` aby przyjmowała imię jako
parametr.

<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>

Działa … ale spójrzmy bliżej na to co się tutaj dzieje.

## Holding Spots in a String

Co oznacza ta część `#{name}` ? To sposób w jaki Ruby umieszcza coś w
Stringu. Ta część pomiędzy klamrami jest zamieniana na string (jeśli
jużnim nie jest) i umieszczana wewnątrz otaczającego ją stringa. Możesz
użyć tego sposobu na przykład aby upewnić się, że czyjeś imię jest
drukowane z dużej litery:

<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>

Warto zwrócić tutaj uwagę na kilka innych sztuczek. Jedną z nich jest
to, że wywołujemy metodę bez nawiasów. Jeśli to co robisz jest
oczywiste, nawiasy są opcjonalne. Inną sztuczką jest domyślny parametr
`World`. Oznacza on “Jeśli imię nie jest podane, użyj domyślnej wartości
`"World"`”.

## Ewolucja w Kierunku Klasy Greeter

Co jeśli chcielibyśmy mieć prawdziwą klasę witającą, taką, która
zapamiętuje twoje imię, wita Cię i traktuje zawsze z szacunkiem. Do tego
celu użyjemy obiektu. Stwórzmy klasę “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="kp">nil</span></code></pre></figure>

Nowym słowem kluczowym jest tutaj `class`. Definiuje ono nową klasę
nazwaną Greeter oraz kilka metod tej klasy. Zauważ również `@name`. Jest
to zmienna instancji, która jest dostępna dla wszystkich metod tej
klasy. Używana jest przez metody `say_hi` oraz `say_bye`.

Jak teraz wprowadzić tę klasę w ruch ? [Utwórzmy obiekt.](../3/)
