Seguindo a idéia do Kata do Uncle Bob de números primos, fiz o mesmo Kata em C# e gravei o vídeo. Treinei um pouco, e foi um exercício interessante, fiquei bom o suficiente pra bater o Kata em dez minutos. Uma das coisas mais interessantes é praticar o TDD, com uma grande ajuda do Resharper e do TestDriven.Net. Usei o framework de testes Gallio (MbUnit), porque o MSTest não possui um método de Assert que compare coleções, e o MbUnit possui, então fui com ele.
A idéia do Kata é criar um software que permita decompor o fator primo de qualquer número. Assim, ele deve receber o número a ser decomposto, e retornar uma lista destes números. No meu caso, este é o teste do fatorial de 6:
[Test] public void Deve_Fatorar_6() { Assert.AreElementsEqual(new[] { 2, 3 }, Fatorial.Fatorar(6)); }
Ou seja, o método Fatorar deve retornar uma lista dos primos que compõe 6, ou seja, 2 e 3.
Pra quem quiser ver, o vídeo está no Viddler, e no final tem a solução. Não me inspirei só na idéia do Uncle Bob, mas também no formato do vídeo, espero que gostem (feedbacks, como sempre, são bem vindos).
Fiz também com IronRuby, e realmente é nos testes que o Ruby arrebenta. Foi também muito interessante.
A solução também está aqui para download. Você também pode ver a solução do Uncle Bob com Java, desta vez com uma apresentação do Powerpoint.
E você, já fez o exercício? O que achou? Quais outros Katas você já fez?
(Em tempo: se você me segue no twitter viu o vídeo antes, anunciei por lá na segunda-feira.)
Giovanni Bassi
Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.