Что если мы хотим сказать "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">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>

Код `def hi` означает начало объявление метода. Он говорит Ruby, что мы
определяем метод, имя которого `hi`. Следующая строка – тело метода, та
же строка, что мы видели раньше: `puts "Hello World"`. И, наконец,
последняя строка, `end`, говорит Ruby, что мы завершили объявление
метода. Ответ от Ruby, `=> :hi`, говорит нам, что он понял, что мы
завершили объявление метода. Ответ может быть таким: `=> nil`, в Ruby
версии 2.0 и ниже, но это здесь не важно, поэтому двинемся дальше.

## Кратко о повторяющихся жизнях метода

Теперь давайте попробуем вызвать метод несколько раз:

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

Ну, это было просто. Вызвать метод в Ruby так же просто, как просто
упомянуть его имя в коде. Если метод не принимает параметры – это все
что вам нужно сделать. Вы можете добавить пустые скобки, если вам так
нравится, но это не обязательно.

Что если мы хотим сказать hello одному человеку, а не всему миру?
Просто переопределим метод `hi`, чтобы он принимал имя как параметр.

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

Итак, это работает… но давайте на секунду задумаемся, что здесь
происходит.

## Места для интерполяции в String

Что такое `#{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">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>

Вы должны здесь отметить несколько других приемов. Один из них, что мы
опять вызываем метод без скобок. Если очевидно то, что вы хотите сделать
– скобки не обязательны. Другой прием – это параметр по умолчанию
`World`. Это означает что, "Если имя не передано в качестве параметра,
используй параметр по умолчанию `World`".

## Эволюционируем в Greeter (Приветствующего)

Что если мы хотим создать реального приветствующего, того кто запомнит
ваше имя и поприветствует вас и всегда будет относиться к вам с
уважением? Вы можете использовать для этого объект. Давайте создадим
класс "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>

Новое ключевое слово здесь - `class`. Оно служит для объявления нового
класса, который мы назвали Greeter и несколько методов для этого класса.
Также заметьте `@name`. Это переменная объекта и она доступна для всех
методов в классе. Как вы можете видеть, она используется методами
`say_hi` и `say_bye`.

Итак, как мы сможем заставить этот класс Greeter работать? [Создадим
объект.](../3/)
