SlideShare ist ein Scribd-Unternehmen logo
1 von 10
Downloaden Sie, um offline zu lesen
Ruby es un lenguaje de programación interpretado, reflexivo y orientado a objetos,
creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a
trabajar en Ruby en 1993, y lo presentó públicamente en 1995. Combina una
sintaxis inspirada en Python y Perl con características de programación orientada a
objetos similares a Smalltalk. Comparte también funcionalidad con otros lenguajes
de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de
programación interpretado en una sola pasada y su implementación oficial es
distribuida bajo una licencia de software libre.

Historia

El lenguaje fue creado por Yukihiro "Matz" Matsumoto, quien empezó a trabajar en
Ruby el 24 de febrero de 1993, y lo presentó al público en el año 1995. En el círculo
de amigos de Matsumoto se le puso el nombre de "Ruby" (en español rubí) como
broma aludiendo al lenguaje de programación "Perl" (perla). La última versión
estable de la rama 1.8 es la 1.8.7_p248, de la rama 1.9 es la 1.9.1_p378 . La versión
en 1.9 que incorpora mejoras sustanciales en el rendimiento del lenguaje, que se
espera queden reflejadas en la próxima versión estable de producción del lenguaje,
Ruby 1.9.0.1 Diferencias en rendimiento entre la actual implementación de Ruby
(1.8.6) y otros lenguajes de programación más arraigados han llevado al desarrollo
de varias máquinas virtuales para Ruby. Entre ésas se encuentra JRuby, un intento
de llevar Ruby a la plataforma Java, y Rubinius, un intérprete modelado basado en
las máquinas virtuales de Smalltalk. Los principales desarrolladores han apoyado la
máquina virtual proporcionada por el proyecto YARV, que se fusionó en el árbol de
código fuente de Ruby el 31 de diciembre de 2006, y se dió a conocer como Ruby
1.9

Objetivo

El creador del lenguaje, Yukihiro "Matz" Matsumoto, ha dicho que Ruby está
diseñado para la productividad y la diversión del desarrollador, siguiendo los
principios de una buena interfaz de usuario.2 Sostiene que el diseño de sistemas
necesita enfatizar las necesidades humanas más que las de la máquina:3

A menudo la gente, especialmente los ingenieros en computación, se centran en
las máquinas. Ellos piensan, "Haciendo esto, la máquina funcionará más rápido.
Haciendo esto, la máquina funcionará de manera más eficiente. Haciendo esto..."
Están centrados en las máquinas, pero en realidad necesitamos centrarnos en las
personas, en cómo hacen programas o cómo manejan las aplicaciones en los
ordenadores. Nosotros somos los jefes. Ellos son los esclavos.
Ruby sigue el "principio de la menor sorpresa", lo que significa que el lenguaje debe
comportarse de tal manera que minimice la confusión de los usuarios
experimentados. Matz ha dicho que su principal objetivo era hacer un lenguaje que
le divirtiera él mismo, minimizando el trabajo de programación y la posible
confusión. Él ha dicho que no ha aplicado el principio de menor sorpresa al diseño
de Ruby,4 pero sin embargo la frase se ha asociado al lenguaje de programación
Ruby. La frase en sí misma ha sido fuente de controversia, ya que los no iniciados
pueden tomarla como que la características de Ruby intentar ser similares a las
características de otros lenguajes conocidos.

En mayo de 2005 en una discusión en el grupo de noticias comp.lang.ruby, Matz
trató de distanciar Ruby de la mencionada filosofía, explicando que cualquier
elección de diseño será sorprendente para alguien, y que él usa un estándar
personal de evaluación de la sorpresa. Si ese estándar personal se mantiene
consistente habrá pocas sorpresas para aquellos familiarizados con el estándar.[1]

Matz lo definió de esta manera en una entrevista [2]:

Todo el mundo tiene un pasado personal. Alguien puede venir de Python, otro de
Perl, y ellos pueden verse sorprendidos por distintos aspectos del lenguaje.
Entonces ellos podrían decir 'Estoy sorprendido por esta característica del lenguaje,
asi que Ruby viola el principio de la menor sorpresa.' Esperad, esperad. El principio
de la menor sorpresa no es solo para ti. El principio de la menor sorpresa significa
el principio de 'mi' menor sorpresa. Y significa el principio de la menor sorpresa
después de que aprendes bien Ruby. Por ejemplo, yo fui un programador de C++
antes de empezar a diseñar Ruby. Yo programé solamente en C++ durante dos o
tres años. Y después de dos años de programar en C++, todavía me sorprendía.

Semántica

Ruby es orientado a objetos: todos los tipos de datos son un objeto, incluidas las
clases y tipos que otros lenguajes definen como primitivas, (como enteros,
booleanos, y "nil"). Toda función es un método. Las variables siempre son
referencias a objetos, no los objetos mismos. Ruby soporta herencia con enlace
dinámico, mixins y métodos singleton (pertenecientes y definidos por un sola
instancia más que definidos por la clase). A pesar de que Ruby no soporta herencia
múltiple, la clases pueden importar módulos como mixins. La sintaxis procedural
está soportada, pero todos los métodos definidos fuera del ámbito de un objeto
son realmente métodos de la clase Object. Como esta clase es padre de todas las
demás, los cambios son visibles para todas las clases y objetos.
Ruby ha sido descrito como un lenguaje de programación multiparadigma: permite
programación procedural (definiendo funciones y variables fuera de las clases
haciéndolas parte del objeto raíz Object), con orientación a objetos, (todo es un
objeto) o funcionalmente (tiene funciones anónimas, clausuras o closures, y
continuations; todas las sentencias tiene valores, y las funciones devuelven la
última evaluación). Soporta introspección, reflexión y metaprogramación, además
de soporte para hilos de ejecución gestionados por el interprete. Ruby tiene
tipificado dinámico, y soporta polimorfismo de tipos (permite tratar a subclases
utilizando la interfaz de la clase padre). Ruby no requiere de polimorfismo de
funciones (sobrecarga de funciones) al no ser fuertemente tipado (los parámetros
pasados a un método pueden ser de distinta clase en cada llamada a dicho
método).

