7 lenguajes en 7 semanas: Ruby

7 lenguajes en 7 semanas: Ruby

Photo by Oleg Magni from Pexels

Esta es la primera entrada de una serie en la que analizamos el libro seven languages in seven weeks publicado por Bruce A Tate en el año 2010. Este interesante libro no pretende profundizar en el conocimiento de cada uno de los lenguajes, sino dar un vistazo rápido a los diferentes paradigmas que existen, así como los puntos fuertes y débiles de cada uno de los lenguajes que analiza.

En esta primera entrada vamos a centrarnos en el lenguaje de programación Ruby. Esto no es un tutorial. El objetivo de esta entrada es dar un vistazo a las características generales de este lenguaje, para poder comprender mejor algunas de sus caracterísiticas de diseño. Lee esta entrada sí. Tienes curiosidad por saber cómo son otros lenguajes o si tienes intención de aprende Ruby próximamente.

Introducción

Ruby es un lenguaje de programación interpretado, reflexivo y orientado a objetos, creado por el programador japonés Yukihiro "Matz" Matsumoto, quien lo presentó públicamente en 1995 y que se distribuye bajo una licencia Open Source. A partir del año 2006 se hace muy popular en la industria del desarrollo de software japonesa gracias a la irrupción del framework de desarrollo web Ruby on Rails.

Habitualmente los ingenieros cuando diseñan un lenguaje ponen toda la atención sobre el rendimiento. En contraposición a esto Matz, quiso poner toda la atención en la productividad del programador. A lo largo de esta entrada vamos a ver como este enfoque se plasma en diferentes características del lenguaje.

Mary Popins

El autor asigna un personaje a cada uno de los lenguajes del libro. En este caso Ruby es Mary Popins. La motivación es que los lenguajes anteriores eran rígidos y aburridos como las niñeras de principios de siglo. En ese momento aparece mary popins una niñera fabulosa y divertida.

Ruby es Mary Popins

Principales características

Interpretado

Ruby forma parte de los lenguajes interpretados. Esto implica que el ciclo de desarrollo es más rápido ya que no es necesario compilar cada iteración. El precio a pagar en los lenguajes interpretados es que ofrecen un rendimiento menor.

Paradigma

Ruby en un lenguaje de alto nivel y orientado a objetos. Soporta las características de encapsulamiento, herencia y polimorfismo.

Sintaxis

La sintaxis de Ruby está inspirada en los lenguajes de programación python y perl. A su vez Ruby ha inspirado la sintaxis de otros lenguajes como Elixir y de Coffeescript.

Es una sintaxis que está diseñada para facilitar la productividad al programador

Algunas partes destacables de su sintaxis son:

  • No se require finalizar cada sentencia con un punto y coma.
  • No se require declarar variables.
  • Es sencillo trabajar con cadenas de texto.
  • Se utilizan identaciones para delimitar bloques de código.
  • No se requieren los parantesis en las llamadas y definiciones de funciones.

Todo es un objeto

Una característica muy apreciada de Ruby es que todo está definido como un objeto. Así podríamos hacer cosas del tipo.

puts 'hola mundo'.upcase

En contraposición a otros lenguajes, la api de ruby está muy bien diseñada, es consistente y con una muy buena orientación a objetos.

Tipado

Tipado dinámico significa que no necesitas declarar una variable antes de usarla. El intérprete inferirá el tipo de dato y lo asignará a la variable. Este tipo de tipado es muy utilizado en lenguajes de scripting.

foo = 1
foo = '1'

Duck typing se refiere a la características de algunos lenguajes en la que no se realiza comprobación de tipos, por ejemplo cuando se envía un objeto como argumento. En el momento de ejecución cuando se realice una llamada sobre ese objeto, el sistema verificará si está definido y si no llamará a un método especial llamado method_missing.

def method(foo)
  puts foo.upcase # si upcase no está definido se invocará method_missing
end

Simbolos

Ruby utiliza un tipo especial de cadenas de texto inmutables. Si diferentes variables definen el mismo símbolo todas ellas apuntan a la misma referencia.

foo = 'bar'
    foo = :bar # los símbolos ofrecen mejoras de rendimiento

Bloques

Un bloque es una conjunto de sentencias agrupadas. En otros lenguajes se les conoce como funciones anónimas.

odds = [1,2,3,4,5,6,7,8,9].select { |number| number % 2 != 0 }

Mixins

Ruby no soporta la herencia múltiple de forma directa. En lugar de ello utiliza mixins.

module MODULE_A
  def method_1
    puts "Module A method 1"
  end

  def method_2
    puts "Module A method 2"
  end
end

module MODULE_B
  def method_2
    puts "Module B method 2"
  end

  def method_3
    puts "Module B method 3"
  end
end

class Foo
  include MODULE_A
  include MODULE_B
end

foo = Foo.new()
foo.method_2 # Module B method 2

Reflexibidad

Una caracteristica que hace muy potente a Ruby es la capacidad para extender o modificar las clases en tiempo de ejecución.

a = 'fooBAR'
class String
  def upcase
    return self.downcase
  end
end

puts a.upcase # foobar

Conclusiones

Fortalezas

API Bien diseñada

Una de las características más destacables de Ruby es la fuerte orientacioón a objetos y su api consistente y bien diseñada.

Azúcar sintáctico

El azúcar sintáctico es un conjunto de características que se añaden a ciertos lenguajes, que sin añadir funcionalidad al mismo, mejoran el lenguaje en el sentido de hacerlo más fácil de escribir o de leer. Ruby tiene un montón de azúcar sintáctico.

Productivo

Por todo lo que hemos visto Ruby es un lenguaje muy flexible y orientado a la productividad del programador. Ruby es un lenguaje ideal para ser usado como lenguaje pegamento entre la increible cantidad de librerías disponibles, tanto para ser usado como lenguaje de scripting, como para el desarrollo web.

Debilidades

Rendimiento

Algunas de las características que hemos visto y que hacen de ruby un lenguaje tan productivo afectan a su rendimiento.

Seguridad

Sus caracterísiticas de tipado, como hemos visto hacen que programar sea muy rápido, pero también hacen que algunos errores no puedan ser detectados antes de pasar al entorno de producción.

¿Quieres ser una bestia del desarrollo de software?
¡Continúa con nosotros en YouTube!

Todas las semanas un nuevo vídeo sobre desarrollo de software en tu bandeja de entrada.

Tranquilo, no te vamos a enviar spam.