¿Cómo es Ruby respecto a ...?

¿Cómo es Ruby respecto a ...?

P: ¿Cómo es Ruby comparado con Python?

P: ¿Cómo es Ruby comparado con Python?

R: Tanto Python como Ruby son dos lenguajes orientados a objetos que permiten una transición suave de los estilos de programación procedimentales a orientados a objetos. Por el contrario SmallTalk se basa sólo en objetos - no es posible hacer nada útil hasta que no se comprende los que es un objeto, la herencia y la voluminosa jerarquía de clases que posee - Al proporcionar mecanismos procedimentales, Python y Ruby eliminan uno de los problemas que ha mantenido a SmallTalk fuera de los circulos principales de desarrollo. Esto lenguajes se diferencian en que abordan esta solución desde direcciones opuestas.

Python es un lenguaje híbrido. Posee funciones para programación procedimental así como orientada a objetos. Python tiende un puente entre los dos mundos al permitir que las funciones y los métodos sean convertibles al utilizar un parámetro self explícito. Al insertar la función en un objeto, el primer argumento pasa a ser, automáticamente, una referencia al receptor del mensaje.

Ruby es un lenguaje OO puro que se puede enmascarar como procedimental. No hay funciones, sólo métodos. En un método Ruby el receptor, también llamado self, es un argumento oculto como this de C++. Una sentencia def fuera de la definición de una clase, que en Python es una función, en Ruby es realmente un método. Estas funciones se convierten en métodos privados de la clase Object, raíz de su jerarquía de clases. La programación procedimental se resuelve así de una forma limpia pero en sentido contrario - todo es un objeto. Si el usuario todavía no ha asimilado los objetos, puede considerar que def es la definición de una función y realizar algún trabajo útil.

La pureza OO de ruby permite ciertas características de las que carece Python o sobre las que se está trabajando: Una jerarquía unificada de tipos/clases, metaclases, la posibilidad de hacer subclases de todo y uniformidad en el método de invocación . Ruby, como SmallTalk, sólo permite herencia simple, pero posee el muy poderoso concepto de mixin: la definición de una clase puede incluir un módulo, que inserta sus métodos, constantes, etc dentro de la clase.

Ruby, al igual que SmallTalk, proporciona cierres y bloques de código y lo utiliza con el mismo buen efecto. La collección de clases e iteradores de Ruby es notable y mucho más potentes y elegantes que las soluciones ad hoc que está generando Python (lambdas y listas de compresión).

La sintaxis de Ruby y su filosofía de diseño están muy influenciadas por Perl. Tiene gran variabilidad sintáctica. Modificadores de sentencias (if, unless, while, until etc. ) pueden aparecer al final de cualquier sentencia. Algunas palabras reservadas son opcionales (por ejemplo "then" en la sentencia "if"). Los parentesis se pueden omitir en las llamadas a los métodos. Es usual que el receptor de un método también se pueda omitir. Muchas cosas derivan directamente de Perl. Expresiones regulares predefinidas, $_ y equivalentes, documentación en línea, diferenciación entre comilla simples y dobles, los prefijos $ y @ para diferenciar diferentes clases de nombres etc..

Si te gusta Perl te encontrarás como en casa con Ruby. Si te gusta SmallTalk te gustará Ruby y la sintaxis te resultará familiar. Si te gusta Python, puede disgustarte la gran diferencia en la filosofía de diseño que hay entre ambos.

Ruby es mucho más complejo que Python pero la mayoría de sus características encajan bien. Ruby está muy bien diseñado y lleno de ideas claras que podrían ser válidas para P3K.No sé cuantos programadores Python se verán atraídos a Ruby aunque (todavía) no me ha convencido. Pero merece un serio estudio y podría ser un verdadero peligro para Perl.

enviado por John Dell'Aquila a comp.lang.python, 17/11/2000. Reproducido con autorización.