De acuerdo con las preguntas frecuentes de Ruby,5 "Si te gusta Perl, te gustará
Ruby y su sintaxis. Si te gusta Smalltalk, te gustará Ruby y su semántica. Si te gusta
Python, la enorme diferencia de diseño entre Python y Ruby/Perl puede que te
convenza o puede que no."6

Características

      orientado a objetos
      cuatro niveles de ámbito de variable: global, clase, instancia y local.
      manejo de excepciones
      iteradores y clausuras o closures (pasando bloques de código)
      expresiones regulares nativas similares a las de Perl a nivel del lenguaje
      posibilidad de redefinir los operadores (sobrecarga de operadores)
      recolección de basura automática
      altamente portable
      Hilos de ejecución simultáneos en todas las plataformas usando green
       threads
      Carga dinámica de DLL/bibliotecas compartidas en la mayoría de las
       plataformas
      introspección, reflexión y metaprogramación
      amplia librería estándar
      soporta inyección de dependencias
      soporta alteración de objetos en tiempo de ejecución
      continuaciones y generadores

Ruby actualmente no tiene soporte completo de Unicode,7 a pesar de tener
soporte parcial para UTF-8.
Interacción

La distribución oficial de Ruby incluye "irb"(Interactive Ruby Shell), un interprete
interactivo de línea de comandos que puede ser usado para probar código de
manera rápida. El siguiente fragmento de código representa una muestra de una
sesión usando irb:

$ irb
irb(main):001:0> puts "Hola mundo"
Hola mundo
=> nil
irb(main):002:0> 1+2
=> 3

Sintaxis

La sintaxis de Ruby es similar a la de Perl o Python. La definición de clases y
métodos está definida por palabras clave. Sin embargo, en Perl, las variables no
llevan prefijos. Cuando se usa, un prefijo indica el ámbito de las variables. La mayor
diferencia con C y Perl es que las palabras clave son usadas para definir bloques de
código sin llaves. Los saltos de línea son significativos y son interpretados como el
final de una sentencia; el punto y coma tiene el mismo uso. De forma diferente que
Python, la indentación no es significativa.

Una de las diferencias entre Ruby y Python y Perl es que Ruby mantiene todas sus
variables de instancia privadas dentro de las clases y solo la expone a través de
métodos de acceso (attr_writer, attr_reader, etc).

A diferencia de los métodos "getter" y "setter" de otros lenguajes como C++ o Java,
los métodos de acceso en Ruby pueden ser escritos con una sola línea de código.
Como la invocación de estos métodos no requiere el uso de parentesis, es trivial
cambiar una variable de instancia en una función sin tocar una sola línea de código
o refactorizar dicho código. Los descriptores de propiedades de Python son
similares pero tienen una desventaja en el proceso de desarrollo. Si uno comienza
en Python usando una instancia de variable expuesta públicamente y después
cambia la implementación para usar una instancia de variable privada expuesta a
través de un descriptor de propiedades, el código interno de la clase necesitará ser
ajustado para usar la variable privada en vez de la propiedad pública. Ruby elimina
está decisión de diseño obligando a todas las variables de instancia a ser privadas,
pero también proporciona una manera sencilla de declarar métodos set y get.
Esto mantiene el principio de que en Ruby no se puede acceder a los miembros
internos de una clase desde fuera de esta; en lugar de esto se pasa un mensaje (se
invoca un método) a la clase y recibe una respuesta.

Licencia

El intérprete y las bibliotecas están licenciadas de forma dual (inseparable) bajo las
licencias libres y de código abierto GPL y Licencia pública Ruby.8
ACERCA DE RUBY:

¿Te preguntas por qué Ruby es tan popular? Sus fanáticos lo tienen como un
lenguaje hermoso y artístico. Y todavía así, dicen que es práctico y ameno. ¿Por
qué?

Los ideales del creador de Ruby

Ruby es un lenguaje con un balance cuidado. Su creador, Yukihiro “matz”
Matsumoto, mezcló partes de sus lenguajes favoritos (Perl, Smalltalk, Eiffel, Ada, y
Lisp) para formar un nuevo lenguaje que incorporara tanto la programación
funcional como la programación imperativa.




A menudo ha manifestado que está “tratando de hacer que Ruby sea natural, no
simple”, de una forma que se asemeje a la vida real.

Continuando sobre esto, agrega:

Ruby es simple en apariencia, pero complejo por dentro, como el cuerpo humano 1.

Acerca del crecimiento de Ruby

