Diferencia entre revisiones de «Ruby»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
corregí un error de ortografia
Etiqueta: posible problema
Diegusjaimes (discusión · contribs.)
m Revertidos los cambios de 189.139.103.205 a la última edición de D'ohBot
Línea 1: Línea 1:
{{otros usos|Carácter ruby|la notación de ayuda a la lectura|el lenguaje de programación}}
gh,jjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
{{Ficha de lenguaje de programación
|nombre = Ruby
|logo = [[Archivo:Ruby logo.svg|105px]]
|paradigma = [[Lenguaje de programación multiparadigma|multiparadigma]], [[orientado a objetos]]
|año = 1995
|diseñador = [[Yukihiro Matsumoto]]
|última_versión = 1.9.1_p378
|fecha_última_versión = Febrero de 2010
|tipo_dato = fuerte, dinámico
|implementaciones = [http://en.wikipedia.org/wiki/Ruby_MRI MRI], [http://es.wikipedia.org/wiki/JRuby JRuby], [ Rubinius], [http://en.wikipedia.org/wiki/Ironruby IronRuby], [http://rubystuff.org/ludicrous/ Ludicrous], [http://en.wikipedia.org/wiki/YARV YARV]
|dialectos =
|influido_por = [[Perl]], [[Smalltalk]], [[Python]], [[lenguaje de programación Eiffel|Eiffel]]
|ha_influido = [[Groovy (Lenguaje de Programación)|Groovy]]
}}

'''Ruby''' es un [[lenguaje de programación]] [[lenguaje interpretado|interpretado]], [[reflexión (programación)|reflexivo]] y [[Programación orientada a objetos|orientado a objetos]], creado por el programador [[Japón|japonés]] [[Yukihiro Matsumoto|Yukihiro "Matz" Matsumoto]], quien comenzó a trabajar en Ruby en [[1993]], y lo presentó públicamente en [[1995]]. Combina una sintaxis inspirada en [[Python]], [[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]] [[lenguaje interpretado|interpretado]] en una sola pasada y su implementación oficial es distribuida bajo una [[Ruby#Licencia|licencia]] de [[software libre]].

== Historia ==
El lenguaje fue creado por [[Yukihiro Matsumoto|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 [[Lenguaje de programación Java|Java]], y [[Rubinius]], un [[intérprete (informática)|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 Matsumoto|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.<ref>[http://www.informit.com/articles/article.asp?p=18225 El lenguaje de programación Ruby por Yukihiro Matsumoto(informit.com)]</ref> Sostiene que el diseño de sistemas necesita enfatizar las necesidades humanas más que las de la máquina:<ref>[http://www.artima.com/intv/ruby4.html La filosofía de Ruby, una conversación con Yukihiro Matsumoto, Parte I por Bill Venners 29-09-2003 (Artima Developer)]</ref>

{{cita|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,<ref>[http://www.artima.com/intv/ruby4.html La filosofía de Ruby, Una conversación con Yukihiro Matsumoto, Parte I por Bill Venners 29-09-2003 (Artima Developer)]</ref> 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.[http://www.rubyweeklynews.org/20050529]

Matz lo definió de esta manera en una entrevista [http://www.artima.com/intv/ruby4.html]:
{{cita|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 [[entero]]s, booleanos, y "nil"). Toda [[función (programación)|función]] es un [[Método (programación orientada a objetos)|método]]. Las variables siempre son referencias a objetos, no los objetos mismos. Ruby soporta [[Herencia (programación orientada a objetos)|herencia]] con [[enlace dinámico]], [[mixin]]s y [[singleton|métodos singleton]] (pertenecientes y definidos por un sola [[Instancia (programación)|instancia]] más que definidos por la clase). A pesar de que Ruby no soporta [[herencia múltiple]], la clases pueden importar [[Módulo (programación)|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 [[Programación funcional|funcionalmente]] (tiene funciones anónimas, [[Clausura (informática)|clausuras o closures]], y [[continuation]]s; todas las sentencias tiene valores, y las funciones devuelven la última evaluación). Soporta [[Introspección (programación|introspección]], [[Reflexión (informática)|reflexión]] y [[metaprogramación]], además de soporte para [[Hilo de ejecución|hilos de ejecución]] gestionados por el interprete. Ruby tiene [[tipo de dato|tipificado]] dinámico, y soporta [[Polimorfismo (programación orientada a objetos)|polimorfismo]] de tipos (permite tratar a subclases utilizando el interfaz de la clase padre). Ruby no requiere de [[Polimorfismo (programación orientada a objetos)|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,<ref>[http://faq.rubygarden.org/ Ruby FAQ]</ref> "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."<ref>[http://faq.rubygarden.org/entry/show/14 ¿Cómo se compara Ruby con Python? (FAQ)]</ref>

== Características ==
* [[orientado a objetos]]
* cuatro niveles de ámbito de [[Variable (programación)|variable]]: global, clase, instancia y local.
* [[manejo de excepciones]]
* [[Iterador (patrón de diseño)|iteradores]] y [[Clausura (informática)|clausuras o closures]] (pasando bloques de código)
* [[expresión regular|expresiones regulares]] nativas similares a las de [[Perl]] a nivel del lenguaje
* posibilidad de redefinir los operadores (sobrecarga de operadores)
* [[recolector de basura|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 [[Biblioteca de enlace dinámico|DLL]]/[[Biblioteca (programación)|bibliotecas compartidas]] en la mayoría de las plataformas
* introspección, [[Reflexión (informática)|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
* [[continuación|continuaciones]] y [[generadores]]

Ruby actualmente no tiene soporte completo de [[Unicode]], 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:

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

== 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 [[biblioteca (programación)|bibliotecas]] están licenciadas de forma dual (inseparable) bajo las licencias [[Software libre|libres]] y de [[código abierto]] [[Licencia púbica general de GNU|GPL]] y Licencia pubica Ruby.<ref>[http://www.ruby-lang.org/en/LICENSE.txt Licencia Ruby]</ref>

== Véase también ==
{{Portal|Software libre}}
* [[RubyGems]] (gestor de paquetes para Ruby)
* [[Ruby on Rails]] (framework orientada a aplicaciones web en Ruby)
* [[JRuby]] (implementación en Java del intérprete de Ruby)
* [[Orientado a objetos]] (Programación orientada a objetos)

== Referencias ==
{{listaref|2}}

== Enlaces externos ==
* [http://www.ruby-lang.org Sitio web principal de Ruby]
* [http://www.ruby-lang.org/es/ Sitio web principal de Ruby] español
* [http://www.4shared.com/dir/6728315/b68b2f19/rubyfacil.html Ruby Fácil] libro en castellano de Diego F. Guillen-Nakamura con licencia [[Creative Commons]].
* [http://www.rubycentral.com Ruby central] Recursos sobre Ruby en Inglés.
* [http://rubytutorial.wikidot.com/ Ruby Tutorial] tutorial en castellano de Ruby.
* [http://www.rubycentral.com/book/ Programming Ruby], David Thomas y Andrew Hunt.
* [http://rubyargentina.soveran.com/home Ruby Argentina] Comunidad Argentina de Ruby
* [http://www.rubylit.com.ar/wiki/show/HomePage RubyLit] Comunidad del Litoral Argentino de Ruby
* [http://www.meshplex.org/wiki/Ruby/Ruby_on_Rails_programming_tutorials Full Ruby on Rails Tutorial]
* [http://www.netbeans.org/features/ruby/index.html NetBEANS IDE]
* [http://rubytutorial.wikidot.com/ Tutorial en Español] Para comenzar con Ruby en Español.

[[Categoría:Lenguajes de programación orientada a objetos]]
[[Categoría:Lenguajes interpretados|Ruby]]
[[Categoría:Compiladores e interpretadores libres]]

[[ar:روبي (لغة برمجة)]]
[[bat-smg:Ruby]]
[[bg:Ruby]]
[[bn:রুবি (প্রোগ্রামিং ভাষা)]]
[[ca:Ruby]]
[[ckb:روبی]]
[[cs:Ruby (programovací jazyk)]]
[[da:Ruby (programmeringssprog)]]
[[de:Ruby (Programmiersprache)]]
[[en:Ruby (programming language)]]
[[eo:Ruby (programlingvo)]]
[[et:Ruby (programmeerimiskeel)]]
[[eu:Ruby]]
[[fa:روبی]]
[[fi:Ruby]]
[[fr:Ruby]]
[[gl:Ruby]]
[[he:Ruby]]
[[hr:Ruby (programski jezik)]]
[[hu:Ruby]]
[[ia:Ruby (linguage de programmation)]]
[[id:Ruby (bahasa pemrograman)]]
[[it:Ruby]]
[[ja:Ruby]]
[[ka:რუბი (პროგრამირების ენა)]]
[[ko:루비 (프로그래밍 언어)]]
[[lt:Ruby]]
[[ms:Ruby]]
[[my:Ruby Programming Language]]
[[nl:Ruby (programmeertaal)]]
[[nn:Ruby]]
[[no:Ruby]]
[[pl:Ruby (język programowania)]]
[[pt:Ruby (linguagem de programação)]]
[[ro:Ruby]]
[[ru:Ruby]]
[[sk:Ruby (programovací jazyk)]]
[[sr:Руби (програмски језик)]]
[[sv:Ruby]]
[[ta:ரூபி]]
[[tg:Руби]]
[[th:ภาษารูบี]]
[[tr:Ruby (programlama dili)]]
[[uk:Ruby]]
[[vi:Ruby (ngôn ngữ lập trình)]]
[[zh:Ruby]]
[[zh-yue:Ruby程式語言]]

Revisión del 21:21 20 abr 2010

Ruby
Yukihiro Matsumoto
https://www.ruby-lang.org/
Información general
Extensiones comunes rb y rbw
Paradigma multiparadigma, orientado a objetos
Apareció en 1995
Diseñado por Yukihiro Matsumoto
Última versión estable 1.9.1_p378 (Febrero de 2010)
Sistema de tipos fuerte, dinámico
Implementaciones MRI, JRuby, [ Rubinius], IronRuby, Ludicrous, YARV
Influido por Perl, Smalltalk, Python, Eiffel
Ha influido a Groovy
Licencia Licencia Ruby

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, 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.[1]​ Sostiene que el diseño de sistemas necesita enfatizar las necesidades humanas más que las de la máquina:[2]

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,[3]​ 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 el 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,[4]​ "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."[5]

Características

Ruby actualmente no tiene soporte completo de Unicode, 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 pubica Ruby.[6]

Véase también

Referencias

Enlaces externos