Ruby Kata FizzBuzz

Ciao a tutti,

nel mio tempo libero sto studiando ruby e inoltre, per fare pratica con
TDD, ho deciso di addrentrarmi nel mondo dei Kata.
Ho implementato una soluzione in Ruby del FizzBuzz Kata. La potete
trovare
qui https://github.com/PaoloLaurenti/ruby_kata_fizz_buzz su GitHub.

Sono agli inizi con Ruby e di certo non sono un super-esperto di TDD.
Perci mi piacerebbe avere un feedback su quanto ho fatto in modo da
poter
comprendere al meglio gli errori che sicuramente ho commesso (e perci
migliorare).

Mi piacerebbe capire se:

  • ho rispettato le best practices/convenzioni previste dal linguaggio
    o
    se ho fatto qualche schifezza;
  • ho implementato una soluzione che dal punto di vista OO corretta o
    se presenta delle lacune (e ovviamente perch)
  • avrei potuto migliorare l’implementazione dei test e se si, come

Ovviamente sono interessato a qualsiasi altro feedback vorrete darmi.

Grazie in anticipo

p.s. stavo pensando di inviare questa mail anche a XP-IT. Pensate sia
una
buona idea o rischio di essere considerato una spammer? (scusate i dubbi
da
lurker che esce allo scoperto per le prime volte…)

Paolo L.

E-mail: [email protected]
Blog: http://paololaurenti.wordpress.com
Twitter: @paololaurenti
Skype: paololaurenti

2013/11/23 Paolo L. [email protected]:

Sono agli inizi con Ruby e di certo non sono un super-esperto di TDD.
Perci mi piacerebbe avere un feedback su quanto ho fatto in modo da poter
comprendere al meglio gli errori che sicuramente ho commesso (e perci
migliorare).

Ciao Paolo,

ho dato un’occhiata veloce e le prime cose che mi vengono in mente
sono che le indentazioni in Ruby ebene farle con 2 spazi e che di solito si usa snake_case invece che camelCase per i nomi dei metodi. Inoltre vedo che nei test cerchi di testare le stampe. Io sono convinto sostenitore di creare un'interfacciapura` da testare (nel
senso Haskelliano del termine) invece che testare i side effects. Ti
crea molti meno problemi con setup dei test e diminuisce la necessit
di usare double frameworks.

Mi ci ero divertito molto anche io a fare qualche kata. Li trovi qui
GitHub - pigoz/katas: 🔪 my solutions to code katas se hai voglia di buttarci un occhio, il
ruby dovrebbe essere abbastanza idiomatico (c’e` anche il fizzbuzz
in ruby! :))

2013/11/23 Stefano P. [email protected]

sono che le indentazioni in Ruby e` bene farle con 2 spazi
grazie mille, non lo sapevo.

e che di
solito si usa snake_case invece che camelCase per i nomi dei metodi.

si, questa convenzione l’avevo letta e avevo cercato di rispettarla.
Soltanto che ogni tanto me ne dimentico e torno ad usare CamelCase…ci
star pi attento. :slight_smile:

Inoltre vedo che nei test cerchi di testare le stampe. Io sono
convinto sostenitore di creare un’interfaccia pura da testare (nel
senso Haskelliano del termine) invece che testare i side effects. Ti
crea molti meno problemi con setup dei test e diminuisce la necessit
di usare double frameworks.

Non conosco Haskell ma se ho capito bene stai parlando di test
“Subcutanei”
come li chiama Fowler (vedi
articolohttp://martinfowler.com/bliki/SubcutaneousTest.html
).
Sposo anch’io questo concetto, infatti non amo per nulla testare ad. es.
UI
o DB.
In questo caso ho scelto la strada “TDD pura”, rispettando esattamente
cosa
mi chiedevano i test per vedere cosa succedeva e perci ho testato
l’output
della console. In futuro sicuramente, riprover a farlo tenendo in mente
il
concetto che hai sollevato.

Mi ci ero divertito molto anche io a fare qualche kata. Li trovi qui
GitHub - pigoz/katas: 🔪 my solutions to code katas se hai voglia di buttarci un occhio, il
ruby dovrebbe essere abbastanza idiomatico (c’e` anche il fizzbuzz
in ruby! :))

Grazie mille!! Sicuramente ti rubo l’idea di fare un repository unico
per
tutti i kata… :slight_smile:

2013/11/24 Paolo L. [email protected]:

Non conosco Haskell ma se ho capito bene stai parlando di test “Subcutanei”
come li chiama Fowler (vedi
articolohttp://martinfowler.com/bliki/SubcutaneousTest.html
).

Non sapevo che ci fosse una nomenclatura per questa tecnica. :slight_smile: