Se vogliamo dire “Ciao” molte volte senza stancarci troppo le dita?
Dobbiamo definire un metodo!

<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">c</span>
<span class="gp">irb(main):011:1&gt;</span><span class="w"> </span><span class="nb">puts</span> <span class="s2">"Ciao Mondo!"</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>

Il codice `def c` apre la definizione del metodo. Non fa altro che dire
a Ruby che stiamo definendo un metodo, il cui nome è `c`. La linea
successiva è il corpo, la stessa linea che abbiamo visto in precedenza:
`puts "Ciao Mondo"`. Infine l’ultimo `end` dice a Ruby che abbiamo
finito la definizione del metodo. La risposta di Ruby `=> nil` significa
che ha capito che abbiamo finito la creazione del metodo.

## Chiamare un metodo più volte

Ora proviamo questo metodo più volte:

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

Bene, fino a qui è facile. Chiamare un metodo in Ruby è semplice, basta
scrivere il suo nome. Se il metodo non ha bisogno parametri, questo è
tutto ciò che hai bisogno di fare. Se preferisci puoi anche aggiungere
delle parentesi vuote, ma non sono necessarie.

E se vogliamo dire “ciao” ad una sola persona e non a tutto il mondo?
Basta ridefinire `c` in modo che accetti “nome” come parametro.

<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">c</span><span class="p">(</span><span class="n">nome</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">"Ciao </span><span class="si">#{</span><span class="n">nome</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">c</span><span class="p">(</span><span class="s2">"Matz"</span><span class="p">)</span>
<span class="go">Ciao Matz!
</span><span class="p">=&gt;</span> <span class="kp">nil</span></code></pre></figure>

Così funziona… ma diamo un’occhiata a cosa sta succedendo.

## Convertire variabili in stringhe

Che cosa è `#{nome}` ? Questo è un modo per inserire qualcosa in una
stringa. Quello che è contenuto nelle graffe viene convertito in una
stringa (se non lo è già) e sostituito col valore a cui fa riferimento.
Puoi anche utilizzare questa strada per essere sicuro che un nome abbia
le iniziali maiuscole:

<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">c</span><span class="p">(</span><span class="n">nome</span> <span class="o">=</span> <span class="s2">"Mondo"</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">"Ciao </span><span class="si">#{</span><span class="n">nome</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">c</span> <span class="s2">"chris"</span>
<span class="go">Ciao 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">c</span>
<span class="go">Ciao Mondo!
</span><span class="p">=&gt;</span> <span class="kp">nil</span></code></pre></figure>

Ci sono molte altre cose che puoi fare in questo modo. Una è chiamare il
metodo senza le parentesi. Se quello che stai facendo è ovvio, le
parentesi non sono obbligatorie. L’altro esempio riguarda il parametro
di default `Mondo`. Letteralmente significa “Se non viene passato il
campo nome, usa come nome di default `"Mondo"`”.

## Diventare Persone Cordiali

Se vogliamo veramente una “persona” cordiale, che ricorda il tuo nome,
che ti saluta e che ti tratta sempre con rispetto dobbiamo creare un
oggetto. Creiamo quindi una classe chiamata “PersonaCordiale”.

<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">PersonaCordiale</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="n">nome</span> <span class="o">=</span> <span class="s2">"Mondo"</span><span class="p">)</span>
<span class="gp">irb(main):026:2&gt;</span><span class="w">     </span><span class="vi">@nome</span> <span class="o">=</span> <span class="n">nome</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">saluta</span>
<span class="gp">irb(main):029:2&gt;</span><span class="w">     </span><span class="nb">puts</span> <span class="s2">"Ciao </span><span class="si">#{</span><span class="vi">@nome</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">congeda</span>
<span class="gp">irb(main):032:2&gt;</span><span class="w">     </span><span class="nb">puts</span> <span class="s2">"Arrivederci </span><span class="si">#{</span><span class="vi">@nome</span><span class="si">}</span><span class="s2">, a presto."</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>

La nuova parola qui è `class`, essa definisce una nuova classe chiamata
PersonaCordiale ed una serie di metodi. Fai attenzione a `@nome`. Questa
è una variabile d’istanza ed è disponibile a tutti i metodi della
classe. Come vedi l’abbiamo usata in `saluta` e in `congeda`.

Quindi come mettiamo in funzione la nostra classe PersonaCordiale?
[Creare un oggetto.](../3/)
