# Aiuto primo programmone

**URL:** <https://www.ruby-forum.com/t/aiuto-primo-programmone/243464>\
**Category:** IT\
**Created:** [November 9, 2015, 10:36pm UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464 "2015-11-09T22:36:51Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rafa\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/958977/32.png) [@Rafa\_F](https://www.ruby-forum.com/u/Rafa_F)\
**Post date:** [November 9, 2015, 10:36pm UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/1 "2015-11-09T22:36:51Z")

</div>

Salve a tutti,è la mia prima volta quì (premetto di non aver trovato  
alcun regolamento che preveda una presentazione esplicita, ma qualora ce  
ne fosse bisogno, scriverò immediatamente un topic di presentazione :)!  
)  
voglio rivolgermi a voi per ricevere una mano riguardo uno tra i miei  
primi programmoni che scrivo; è un’ esercizio che mi sta mettendo a dura  
prova, in quanto sto cercando di renderlo assente da problemi, ma ecco  
che, dopo aver fatto tutto, improvvisamente, chiamando un metodo già  
definito tramite ‘def’ e assegnando a questo i parametri richiesti, mi  
si presenta un errore di sintassi(vedi allegato) , che però non viene  
segnalato quando  
precedentemente nel corso del programma ho richiamato il metodo nela  
stessa maniera di quando risulta erroneo riguardo la sintassi.  
ho davvero bisogno di una mano, se serve il codice lo allego, ditemi  
voi!  
vi ringrazio in anticipo a tutti!

---

<div class="post-metadata">

