|
| 1 | +--- |
| 2 | +layout: page |
| 3 | +title: "Acerca de Ruby" |
| 4 | +lang: es |
| 5 | +--- |
| 6 | + |
| 7 | +¿Te preguntas por qué Ruby es tan popular? Sus fanáticos lo tienen como |
| 8 | +un lenguaje hermoso y artístico. Y todavía así, dicen que es práctico y |
| 9 | +ameno. ¿Por qué? |
| 10 | + |
| 11 | +### Los ideales del creador de Ruby |
| 12 | + |
| 13 | +Ruby es un lenguaje con un balance cuidado. Su creador, [Yukihiro “matz” |
| 14 | +Matsumoto][1], mezcló partes de sus lenguajes favoritos (Perl, |
| 15 | +Smalltalk, Eiffel, Ada, y Lisp) para formar un nuevo lenguaje que |
| 16 | +incorporara tanto la programación funcional como la programación |
| 17 | +imperativa. |
| 18 | + |
| 19 | + |
| 22 | + |
| 23 | +A menudo ha manifestado que está “tratando de hacer que Ruby sea |
| 24 | +natural, no simple”, de una forma que se asemeje a la vida real. |
| 25 | + |
| 26 | +Continuando sobre esto, agrega: |
| 27 | + |
| 28 | +> Ruby es simple en apariencia, pero complejo por dentro, como el cuerpo |
| 29 | +> humano<sup>[1](#fn1)</sup>. |
| 30 | +
|
| 31 | +### Acerca del crecimiento de Ruby |
| 32 | + |
| 33 | +Desde su liberación pública en 1995, Ruby ha atraído devotos |
| 34 | +desarrolladores de todo el mundo. En el 2006, Ruby alcanzó |
| 35 | +reconocimiento masivo, formándose grupos de usuarios activos en las |
| 36 | +ciudades más importantes del mundo y llenando las capacidades de las |
| 37 | +conferencias relacionadas a Ruby. |
| 38 | + |
| 39 | +{: style="padding-left:8px;"} |
| 42 | +{: style="float:right"} |
| 43 | + |
| 44 | +Ruby-Talk, la [lista de correo](/es/community/mailing-lists/) más |
| 45 | +importante sobre el lenguaje Ruby ha crecido hasta lograr un promedio de |
| 46 | +200 mensajes por día. |
| 47 | + |
| 48 | +El índice TIOBE, que mide el crecimiento de los lenguajes de |
| 49 | +programación, ubica a Ruby en la posición #13 del ranking mundial. |
| 50 | +Refiriéndose a su crecimiento, predicen, “Todo indica que Ruby llegará a |
| 51 | +estar entre los 10 primeros en menos de 6 meses”. Gran parte de su |
| 52 | +crecimiento se atribuye a la popularidad alcanzada por aplicaciones |
| 53 | +desarrolladas con Ruby, en particular el framework de desarrollo web |
| 54 | +Ruby on Rails<sup>[2](#fn2)</sup>. |
| 55 | + |
| 56 | +Ruby es [totalmente libre](./license.txt). No sólo gratis, sino también |
| 57 | +libre para usarlo, copiarlo, modificarlo y distribuirlo. |
| 58 | + |
| 59 | +### Viendo todo como un objeto |
| 60 | + |
| 61 | +Inicialmente, Matz buscó en otros lenguajes para encontrar la sintaxis |
| 62 | +ideal. Recordando su búsqueda, dijo, “quería un lenguaje que fuera más |
| 63 | +poderoso que Perl, y más orientado a objetos que |
| 64 | +Python<sup>[3](#fn3)</sup>”. |
| 65 | + |
| 66 | +En Ruby, todo es un objeto. Se le puede asignar propiedades y acciones a |
| 67 | +toda información y código. La programación orientada a objetos llama a |
| 68 | +las propiedades *variables de instancia* y las acciones son conocidas |
| 69 | +como *métodos*. La orientación a objetos pura de Ruby se suele demostrar |
| 70 | +con un simple código que aplica una acción a un número. |
| 71 | + |
| 72 | + 5.times { print "Nos *encanta* Ruby -- ¡es fuera de serie!" } |
| 73 | +{: .code .ruby-code} |
| 74 | + |
| 75 | +En muchos lenguajes, los números y otros tipos primitivos no son |
| 76 | +objetos. Ruby sigue la influencia del lenguaje Smalltalk pudiendo poner |
| 77 | +métodos y variables de instancia a todos sus tipos de datos. Esto |
| 78 | +facilita el uso de Ruby, porque las reglas que se aplican a los objetos |
| 79 | +son aplicables a todo Ruby. |
| 80 | + |
| 81 | +### La flexibilidad de Ruby |
| 82 | + |
| 83 | +Ruby es considerado un lenguaje flexible, ya que permite a sus usuarios |
| 84 | +alterarlo libremente. Las partes esenciales de Ruby pueden ser quitadas |
| 85 | +o redefinidas a placer. Se puede agregar funcionalidad a partes ya |
| 86 | +existentes. Ruby intenta no restringir al desarrollador. |
| 87 | + |
| 88 | +Por ejemplo, la suma se realiza con el operador suma (`+`). Pero si |
| 89 | +prefieres usar la palabra *sumar*, puedes agregar un método llamado |
| 90 | +`sumar` a la clase `Numeric` que viene incorporada. |
| 91 | + |
| 92 | + class Numeric |
| 93 | + def sumar(x) |
| 94 | + self.+(x) |
| 95 | + end |
| 96 | + end |
| 97 | + |
| 98 | + y = 5.sumar 6 |
| 99 | + # ahora y vale 11 |
| 100 | +{: .code .ruby-code} |
| 101 | + |
| 102 | +Los operadores de Ruby son simples conveniencias sintácticas para los |
| 103 | +métodos. Los puedes redefinir como y cuando quieras. |
| 104 | + |
| 105 | +### Los Bloques, una funcionalidad realmente expresiva |
| 106 | + |
| 107 | +Los bloques de Ruby son también vistos como una fuente de gran |
| 108 | +flexibilidad. El desarrollador puede anexar una cláusula a cualquier |
| 109 | +método, describiendo cómo debe actuar. La cláusula es llamada *bloque* y |
| 110 | +se ha convertido en una de las más famosas funcionalidades para los |
| 111 | +recién llegados a Ruby que vienen de otros lenguajes imperativos como |
| 112 | +PHP o Visual Basic. |
| 113 | + |
| 114 | +Los bloques están inspirados por los lenguajes funcionales. Matz dijo, |
| 115 | +“en las cláusulas de Ruby, quise respetar la cultura de |
| 116 | +Lisp<sup>[4](#fn4)</sup>”. |
| 117 | + |
| 118 | + motores_de_busqueda = |
| 119 | + %w[Google Yahoo MSN].map do |motor| |
| 120 | + "http://www." + motor.downcase + ".com" |
| 121 | + end |
| 122 | +{: .code .ruby-code} |
| 123 | + |
| 124 | +En este código, el bloque está descrito entre la construcción `do ... |
| 125 | +end`. El método `map` aplica el bloque a la lista de palabras provista. |
| 126 | +Muchos otros métodos en Ruby dejan abierta la posibilidad al |
| 127 | +desarrollador para que escriba su propio bloque describiendo los |
| 128 | +detalles de qué debe hacer ese método. |
| 129 | + |
| 130 | +### Ruby y el Mixin |
| 131 | + |
| 132 | +A diferencia de otros lenguajes de programación orientada a objetos, |
| 133 | +Ruby se caracteriza por su intencional herencia simple. Sin embargo, |
| 134 | +Ruby incorpora el concepto de módulos (llamados categorías en |
| 135 | +Objective-C), que son colecciones de métodos. |
| 136 | + |
| 137 | +Las clases pueden mezclar (mixin) un módulo e incorporar todos sus |
| 138 | +métodos gratuitamente. Por ejemplo, cualquier clase que implemente el |
| 139 | +método `each` puede incorporar el módulo `Enumerable`, que le agrega un |
| 140 | +conjunto de métodos que usan `each` para recorrer sus elementos. |
| 141 | + |
| 142 | + class MiArray |
| 143 | + include Enumerable |
| 144 | + end |
| 145 | +{: .code .ruby-code} |
| 146 | + |
| 147 | +En general, los Rubyistas ven esto como una forma mucho más clara de |
| 148 | +herencia múltiple, que es compleja e incluso puede ser restrictiva. |
| 149 | + |
| 150 | +### La apariencia visual de Ruby |
| 151 | + |
| 152 | +A pesar de que Ruby utiliza la puntuación muy limitadamente y se |
| 153 | +prefieren las palabras clave en inglés, se utiliza algo de puntuación |
| 154 | +para decorar el código. Ruby no necesita declaraciones de variables. Se |
| 155 | +utilizan convenciones simples para nombrar y determinar el alcance de |
| 156 | +las mismas. |
| 157 | + |
| 158 | +* `var` puede ser una variable local. |
| 159 | +* `@var` es una variable de instancia. |
| 160 | +* `$var` es una variable global. |
| 161 | + |
| 162 | +Estos detalles mejoran la legibilidad permitiendo que el desarrollador |
| 163 | +identifique fácilmente los roles de las variables. También se hace |
| 164 | +innecesario el uso del molesto `self.` como prefijo de todos los |
| 165 | +miembros de instancia. |
| 166 | + |
| 167 | +### Más allá de lo básico |
| 168 | + |
| 169 | +Ruby tiene un conjunto de otras funcionalidades entre las que se |
| 170 | +encuentran las siguientes: |
| 171 | + |
| 172 | +* manejo de excepciones, como Java y Python, para facilitar el manejo de |
| 173 | + errores. |
| 174 | +^ |
| 175 | + |
| 176 | +* un verdadero mark-and-sweep garbage collector para todos los objetos |
| 177 | + de Ruby. No es necesario mantener contadores de referencias en |
| 178 | + bibliotecas externas. Como dice Matz, “Esto es mejor para tu salud”. |
| 179 | +^ |
| 180 | + |
| 181 | +* escribir extenciones en C para Ruby es más fácil que hacer lo mismo |
| 182 | + para Perl o Python, con una API muy elegante para utilizar Ruby desde |
| 183 | + C. Esto incluye llamadas para embeber Ruby en otros programas, y así |
| 184 | + usarlo como lenguaje de scripting. También está disponible una |
| 185 | + interfaz SWIG. |
| 186 | +^ |
| 187 | + |
| 188 | +* puede cargar bibliotecas de extensión dinámicamente si lo permite el |
| 189 | + sistema operativo. |
| 190 | +^ |
| 191 | + |
| 192 | +* tiene manejo de hilos (threading) independiente del sistema operativo. |
| 193 | + De esta forma, tienes soporte multi-hilo en todas las plataformas en |
| 194 | + las que corre Ruby, sin importar si el sistema operativo lo soporta o |
| 195 | + no, ¡incluso en MS-DOS! |
| 196 | +^ |
| 197 | + |
| 198 | +* Ruby es fácilmente portable: se desarrolla mayoritariamente en |
| 199 | + GNU/Linux, pero corre en varios tipos de UNIX, Mac OS X, Windows |
| 200 | + 95/98/Me/NT/2000/XP, DOS, BeOS, OS/2, etc. |
| 201 | + |
| 202 | +#### Referencias |
| 203 | + |
| 204 | +<sup>1</sup> Matz, hablando en la lista de correo Ruby-Talk, [12 de mayo |
| 205 | +del 2000][2]. |
| 206 | +{: #fn1} |
| 207 | + |
| 208 | +<sup>2</sup> Mira la página de [Ruby on Rails][3] para averiguar más. |
| 209 | +{: #fn2} |
| 210 | + |
| 211 | +<sup>3</sup> Matz, en [An Interview with the Creator of Ruby][4], 29 de |
| 212 | +noviembre del 2001. |
| 213 | +{: #fn3} |
| 214 | + |
| 215 | +<sup>4</sup> Matz, en [Blocks and Closures in Ruby][5], 22 de diciembre |
| 216 | +del 2003. |
| 217 | +{: #fn4} |
| 218 | + |
| 219 | + |
| 220 | + |
| 221 | +[1]: http://www.rubyist.net/~matz/ |
| 222 | +[2]: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/2773 |
| 223 | +[3]: http://rubyonrails.org/ |
| 224 | +[4]: http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html |
| 225 | +[5]: http://www.artima.com/intv/closures2.html |
0 commit comments