Desde su liberación pública en 1995, Ruby ha atraído devotos desarrolladores de
todo el mundo. En el 2006, Ruby alcanzó reconocimiento masivo, formándose
grupos de usuarios activos en las ciudades más importantes del mundo y llenando
las capacidades de las conferencias relacionadas a Ruby.
Ruby-Talk, la lista de correo más importante sobre el lenguaje Ruby ha crecido
hasta lograr un promedio de 200 mensajes por día.

El índice TIOBE, que mide el crecimiento de los lenguajes de programación, ubica a
Ruby en la posición #13 del ranking mundial. Refiriéndose a su crecimiento,
predicen, “Todo indica que Ruby llegará a estar entre los 10 primeros en menos de
6 meses”. Gran parte de su crecimiento se atribuye a la popularidad alcanzada por
aplicaciones desarrolladas con Ruby, en particular el framework de desarrollo web
Ruby on Rails2.

Ruby es totalmente libre. No sólo gratis, sino también libre para usarlo, copiarlo,
modificarlo y distribuirlo.

Viendo todo como un objeto

Inicialmente, Matz buscó en otros lenguajes para encontrar la sintaxis ideal.
Recordando su búsqueda, dijo, “quería un lenguaje que fuera más poderoso que
Perl, y más orientado a objetos que Python3”.

En Ruby, todo es un objeto. Se le puede asignar propiedades y acciones a toda
información y código. La programación orientada a objetos llama a las propiedades
variables de instancia y las acciones son conocidas como métodos. La orientación a
objetos pura de Ruby se suele demostrar con un simple código que aplica una
acción a un número.

5.times { print "Nos *encanta* Ruby -- ¡es fuera de serie!" }

En muchos lenguajes, los números y otros tipos primitivos no son objetos. Ruby
sigue la influencia del lenguaje Smalltalk pudiendo poner métodos y variables de
instancia a todos sus tipos de datos. Esto facilita el uso de Ruby, porque las reglas
que se aplican a los objetos son aplicables a todo Ruby.
La flexibilidad de Ruby

Ruby es considerado un lenguaje flexible, ya que permite a sus usuarios alterarlo
libremente. Las partes esenciales de Ruby pueden ser quitadas o redefinidas a
placer. Se puede agregar funcionalidad a partes ya existentes. Ruby intenta no
restringir al desarrollador.

Por ejemplo, la suma se realiza con el operador suma (+). Pero si prefieres usar la
palabra sumar, puedes agregar un método llamado sumar a la clase Numeric que
viene incorporada.

class Numeric
 def sumar(x)
   self.+(x)
 end
end

y = 5.sumar 6
# ahora y vale 11

Los operadores de Ruby son simples conveniencias sintácticas para los métodos.
Los puedes redefinir como y cuando quieras.

Los Bloques, una funcionalidad realmente expresiva

Los bloques de Ruby son también vistos como una fuente de gran flexibilidad. El
desarrollador puede anexar una cláusula a cualquier método, describiendo cómo
debe actuar. La cláusula es llamada bloque y se ha convertido en una de las más
famosas funcionalidades para los recién llegados a Ruby que vienen de otros
lenguajes imperativos como PHP o Visual Basic.

Los bloques están inspirados por los lenguajes funcionales. Matz dijo, “en las
cláusulas de Ruby, quise respetar la cultura de Lisp4”.

motores_de_busqueda =
 %w[Google Yahoo MSN].map do |motor|
  "http://www." + motor.downcase + ".com"
 end

En este código, el bloque está descrito entre la construcción do ... end. El método
map aplica el bloque a la lista de palabras provista. Muchos otros métodos en Ruby
dejan abierta la posibilidad al desarrollador para que escriba su propio bloque
describiendo los detalles de qué debe hacer ese método.

Ruby y el Mixin

A diferencia de otros lenguajes de programación orientada a objetos, Ruby se
caracteriza por su intencional herencia simple. Sin embargo, Ruby incorpora el
concepto de módulos (llamados categorías en Objective-C), que son colecciones de
métodos.

Las clases pueden mezclar (mixin) un módulo e incorporar todos sus métodos
gratuitamente. Por ejemplo, cualquier clase que implemente el método each
puede incorporar el módulo Enumerable, que le agrega un conjunto de métodos
que usan each para recorrer sus elementos.

class MiArray
 include Enumerable
end

En general, los Rubyistas ven esto como una forma mucho más clara de herencia
múltiple, que es compleja e incluso puede ser restrictiva.

La apariencia visual de Ruby

A pesar de que Ruby utiliza la puntuación muy limitadamente y se prefieren las
palabras clave en inglés, se utiliza algo de puntuación para decorar el código. Ruby
no necesita declaraciones de variables. Se utilizan convenciones simples para
nombrar y determinar el alcance de las mismas.

      var puede ser una variable local.
      @var es una variable de instancia.
      $var es una variable global.

Estos detalles mejoran la legibilidad permitiendo que el desarrollador identifique
fácilmente los roles de las variables. También se hace innecesario el uso del
molesto self. como prefijo de todos los miembros de instancia.

Más allá de lo básico