**Author:** ![davisdave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/439d5e/32.png) [@davisdave](https://www.ruby-forum.com/u/davisdave)\
**Post date:** [November 10, 2015, 1:40pm UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/2 "2015-11-10T13:40:45Z")

</div>

Credo che sia indispensabile vedere il codice. Copialo in un gist a  
[https://gist.github.com](https://gist.github.com) e dacci l’URL che ti genera. E’ più comodo  
leggerlo lì che in un allegato. Non mi pare che serva la registrazione.

---

<div class="post-metadata">

**Author:** ![davisdave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/439d5e/32.png) [@davisdave](https://www.ruby-forum.com/u/davisdave)\
**Post date:** [November 10, 2015, 2:08pm UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/3 "2015-11-10T14:08:17Z")

</div>

> <https://gist.github.com/anonymous/c51b7759e6f79a9c1071>

Ecco a te, grazie mille in anticipo!

---

<div class="post-metadata">

**Author:** ![davisdave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/439d5e/32.png) [@davisdave](https://www.ruby-forum.com/u/davisdave)\
**Post date:** [November 10, 2015, 3:27pm UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/4 "2015-11-10T15:27:43Z")

</div>

> **[GitHub - davideriemma/ruby: rubyexperiences](https://github.com/davideriemma/ruby)**
>
> rubyexperiences. Contribute to davideriemma/ruby development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![davisdave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/439d5e/32.png) [@davisdave](https://www.ruby-forum.com/u/davisdave)\
**Post date:** [November 10, 2015, 3:12pm UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/5 "2015-11-10T15:12:32Z")

</div>

> <https://gist.github.com/davideriemma/960b0230ab1e7577b0a4>

correggo

---

<div class="post-metadata">

**Author:** ![davisdave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/439d5e/32.png) [@davisdave](https://www.ruby-forum.com/u/davisdave)\
**Post date:** [November 10, 2015, 6:44pm UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/6 "2015-11-10T18:44:57Z")

</div>

ti ringrazio davvero molto per le dritte, il problema è che quel  
‘bisesitle’ (che è un errore di battitura di bisestile) è un metodo che  
utilizzo come variabile, in quanto restituisce dei valori true o false a  
seconda che l’ anno (birth1) sia bisestile o meno  
birth2 è il mese mentre birth1 è l’ anno, il programma chiede le tre  
date e secondo l’ esercizio dovrebbe verificare tramite l’ oggetto Time  
e time.mktime l’ età e stampare a schermo la scritta ’ spank’ per ogni  
anno. detto così è facilissimo, ma ci tenevo che fosse abbastanza  
infallibile per quanto riguarda gli anni bisestili e le date 30/31 che  
come ben sai cambiano per ogni mese ( ergo non vorrei che qualcuno  
mettesse 31 a novembre e il programma andasse avanti), dunque  
‘bisesitle’ identifica se l’ anno è bisestile, birthday chiarisce se  
quando si inserisce 30/31 quel mese sia effettivamente di 30 o 31  
giorni, mentre bisrec identifica se a febraio viene messa una data  
maggiore di 29 quando è bisestile o maggiore di 28 quando non lo è. per  
bisrec servono i valori restituiti da bisestle, ecco tutto.  
scusa se ti disturbo, ma mi sta davvero impegnando parecchio tempo e nn  
mi fa andare avanti con lo studio di ruby

---

<div class="post-metadata">

**Author:** ![davisdave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/439d5e/32.png) [@davisdave](https://www.ruby-forum.com/u/davisdave)\
**Post date:** [November 10, 2015, 3:28pm UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/7 "2015-11-10T15:28:04Z")

</div>

L’ultima URL è un 404, e anche la prima. Ma a  
[spank.rb · GitHub](https://gist.github.com/anonymous/c51b7759e6f79a9c1071) trovo il tuo  
programma. L’indentazione è sparita ma ci pensa l’editor a rimettarla.

Leggendolo non si capisce molto cosa faccia (una puts con delle  
spiegazioni prima della gets aiuterebbe), ma scrivendo numeri a caso:

$  
$ ruby spank.rb  
1  
1  
2  
spank.rb:14:in `bisesitle': wrong number of arguments (0 for 1) (ArgumentError) from x.rb:57:in `’

Immagino che sia una versione del programma diversa da quella di cui  
scrivevi. Come mai “bisesitle” invece di “bisestile”?

Ti consiglierei di non usare lo stesso nome per un metodo (def  
bisesitle) e per una variabile (def bisrec bisesitle). Magari  
distinguerli è sufficiente a risolvere i problemi.

Inoltre è idiomatico usare le parentesi nella definizione dei metodi,  
come in def bisrec(bisesitle). A proposito di stile, leggi

> **[Primer](https://primer.style/design/)**
>
> Principles, standards, and usage guidelines for designing GitHub interfaces.

---

<div class="post-metadata">

**Author:** ![davisdave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/439d5e/32.png) [@davisdave](https://www.ruby-forum.com/u/davisdave)\
**Post date:** [November 11, 2015, 11:08am UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/8 "2015-11-11T11:08:15Z")

</div>

Inutile dire che davvero mi hai salvato! Grazie mille per il tuoi aiuto,  
ne farò tesoro prezioso. Adesso so che ruby è difficile ma anche molto  
bello, perciò vorrei impararlo bene. Scusa se ti disturbo ulteriormente  
con le mie domande, ma potresti consigliarmi un buon libro per ampliare  
le conoscenze e migliorare lo stile? Un giorno mi piacerebbe programmare  
ad alto livello!

Grazie mille ancora per il tuo prezioso aiuto

---

<div class="post-metadata">

**Author:** ![davisdave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/439d5e/32.png) [@davisdave](https://www.ruby-forum.com/u/davisdave)\
**Post date:** [November 11, 2015, 10:41am UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/9 "2015-11-11T10:41:28Z")

</div>

Ok, ho capito un po’ di più il tuo ragionamento. Ecco un po’ di  
modifiche su cui ragionare e che faranno funzionare il tuo programma.

bisestile (rinominiamolo con il nome che dovrebbe avere - 6 errori di  
battitura…) ritorna true o false, ma poi lo confronti con ‘true’ e  
‘false’ che sono due stringhe. Questo non va bene come potrai capire da  
solo.

Rinominiamo anche il parametro di bisrec che non può chiamarsi bisestile  
come il metodo. Forse funziona ma di certo confonde chi legge. Diciamo  
che diventa def bisrec(anno\_bisestile)

birth1 birth2 birth3 dovrebbero chiamarsi anno, mese, giorno, e così  
chiunque legga il programma capirebbe a cosa servono, anche tu tra sei  
mesi.

Non usare or e and, usa || e &&. Non sono uguali e di solito vuoi  
l’effetto che danno i secondi. Dove li usi tu sono equivalenti ma in  
espressioni logiche più complesse potresti avere delle sorprese. Vedi

> **[Application Security Blog](https://www.synopsys.com/blogs/software-security/)**
>
> We offer authoritative insight and opinions on software and application security breaking news, analysis, and business intelligence from the leading Software Integrity Group at Synopsys.

Il metodo bisestile si può scrivere più succintamente così

def bisestile(anno)  
anno.to\_i % 4 == 0 || anno.to\_i % 400 == 0  
end

Questo non può funzionare:

bisestile(anno) # ok, funziona  
bisrec(bisestile) # no, non funziona perché manca l’argomento di  
bisestile

Meglio:

bisrec(bisestile(anno))

ma bisrec potrebbe chiamare bisestile direttamente al suo interno,  
quindi meglio:

def bisrec(anno, mese)  
anno\_bisestile = bisestile(anno)  
if anno\_bisestile == true && mese.to\_i == conta30[1].to\_i  
…

bisrec(anno, mese)

A questo punto si ha un errore perché conta30 è definita dentro a  
birthday e quindi non è visibile dentro a bisrec.

Risolto quello vedrai che c’è un problema su

yrlive = dtbirth.to\_i - newT.to\_i

che è montata al contrario e dà valori negativi a meno che dtbirth non  
sia nel futuro facendo fallire la \* nella puts finale.

Inoltre ti ritorna i secondi, mentre volevi gli anni, ma questo è facile  
da sistemare.

Se ti sembrano tanti errori o imperfezioni non ti preoccupare, agli  
inizi è normale e ci siamo passati tutti. I più anziani di noi  
spaccandosi la testa da soli sul tavolo perché non c’era internet su cui  
chiedere consiglio 🙂

---

<div class="post-metadata">

**Author:** ![davisdave](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/439d5e/32.png) [@davisdave](https://www.ruby-forum.com/u/davisdave)\
**Post date:** [November 11, 2015, 12:24pm UTC](https://www.ruby-forum.com/t/aiuto-primo-programmone/243464/10 "2015-11-11T12:24:42Z")

</div>

Di libri Ruby non ne ho letti e in generale non compro più “carta”  
tecnica da anni: è quasi obsoleta quando esce. Però su questo ci sono  
vedute diverse e altri nel forum ti potranno consigliare perché so che  
leggono libri.

Ci sono mille blog e mille siti. Per la style guide ti consiglio di  
nuovo [Primer](https://github.com/styleguide/ruby)

Forse è un po’ presto ma puoi anche tener d’occhio  
[http://rubyweekly.com/](http://rubyweekly.com/) e [http://planetruby.herokuapp.com/](http://planetruby.herokuapp.com/) Se vedi  
qualcosa che ti interessa approfondiscilo.

Leggere codice scritto da altri fa bene e anche googlare i propri  
problemi. Ad esempio: “ruby years since” come primo risultato dà

> <https://stackoverflow.com/questions/1904097/how-to-calculate-how-many-years-passed-since-a-given-date-in-ruby>
