[Python-es] Python y/o ruby para no programadores

Olemis Lang (Simelix) olemis+py en gmail.com
Mar Feb 9 14:09:11 CET 2010


Solo una precisión ;o)

2010/2/8 Chema Cortes <pych3m4 en gmail.com>:
> El día 8 de febrero de 2010 16:39, Olemis Lang (Simelix)
> <olemis+py en gmail.com> escribió:
>
>> pero los bloques de código de Ruby son muy cómodos y potentes (y no
>> hay nada como eso en Python)
>
> Cómodos sí, pero no diría tanto como que no hay nada en python. En
> python puedes hacer casi lo mismo con iterables, con la posibilidad de
> usar la sencillez de la comprensión de listas para manejarlos (compara
> código anidando bloques de código, por ejemplo).
>

No creo estar completamente de acuerdo. Hay varias cuestiones entre
ambos enfoques q creo q hay que destacar :

  - Si el tema es sobre el uso de bloques con `each` entonces esto
     es completamente corecto
  - Pero los bloques no se limitan necesariamente a eso.
     - Por ejemplo,
       en el caso de IO asíncrona muy frecuentemente se utilizan
       callbacks. En Python la única solución es escribir una
       función o «clase invocable» (i.e. callable) y pasarla como parámetro
       a alguna función o mecanismo de registro q tenga la API.
       Esto puede ser engorroso. En Ruby los casos sencillos pueden
       ser descritos con un bloque de código inline y queda más legible
       y menos «verbose» (más conciso).
    - Otro ejemplo, la solución al `case` o `switch` de Python basada en dict(s)
      implica q a cada llave se le asigne algo q, al ejecutarlo, se realiza lo
      q sea específico de esa alternativa. Pasa algo más o menos semejante,
      en Python resulta engorroso escribir una función para cada alternativa,
      sin el propósito de reutilizarla (sino solo para suplir una carencia del
      lenguaje) y la legibilidad es pésima, porq todo está separado y
      disperso y con un vistazo no se puede tener idea de lo
      q pasa. Con bloques inline como los de Ruby se podría mejorar esto.

Claro, q en todos estos casos se pudiera utilizar un objeto de typo
`code`, la función `compile`, o `exec`, pero el efecto no es el mismo
... IMO

>> y, además, en Python no hay
>> continuaciones *EXPLÍCITAS* , como sí las hay en Ruby . Por tanto si
>> estos temas fueran objetos de estudio entonces Ruby sería más
>> apropiado q Python
>
> El peligro de las "continuaciones" es el mismo que tenían los "gotos"
> de no saber por dónde acabará el hilo de ejecución.
> Lo más probable es
> que desaparezcan del lenguaje tal como han desaparecido de jruby y
> están desaconsejadas en ruby 1.9.

No me gustaría q desaparecieran, pero bueno, estoy muy alejado de
influir en esa decisión.

> En python lo más parecido sería la
> "función" yield.

Sí, por eso dije *EXPLÍCITAS*, las funciones generadoras y las
corutinas de Python hacen una continuación, pero implícita

;o)

-- 
Regards,

Olemis.

Blog ES: http://simelo-es.blogspot.com/
Blog EN: http://simelo-en.blogspot.com/

Featured article:
PEP 391 - Please Vote!  -
http://feedproxy.google.com/~r/TracGViz-full/~3/hY2h6ZSAFRE/110617



Más información sobre la lista de distribución Python-es