Ruby tiene un conjunto de otras funcionalidades entre las que se encuentran las
siguientes:
   manejo de excepciones, como Java y Python, para facilitar el manejo de
    errores.

   un verdadero mark-and-sweep garbage collector para todos los objetos de
    Ruby. No es necesario mantener contadores de referencias en bibliotecas
    externas. Como dice Matz, “Esto es mejor para tu salud”.

   escribir extenciones en C para Ruby es más fácil que hacer lo mismo para
    Perl o Python, con una API muy elegante para utilizar Ruby desde C. Esto
    incluye llamadas para embeber Ruby en otros programas, y así usarlo como
    lenguaje de scripting. También está disponible una interfaz SWIG.

   puede cargar bibliotecas de extensión dinámicamente si lo permite el
    sistema operativo.

   tiene manejo de hilos (threading) independiente del sistema operativo. De
    esta forma, tienes soporte multi-hilo en todas las plataformas en las que
    corre Ruby, sin importar si el sistema operativo lo soporta o no, ¡incluso en
    MS-DOS!

   Ruby es fácilmente portable: se desarrolla mayoritariamente en GNU/Linux,
    pero corre en varios tipos de UNIX, Mac OS X, Windows
    95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc.

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Por qué Ruby
Por qué RubyPor qué Ruby
Por qué Ruby
 
Ruby en linux
Ruby en linuxRuby en linux
Ruby en linux
 
Lenguaje phython
Lenguaje phythonLenguaje phython
Lenguaje phython
 
T1 trabajo1navarrozuaraelisaramosruizpedro
T1 trabajo1navarrozuaraelisaramosruizpedroT1 trabajo1navarrozuaraelisaramosruizpedro
T1 trabajo1navarrozuaraelisaramosruizpedro
 
Scala: un vistazo general
Scala: un vistazo generalScala: un vistazo general
Scala: un vistazo general
 
Scala Overview
Scala OverviewScala Overview
Scala Overview
 
Introducción a DSL (Lenguajes Específicos de Dominios) con Python
Introducción a DSL (Lenguajes Específicos de Dominios) con PythonIntroducción a DSL (Lenguajes Específicos de Dominios) con Python
Introducción a DSL (Lenguajes Específicos de Dominios) con Python
 
Vista aérea de los lenguajes de programación
Vista aérea de los lenguajes de programaciónVista aérea de los lenguajes de programación
Vista aérea de los lenguajes de programación
 
Java jaucito
Java jaucitoJava jaucito
Java jaucito
 
Introducción a Phyton
Introducción a PhytonIntroducción a Phyton
Introducción a Phyton
 
Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajes
 
Intro Java
Intro JavaIntro Java
Intro Java
 
Estandares de Codigo (Emanuel)
Estandares de Codigo (Emanuel)Estandares de Codigo (Emanuel)
Estandares de Codigo (Emanuel)
 
Presentacion idioma phyton (1)
Presentacion idioma phyton (1)Presentacion idioma phyton (1)
Presentacion idioma phyton (1)
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Rust Hour Of Code 2017 - Valladolid
Rust Hour Of Code 2017 - ValladolidRust Hour Of Code 2017 - Valladolid
Rust Hour Of Code 2017 - Valladolid
 
Fund progbd 3_u1_lenguajeprogramacionjava1
Fund progbd 3_u1_lenguajeprogramacionjava1Fund progbd 3_u1_lenguajeprogramacionjava1
Fund progbd 3_u1_lenguajeprogramacionjava1
 
Contratos fuertes y debiles presentacion final
Contratos fuertes y debiles presentacion finalContratos fuertes y debiles presentacion final
Contratos fuertes y debiles presentacion final
 
Lenguajes de programación: Paradigmas de Programación
Lenguajes de programación: Paradigmas de ProgramaciónLenguajes de programación: Paradigmas de Programación
Lenguajes de programación: Paradigmas de Programación
 
Clojure: Java y Lisp, unidos
Clojure: Java y Lisp, unidosClojure: Java y Lisp, unidos
Clojure: Java y Lisp, unidos
 

Andere mochten auch

Laboratorio Probabilidad 1/3
Laboratorio Probabilidad 1/3Laboratorio Probabilidad 1/3
Laboratorio Probabilidad 1/3
cbpresentaciones
 
Scheduling power-aware abstract
Scheduling power-aware abstractScheduling power-aware abstract
Scheduling power-aware abstract
Vincenzo De Maio
 
Introduzione a R
Introduzione a RIntroduzione a R
Introduzione a R
MCalderisi
 
Introduction to R by David Lucy Cap 12-16
Introduction to R by David Lucy Cap 12-16Introduction to R by David Lucy Cap 12-16
Introduction to R by David Lucy Cap 12-16
Luis Pons
 
Ejercicios resueltos en r
Ejercicios resueltos en rEjercicios resueltos en r
Ejercicios resueltos en r
zasque11
 

Andere mochten auch (20)

Laboratorio Probabilidad 1/3
Laboratorio Probabilidad 1/3Laboratorio Probabilidad 1/3
Laboratorio Probabilidad 1/3
 
Linguaggio R, principi e concetti
Linguaggio R, principi e concettiLinguaggio R, principi e concetti
Linguaggio R, principi e concetti
 
R_note_ODE_ver1.0
R_note_ODE_ver1.0R_note_ODE_ver1.0
R_note_ODE_ver1.0
 
Elisa Teodoro, Clase 5, Funciones
Elisa Teodoro, Clase 5, FuncionesElisa Teodoro, Clase 5, Funciones
Elisa Teodoro, Clase 5, Funciones
 
Scheduling power-aware abstract
Scheduling power-aware abstractScheduling power-aware abstract
Scheduling power-aware abstract
 
