Java vs Ruby

Posted: April 1st, 2009 | Author: FreedomCoder | Filed under: Open Source, Programming | Tags: , , | No Comments »

Utilizo mucho estos 2 lenguajes, principalmente Java. Por ello, voy a tratar de describir sus diferencias, similitudes, ventajas y desventajas. Hago esto para que los que quieran adentrarse en estos lenguajes, puedan tener una referencia.

En principio, me gustaría señalar que la principal ventaja que tiene Ruby frente a Java, es lo compacto y simple que es el lenguaje. Esta diseñado para que no tengamos que escribir largos bloques de código y además, para que la lectura del código se asemeje un poco mas al lenguaje humano que al computacional.

Para ejemplificar lo que les digo, vamos a programar un simple algoritmo que escribe 3 veces una cadena por la pantalla.

En Java:

for(int i=0;i<3;i++) { System.out.print("cadena de texto");}

En Ruby:

3.times do print "cadena de texto"end

Como pueden ver, el código en Ruby es más compacto y es más directa su lectura.

Para los que son adeptos a la sintaxis más “computacional”, Ruby nos permite escribir el algoritmo anterior, de la siguiente manera:

3.times { print("cadena de texto");}

Podemos ver que la sintaxis anterior, es muy similar a la usada en Java. Puntualmente podemos ver las siguientes similitudes:

  • Las líneas de código con el “punto y coma” final
  • Los bloques de código delimitados por los símbolos { y }
  • Los parámetros pasados a un método, entre paréntesis.

Definitivamente, Ruby es muy flexible con respecto a la sintaxis que usamos para programar. Muchos pueden argumentar en este punto, que la sintaxis de Java es mucho más potente que la de Ruby, ya que en este último no se puede acceder al índice y tampoco es posible especificar los valores inicial, final y de paso, del índice de iteración (La variable i en el código de Java).

En respuesta a lo anterior, Ruby nos permite hacer lo siguiente:

0.step(2,1) do |i| print "cadena de texto - Iteracion ${i}"end

Este método, ejecutará el bloque de código variando el índice i, desde el valor inicial 0, hasta el valor final 2, sumándole 1 en cada paso. Como ven, Ruby se adapta bastante a nuestros gustos.

Si bien esta flexibilidad tiene muchas ventajas, también puede traer problemas. El principal (según mi punto de vista) es que cuando en un proyecto participan muchos programadores, si no se establece una convención de sintaxis, podemos terminar con una gran mezcla de código de sintaxis muy variada, y esto puede traer mucha confusión en la lectura y manutención del mismo.

Otras de las grandes desventajas de Ruby, es que es un lenguaje totalmente interpretado, lo cual trae problemas de rendimiento y escalabilidad. Prueba de esto, es que Twitter está mudando su plataforma de Ruby on Rails, a Scala.

Otras de las fuertes debilidades que le veo a Ruby, es que es un lenguaje de tipos débiles. Esto quiere decir que las variables que usamos no tienen un tipo fijo, y que tampoco es necesario declararlas para uso.

En mis experiencias (laborales y académicas) utilizando lenguajes de tipos débiles, he llegado a la conclusión de que es algo útil en algoritmos y programas de poco tamaño. Pero cuando la cantidad de código comienza a crecer (proporcionalmente con la cantidad y complejidad de las capas y módulos de nuestra aplicación), esto se vuelve una gran desventaja.

Piensen en que si una variable no tiene tipo fijo, entonces tenemos que suponer que tipo tiene al momento de usarla y esto genera errores, que en algunos casos son casi imposibles de detectar, sobre todo en aplicaciones donde los datos se mueven a través de los distintos módulos de la aplicación, atravesando a su vez, las distintas capas de la misma.

Como señalé anteriormente, en Ruby tampoco es necesario declarar una variable para usarla. Esta es otra fuente de muchos problemas. Varias veces perdí muchas horas tratando de resolver un bug, para darme cuenta que el problema era que una variable estaba mal escrita (al no tener que declararla, el intérprete la toma como una nueva variable). Aunque tengo que reconocer que el uso de IDE’s con autocompletado (como Netbeans o Eclipse) han minimizado mucho estos problemas.

Para finalizar, les dejo una lista de similitudes y diferencias que existen entre estos 2 lenguajes.

Similitudes:

  • En ambos lenguajes contamos con manejo automático de memoria, a través de un recolector de basura.
  • Los objetos son de tipos fuertes (Las variables son de tipos débiles en Ruby, pero los objetos no).
  • Ambos soportan casi la totalidad del modelo orientado a objetos.
  • Los 2 cuentan con herramientas de documentación embebidas. (Javadoc en Java y Rdoc en Ruby).
  • Tanto Ruby como Java, son lenguajes totalmente libres (licencia GPL).

Diferencias:

  • Ruby es interpretado, Java es compilado y luego interpretado.
  • En Ruby se pueden usar como separadores de bloques las palabras claves do y end, o los símbolos { y }. En Java sólo es posible usar { y }
  • En Ruby, todos los atributos de una clase son privados, en Java pueden ser privados, públicos o protegidos.
  • En Ruby, la lista de parámetros pasados a un método, puede o no estar delimitada por paréntesis. En Java, los paréntesis son obligatorios.
  • En Ruby, absolutamente todo es un objeto. En Java existen tipos de datos que no son objetos.
  • En Java existe el chequeo de tipos. En Ruby no, ya que es interpretado.
  • En Java, las variables son de tipo fuerte. En Ruby las variables son de tipos débiles.
  • En Ruby tenemos los mixin’s, en contrapartida de las interfaces de Java.

Me gustaría destacar una de las grandes ventajas de Java frente a Ruby. Esta ventaja, es la gran cantidad de bibliotecas y frameworks disponibles directamente para su uso. Lo anterior, sumado a una inmensa comunidad de usuarios, hacen que Java sea uno de los lenguajes mas usados.

En el poco tiempo que llevo desarrollando en Ruby, he encontrado una gran comunidad de usuarios y bibliotecas disponibles, pero si tenemos que comparar en cantidad, se queda muy corto comparado con Java.

Si bien Java es un lenguaje muy potente, no hay que pensar que es lo mejor para todo. Todas las herramientas tiene sus puntos fuertes y débiles y hay que saber cuando utilizar una u otra. En mi caso, he encontrado que Ruby es excelente para hacer proyectos de pequeño y también es bastante aplicable en proyectos de mediana envergadura. En proyectos grandes, definitivamente Java es una de las mejores opciones, sobre todo en términos de rendimiento en ámbitos de mucha concurrencia, y en escalabilidad de los sistemas.

Espero que les sea de utilidad. Nos vemos en la próxima.

(Via Entre tazas, joyas y pingüinos.) Original Link: Java vs Ruby



Leave a Reply

  • Powered by WP Hashcash