Lapidando Ruby A Work in Progress Maurício Eduardo Szabo [email_address] @mauricio_szabo http://mauricioszabo.wordpress.com
Nesta Apresentação... subject { You.new } Ruby.new.should be_false
knowledges.should include(RSpec)
should be_open_to_new_ideas
Por quê? Aquela jovem é uma das menos ignorantemente aparvalhadas formas de vida orgânica que eu já tive a profunda falta de prazer de não ser capaz de evitar encontrar
Não Teremos...
Boas práticas Prefira instância
Entenda Ruby
Seja claro Logo - TO Seja preciso
TESTES!
Ruby não é... Perl a.size == 0 or abort PHP for element in array Java array.size.times { |i| element = array[i] } Basic, Cobol, Pascal, C... a = create_person(:name => 'Foo')
save_person(a)
Rescue Me! (Estes códigos são equivalentes!)
Não Abuse da Linguagem Ruby ajuda muito, mas use com moderação yield sobre yield sobre yield sobre... Difícil de entender, e LENTO Não use coisas que podem depender da implementação de Ruby Se for necessário fazer isso, ISOLE-AS e TESTE-AS INTENSIVAMENTE!
Evite depender de comportamentos não-documentados return array.delete_if { |e| ... }
Evite Efeitos Colaterais Se você puder chamar um método duas vezes e ele retornar o MESMO  valor, melhor!
DEFina Direito! Código deve ser escrito como um “jornal”
Não Seja Menos Claro
Flags?
Idente Tudo... ...MAS...
...Evite Identar
Floats? Imprecisos
SPECs vão falhar use should be_close
Melhor ainda, use BigDecimal
Não Modifique os Parâmetros
OCP e MonkeyPatch Classes devem ser ABERTAS para adição e FECHADAS para modificação Modificar métodos é legal, mas é a maior fonte de problemas
TDD e BDD Diferenças?
Como testar, e o quê testar?
Como manter a clareza?
Como evitar testes frágeis?
Como facilitar os testes?

Lapidando ruby