Elisa Teodoro, Aplicacion de Derivadas, Clase 2
Elisa Teodoro, Aplicacion de Derivadas, Clase 2Elisa Teodoro, Aplicacion de Derivadas, Clase 2
Elisa Teodoro, Aplicacion de Derivadas, Clase 2
 
Introduzione a R
Introduzione a RIntroduzione a R
Introduzione a R
 
Programacion en R
Programacion en RProgramacion en R
Programacion en R
 
Abstract tesi
Abstract tesiAbstract tesi
Abstract tesi
 
Introduction to R by David Lucy Cap 12-16
Introduction to R by David Lucy Cap 12-16Introduction to R by David Lucy Cap 12-16
Introduction to R by David Lucy Cap 12-16
 
Dispositivos secundarios
Dispositivos secundariosDispositivos secundarios
Dispositivos secundarios
 
ECUACIONES DIFERENCIALES CON DERIVE
ECUACIONES DIFERENCIALES CON DERIVEECUACIONES DIFERENCIALES CON DERIVE
ECUACIONES DIFERENCIALES CON DERIVE
 
9 introduzione r
9   introduzione r9   introduzione r
9 introduzione r
 
Ejercicios resueltos en r
Ejercicios resueltos en rEjercicios resueltos en r
Ejercicios resueltos en r
 
An introduction to structural equation models in R using the Lavaan package
An introduction to structural equation models in R using the Lavaan packageAn introduction to structural equation models in R using the Lavaan package
An introduction to structural equation models in R using the Lavaan package
 
Apuntes de prácticas de DERIVE
Apuntes de prácticas de DERIVEApuntes de prácticas de DERIVE
Apuntes de prácticas de DERIVE
 
LENGUAJE DE PROGRAMACION R
LENGUAJE DE PROGRAMACION RLENGUAJE DE PROGRAMACION R
LENGUAJE DE PROGRAMACION R
 
PhD midterm report
PhD midterm reportPhD midterm report
PhD midterm report
 
R Vectors
R VectorsR Vectors
R Vectors
 
R Graphics
R GraphicsR Graphics
R Graphics
 

Ähnlich wie Ruby es un lenguaje de programación interpretado

Ruby en linux
Ruby en linuxRuby en linux
Ruby en linux
vilna2011
 
Lenguajes de programacion orientada a objetos
Lenguajes de programacion orientada a objetosLenguajes de programacion orientada a objetos
Lenguajes de programacion orientada a objetos
RicardoAlbertoSalmor
 
Lenguajes de profgramacion valentina suarez restrepo
Lenguajes de profgramacion valentina suarez restrepoLenguajes de profgramacion valentina suarez restrepo
Lenguajes de profgramacion valentina suarez restrepo
Once Redes
 
Lenguajes programacion
Lenguajes programacionLenguajes programacion
Lenguajes programacion
Xavii Torres
 

Ähnlich wie Ruby es un lenguaje de programación interpretado (20)

Acerca de ruby
Acerca de rubyAcerca de ruby
Acerca de ruby
 
Upel ruby
Upel rubyUpel ruby
Upel ruby
 
Ruby en linux
Ruby en linuxRuby en linux
Ruby en linux
 
Taller evento TestingUY 2016 - Automatización de Pruebas con Ruby
Taller evento TestingUY 2016 - Automatización de Pruebas con RubyTaller evento TestingUY 2016 - Automatización de Pruebas con Ruby
Taller evento TestingUY 2016 - Automatización de Pruebas con Ruby
 
Lenguajes de programacion orientada a objetos
Lenguajes de programacion orientada a objetosLenguajes de programacion orientada a objetos
Lenguajes de programacion orientada a objetos
 
3
33
3
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Tarea3
Tarea3 Tarea3
Tarea3
 
Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011Ruby on Rails - ETyC 2011
Ruby on Rails - ETyC 2011
 
Tabla
TablaTabla
Tabla
 
Tabla
TablaTabla
Tabla
 
Ruby en 2020
Ruby en 2020Ruby en 2020
Ruby en 2020
 
Diccionario 1
Diccionario 1Diccionario 1
Diccionario 1
 
Caracteristicas mas especificas de algunos lenguajes de programacion
Caracteristicas mas especificas de algunos lenguajes de programacionCaracteristicas mas especificas de algunos lenguajes de programacion
Caracteristicas mas especificas de algunos lenguajes de programacion
 
Resumen Capitulo 1 - Sebesta
Resumen Capitulo 1 - Sebesta Resumen Capitulo 1 - Sebesta
Resumen Capitulo 1 - Sebesta
 
Lenguaje ruby
Lenguaje rubyLenguaje ruby
Lenguaje ruby
 
Lenguajes de programacion orientada a objetos
Lenguajes de programacion orientada a objetosLenguajes de programacion orientada a objetos
Lenguajes de programacion orientada a objetos
 
Lenguajes de profgramacion valentina suarez restrepo
Lenguajes de profgramacion valentina suarez restrepoLenguajes de profgramacion valentina suarez restrepo
Lenguajes de profgramacion valentina suarez restrepo
 
Lenguajes programacion
Lenguajes programacionLenguajes programacion
Lenguajes programacion
 
Evoluciýýn de la programaciýýn
Evoluciýýn de la programaciýýnEvoluciýýn de la programaciýýn
Evoluciýýn de la programaciýýn
 

