miércoles, 17 de julio de 2013

Katas

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.



4 comentarios:

  1. Me gusta que te gusten las katas!

    El 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!

    ResponderEliminar
  2. Jeje, en una linea se puede hacer con expresiones lambda Canx,

    Enumerable.Range(1, n).Where(z => n % z == 0).Count() == 2

    ¿En Ruby lo puedes igualar?

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. En una linea usando expresiones regulares:

    def 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/

    ResponderEliminar