Las Katas en programación son ejercicios "simples" y fascinantes para practicar determinados aspectos de la programación. Sirven para practicar algorítmica, probar nuevas funcionalidades de un lenguaje, comparar eficiencia de algoritmos, y además también son un buen ejercicio para empezar a familiarizarse con el TDD.
Hay varias Webs donde se proponen numeros Katas muy divertidos y "fáciles", para todos los lenguajes. Aquí dejo el link de Solveet , Web con muchos Katas propuestos para muchos lenguajes, hay muchos desafíos con las soluciones de varios programadores, te puedes picar con ellos y comparar soluciones, incluso puedes publicar tu propio desafío. Hay ejemplos incluso de un lenguaje que se llama Ruby, por tanto le gustará a un buen amigo mio.
Katas típicos pueden ser por ejemplo cálculo factorial, fibonacci, números primos, etc...
También es divertido inventarse uno propio, yo me propuse el siguiente Kata:
1. Función calculo Número primo clásico
2. Función cálculo número primo con LINQ usando expresiones Lambda.
3. Función cálculo número primo con solución 2 recursiva.
Cosa que me ha permitido practicar las expresiones Lambda, y no solo eso, además ha permitido comprobar la eficiencia de LINQ. A través de las pruebas unitarias se ha comprobado que las solución 2 y 3 con expresiones Lamda, son con mucha diferencia mucho más efectiva que la primera. La solución 3 es ligeramente más efectiva que la 2.
Pego a continuación una foto con las 3 funciones.
Me gusta que te gusten las katas!
ResponderEliminarEl tío que inventó las "code katas" era un rubista (Dave Thomas, http://en.wikipedia.org/wiki/Dave_Thomas_(programmer). También es el inventor del acrónimo DRY.
En su web estan las 21 katas "oficiales" que se pueden hacer en cualquier lenguaje:
http://codekata.pragprog.com/
Por cierto, no sabía que se podían usar expresiones lambda en C#, muy interesante!
Jeje, en una linea se puede hacer con expresiones lambda Canx,
ResponderEliminarEnumerable.Range(1, n).Where(z => n % z == 0).Count() == 2
¿En Ruby lo puedes igualar?
Este comentario ha sido eliminado por el autor.
ResponderEliminarEn una linea usando expresiones regulares:
ResponderEliminardef is_prime(n) ("1" * n) !~ /^1?$|^(11+?)\1+$/ end
is_prime(9) => false
is_prime(11) => true
jaja no la he hecho yo, la he sacado de aquí:
http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/