Ruby es un lenguaje de programación interpretado

  • 1. Ruby es un lenguaje de programación interpretado, reflexivo y orientado a objetos, creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995. Combina una sintaxis inspirada en Python y Perl con características de programación orientada a objetos similares a Smalltalk. Comparte también funcionalidad con otros lenguajes de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de programación interpretado en una sola pasada y su implementación oficial es distribuida bajo una licencia de software libre. Historia El lenguaje fue creado por Yukihiro "Matz" Matsumoto, quien empezó a trabajar en Ruby el 24 de febrero de 1993, y lo presentó al público en el año 1995. En el círculo de amigos de Matsumoto se le puso el nombre de "Ruby" (en español rubí) como broma aludiendo al lenguaje de programación "Perl" (perla). La última versión estable de la rama 1.8 es la 1.8.7_p248, de la rama 1.9 es la 1.9.1_p378 . La versión en 1.9 que incorpora mejoras sustanciales en el rendimiento del lenguaje, que se espera queden reflejadas en la próxima versión estable de producción del lenguaje, Ruby 1.9.0.1 Diferencias en rendimiento entre la actual implementación de Ruby (1.8.6) y otros lenguajes de programación más arraigados han llevado al desarrollo de varias máquinas virtuales para Ruby. Entre ésas se encuentra JRuby, un intento de llevar Ruby a la plataforma Java, y Rubinius, un intérprete modelado basado en las máquinas virtuales de Smalltalk. Los principales desarrolladores han apoyado la máquina virtual proporcionada por el proyecto YARV, que se fusionó en el árbol de código fuente de Ruby el 31 de diciembre de 2006, y se dió a conocer como Ruby 1.9 Objetivo El creador del lenguaje, Yukihiro "Matz" Matsumoto, ha dicho que Ruby está diseñado para la productividad y la diversión del desarrollador, siguiendo los principios de una buena interfaz de usuario.2 Sostiene que el diseño de sistemas necesita enfatizar las necesidades humanas más que las de la máquina:3 A menudo la gente, especialmente los ingenieros en computación, se centran en las máquinas. Ellos piensan, "Haciendo esto, la máquina funcionará más rápido. Haciendo esto, la máquina funcionará de manera más eficiente. Haciendo esto..." Están centrados en las máquinas, pero en realidad necesitamos centrarnos en las personas, en cómo hacen programas o cómo manejan las aplicaciones en los ordenadores. Nosotros somos los jefes. Ellos son los esclavos.
  • 2. Ruby sigue el "principio de la menor sorpresa", lo que significa que el lenguaje debe comportarse de tal manera que minimice la confusión de los usuarios experimentados. Matz ha dicho que su principal objetivo era hacer un lenguaje que le divirtiera él mismo, minimizando el trabajo de programación y la posible confusión. Él ha dicho que no ha aplicado el principio de menor sorpresa al diseño de Ruby,4 pero sin embargo la frase se ha asociado al lenguaje de programación Ruby. La frase en sí misma ha sido fuente de controversia, ya que los no iniciados pueden tomarla como que la características de Ruby intentar ser similares a las características de otros lenguajes conocidos. En mayo de 2005 en una discusión en el grupo de noticias comp.lang.ruby, Matz trató de distanciar Ruby de la mencionada filosofía, explicando que cualquier elección de diseño será sorprendente para alguien, y que él usa un estándar personal de evaluación de la sorpresa. Si ese estándar personal se mantiene consistente habrá pocas sorpresas para aquellos familiarizados con el estándar.[1] Matz lo definió de esta manera en una entrevista [2]: Todo el mundo tiene un pasado personal. Alguien puede venir de Python, otro de Perl, y ellos pueden verse sorprendidos por distintos aspectos del lenguaje. Entonces ellos podrían decir 'Estoy sorprendido por esta característica del lenguaje, asi que Ruby viola el principio de la menor sorpresa.' Esperad, esperad. El principio de la menor sorpresa no es solo para ti. El principio de la menor sorpresa significa el principio de 'mi' menor sorpresa. Y significa el principio de la menor sorpresa después de que aprendes bien Ruby. Por ejemplo, yo fui un programador de C++ antes de empezar a diseñar Ruby. Yo programé solamente en C++ durante dos o tres años. Y después de dos años de programar en C++, todavía me sorprendía. Semántica Ruby es orientado a objetos: todos los tipos de datos son un objeto, incluidas las clases y tipos que otros lenguajes definen como primitivas, (como enteros, booleanos, y "nil"). Toda función es un método. Las variables siempre son referencias a objetos, no los objetos mismos. Ruby soporta herencia con enlace dinámico, mixins y métodos singleton (pertenecientes y definidos por un sola instancia más que definidos por la clase). A pesar de que Ruby no soporta herencia múltiple, la clases pueden importar módulos como mixins. La sintaxis procedural está soportada, pero todos los métodos definidos fuera del ámbito de un objeto son realmente métodos de la clase Object. Como esta clase es padre de todas las demás, los cambios son visibles para todas las clases y objetos.
  • 3. Ruby ha sido descrito como un lenguaje de programación multiparadigma: permite programación procedural (definiendo funciones y variables fuera de las clases haciéndolas parte del objeto raíz Object), con orientación a objetos, (todo es un objeto) o funcionalmente (tiene funciones anónimas, clausuras o closures, y continuations; todas las sentencias tiene valores, y las funciones devuelven la última evaluación). Soporta introspección, reflexión y metaprogramación, además de soporte para hilos de ejecución gestionados por el interprete. Ruby tiene tipificado dinámico, y soporta polimorfismo de tipos (permite tratar a subclases utilizando la interfaz de la clase padre). Ruby no requiere de polimorfismo de funciones (sobrecarga de funciones) al no ser fuertemente tipado (los parámetros pasados a un método pueden ser de distinta clase en cada llamada a dicho método). De acuerdo con las preguntas frecuentes de Ruby,5 "Si te gusta Perl, te gustará Ruby y su sintaxis. Si te gusta Smalltalk, te gustará Ruby y su semántica. Si te gusta Python, la enorme diferencia de diseño entre Python y Ruby/Perl puede que te convenza o puede que no."6 Características  orientado a objetos  cuatro niveles de ámbito de variable: global, clase, instancia y local.  manejo de excepciones  iteradores y clausuras o closures (pasando bloques de código)  expresiones regulares nativas similares a las de Perl a nivel del lenguaje  posibilidad de redefinir los operadores (sobrecarga de operadores)  recolección de basura automática  altamente portable  Hilos de ejecución simultáneos en todas las plataformas usando green threads  Carga dinámica de DLL/bibliotecas compartidas en la mayoría de las plataformas  introspección, reflexión y metaprogramación  amplia librería estándar  soporta inyección de dependencias  soporta alteración de objetos en tiempo de ejecución  continuaciones y generadores Ruby actualmente no tiene soporte completo de Unicode,7 a pesar de tener soporte parcial para UTF-8.
  • 4. Interacción La distribución oficial de Ruby incluye "irb"(Interactive Ruby Shell), un interprete interactivo de línea de comandos que puede ser usado para probar código de manera rápida. El siguiente fragmento de código representa una muestra de una sesión usando irb: $ irb irb(main):001:0> puts "Hola mundo" Hola mundo => nil irb(main):002:0> 1+2 => 3 Sintaxis La sintaxis de Ruby es similar a la de Perl o Python. La definición de clases y métodos está definida por palabras clave. Sin embargo, en Perl, las variables no llevan prefijos. Cuando se usa, un prefijo indica el ámbito de las variables. La mayor diferencia con C y Perl es que las palabras clave son usadas para definir bloques de código sin llaves. Los saltos de línea son significativos y son interpretados como el final de una sentencia; el punto y coma tiene el mismo uso. De forma diferente que Python, la indentación no es significativa. Una de las diferencias entre Ruby y Python y Perl es que Ruby mantiene todas sus variables de instancia privadas dentro de las clases y solo la expone a través de métodos de acceso (attr_writer, attr_reader, etc). A diferencia de los métodos "getter" y "setter" de otros lenguajes como C++ o Java, los métodos de acceso en Ruby pueden ser escritos con una sola línea de código. Como la invocación de estos métodos no requiere el uso de parentesis, es trivial cambiar una variable de instancia en una función sin tocar una sola línea de código o refactorizar dicho código. Los descriptores de propiedades de Python son similares pero tienen una desventaja en el proceso de desarrollo. Si uno comienza en Python usando una instancia de variable expuesta públicamente y después cambia la implementación para usar una instancia de variable privada expuesta a través de un descriptor de propiedades, el código interno de la clase necesitará ser ajustado para usar la variable privada en vez de la propiedad pública. Ruby elimina está decisión de diseño obligando a todas las variables de instancia a ser privadas, pero también proporciona una manera sencilla de declarar métodos set y get.
  • 5. Esto mantiene el principio de que en Ruby no se puede acceder a los miembros internos de una clase desde fuera de esta; en lugar de esto se pasa un mensaje (se invoca un método) a la clase y recibe una respuesta. Licencia El intérprete y las bibliotecas están licenciadas de forma dual (inseparable) bajo las licencias libres y de código abierto GPL y Licencia pública Ruby.8
  • 6. ACERCA DE RUBY: ¿Te preguntas por qué Ruby es tan popular? Sus fanáticos lo tienen como un lenguaje hermoso y artístico. Y todavía así, dicen que es práctico y ameno. ¿Por qué? Los ideales del creador de Ruby Ruby es un lenguaje con un balance cuidado. Su creador, Yukihiro “matz” Matsumoto, mezcló partes de sus lenguajes favoritos (Perl, Smalltalk, Eiffel, Ada, y Lisp) para formar un nuevo lenguaje que incorporara tanto la programación funcional como la programación imperativa. A menudo ha manifestado que está “tratando de hacer que Ruby sea natural, no simple”, de una forma que se asemeje a la vida real. Continuando sobre esto, agrega: Ruby es simple en apariencia, pero complejo por dentro, como el cuerpo humano 1. Acerca del crecimiento de Ruby Desde su liberación pública en 1995, Ruby ha atraído devotos desarrolladores de todo el mundo. En el 2006, Ruby alcanzó reconocimiento masivo, formándose grupos de usuarios activos en las ciudades más importantes del mundo y llenando las capacidades de las conferencias relacionadas a Ruby.
  • 7. Ruby-Talk, la lista de correo más importante sobre el lenguaje Ruby ha crecido hasta lograr un promedio de 200 mensajes por día. El índice TIOBE, que mide el crecimiento de los lenguajes de programación, ubica a Ruby en la posición #13 del ranking mundial. Refiriéndose a su crecimiento, predicen, “Todo indica que Ruby llegará a estar entre los 10 primeros en menos de 6 meses”. Gran parte de su crecimiento se atribuye a la popularidad alcanzada por aplicaciones desarrolladas con Ruby, en particular el framework de desarrollo web Ruby on Rails2. Ruby es totalmente libre. No sólo gratis, sino también libre para usarlo, copiarlo, modificarlo y distribuirlo. Viendo todo como un objeto Inicialmente, Matz buscó en otros lenguajes para encontrar la sintaxis ideal. Recordando su búsqueda, dijo, “quería un lenguaje que fuera más poderoso que Perl, y más orientado a objetos que Python3”. En Ruby, todo es un objeto. Se le puede asignar propiedades y acciones a toda información y código. La programación orientada a objetos llama a las propiedades variables de instancia y las acciones son conocidas como métodos. La orientación a objetos pura de Ruby se suele demostrar con un simple código que aplica una acción a un número. 5.times { print "Nos *encanta* Ruby -- ¡es fuera de serie!" } En muchos lenguajes, los números y otros tipos primitivos no son objetos. Ruby sigue la influencia del lenguaje Smalltalk pudiendo poner métodos y variables de instancia a todos sus tipos de datos. Esto facilita el uso de Ruby, porque las reglas que se aplican a los objetos son aplicables a todo Ruby.
  • 8. La flexibilidad de Ruby Ruby es considerado un lenguaje flexible, ya que permite a sus usuarios alterarlo libremente. Las partes esenciales de Ruby pueden ser quitadas o redefinidas a placer. Se puede agregar funcionalidad a partes ya existentes. Ruby intenta no restringir al desarrollador. Por ejemplo, la suma se realiza con el operador suma (+). Pero si prefieres usar la palabra sumar, puedes agregar un método llamado sumar a la clase Numeric que viene incorporada. class Numeric def sumar(x) self.+(x) end end y = 5.sumar 6 # ahora y vale 11 Los operadores de Ruby son simples conveniencias sintácticas para los métodos. Los puedes redefinir como y cuando quieras. Los Bloques, una funcionalidad realmente expresiva Los bloques de Ruby son también vistos como una fuente de gran flexibilidad. El desarrollador puede anexar una cláusula a cualquier método, describiendo cómo debe actuar. La cláusula es llamada bloque y se ha convertido en una de las más famosas funcionalidades para los recién llegados a Ruby que vienen de otros lenguajes imperativos como PHP o Visual Basic. Los bloques están inspirados por los lenguajes funcionales. Matz dijo, “en las cláusulas de Ruby, quise respetar la cultura de Lisp4”. motores_de_busqueda = %w[Google Yahoo MSN].map do |motor| "http://www." + motor.downcase + ".com" end En este código, el bloque está descrito entre la construcción do ... end. El método map aplica el bloque a la lista de palabras provista. Muchos otros métodos en Ruby
  • 9. dejan abierta la posibilidad al desarrollador para que escriba su propio bloque describiendo los detalles de qué debe hacer ese método. Ruby y el Mixin A diferencia de otros lenguajes de programación orientada a objetos, Ruby se caracteriza por su intencional herencia simple. Sin embargo, Ruby incorpora el concepto de módulos (llamados categorías en Objective-C), que son colecciones de métodos. Las clases pueden mezclar (mixin) un módulo e incorporar todos sus métodos gratuitamente. Por ejemplo, cualquier clase que implemente el método each puede incorporar el módulo Enumerable, que le agrega un conjunto de métodos que usan each para recorrer sus elementos. class MiArray include Enumerable end En general, los Rubyistas ven esto como una forma mucho más clara de herencia múltiple, que es compleja e incluso puede ser restrictiva. La apariencia visual de Ruby A pesar de que Ruby utiliza la puntuación muy limitadamente y se prefieren las palabras clave en inglés, se utiliza algo de puntuación para decorar el código. Ruby no necesita declaraciones de variables. Se utilizan convenciones simples para nombrar y determinar el alcance de las mismas.  var puede ser una variable local.  @var es una variable de instancia.  $var es una variable global. Estos detalles mejoran la legibilidad permitiendo que el desarrollador identifique fácilmente los roles de las variables. También se hace innecesario el uso del molesto self. como prefijo de todos los miembros de instancia. Más allá de lo básico Ruby tiene un conjunto de otras funcionalidades entre las que se encuentran las siguientes:
  • 10. manejo de excepciones, como Java y Python, para facilitar el manejo de errores.  un verdadero mark-and-sweep garbage collector para todos los objetos de Ruby. No es necesario mantener contadores de referencias en bibliotecas externas. Como dice Matz, “Esto es mejor para tu salud”.  escribir extenciones en C para Ruby es más fácil que hacer lo mismo para Perl o Python, con una API muy elegante para utilizar Ruby desde C. Esto incluye llamadas para embeber Ruby en otros programas, y así usarlo como lenguaje de scripting. También está disponible una interfaz SWIG.  puede cargar bibliotecas de extensión dinámicamente si lo permite el sistema operativo.  tiene manejo de hilos (threading) independiente del sistema operativo. De esta forma, tienes soporte multi-hilo en todas las plataformas en las que corre Ruby, sin importar si el sistema operativo lo soporta o no, ¡incluso en MS-DOS!  Ruby es fácilmente portable: se desarrolla mayoritariamente en GNU/Linux, pero corre en varios tipos de UNIX, Mac OS X, Windows 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc.