Diferencia entre revisiones de «Programación en Ruby»

Contenido eliminado Contenido añadido
Dexbot (discusión | contribs.)
m Bot: removing existed iw links in Wikidata
Eliminar parte repetida
Línea 3:
{{Estructurar en subpáginas}}
{{mejorar formato}}
 
== 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 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.
 
== Índice ==
# [[/Introducción|Capítulo 1: Introducción]]
Línea 37 ⟶ 33:
# [[/Ejemplos del lenguaje|Capítulo 21: Ejemplos del lenguaje]]
# [[/Enlaces externos|Capítulo 22: Enlaces externos]]
 
== '''Historia''' ==
[[Archivo:
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 es la 1.8.6, publicada en diciembre de 2007. El 26 de ese mismo mes salió Ruby 1.9.0, una versión en desarrollo 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 dará a conocer como Ruby 1.9.0.1.
<ref>Historia</ref>
 
== '''Tutorial de Instalación ''' ==
 
 
'''<big>Descargando Ruby</big>'''
 
Como lenguaje multiplataforma, Ruby ha sido portado a distintos sistemas operativos y arquitecturas. Esto significa que si tu desarrollas un programa en un PC (por ejemplo), será posible ejecutarlo en otra máquina distinta como es un MAC (por poner otro ejemplo).
 
Las siguientes instrucciones son para instalar Ruby en una PC. Para otras plataformas, ver [http://poignantguide.net/ruby/expansion-pak-1.html este capítulo] de la Why's (poignante) guide to Ruby.
 
La forma más sencilla de instalar Ruby en un PC es mediante el '''Ruby One-Click Installer'''. Después de descargarlo instálalo aceptando todo por defecto. Al instalarse, las Variables de Entorno del Sistema son actualizadas, de tal forma que se incluya el directorio del ejecutable de Ruby: gracias a esto, podrás ejecutarle desde cualquier drectorio en tu PC.
 
La instalación de Ruby incluye la primera edición del libro "Programming Ruby" y el editor SciTe.
 
 
'''<big>Los directorios de la instalación</big>'''
 
Supongamos que la instalación de Ruby fue en '''c:/ruby'''.
 
Esta instalación creó una serie de directorios:
 
''' c:/ruby/bin''' es donde los ejecutables son instalados (incluyendo ruby e irb).
 
'''c:/ruby/lib/ruby/1.8''' aquí están programas escritos en ruby. Estos ficheros son librerías de Ruby: proveen funcionalidades que puedes incorporar en tus programas.
 
'''c:/ruby/lib/ruby/1.8/i386-mswin32''' contiene una serie de extensiones específicas del PC. Los ficheros en esta terminación acaban en .so o .dll (dependiendo de la plataforma). Estos ficheros con extensiones programadas en lenguaje C; dicho de otra forma: son fihceros binarios, compilados durante el proceso de instalación, que se pueden ejecutar desde Ruby.
'''c:/ruby/lib/ruby/site_ruby''' aquí es donde el administrador de tu sistema y/o tú podéis almacenar las extensiones y librerías de terceras partes: código escrito por ti mismo, o por otros.
'''c:/ruby/lib/ruby/gems''' es el sistema Ruby-Gemes, encargado de la instalación de
nuevas herramientas.
'''c:/ruby/src''' es donde se halla el código fuente de Ruby.
 
'''c:/ruby/samples/RubySrc-1.8.6/sample''' aquí podrás encontrar algunos programas ejemplo escritos
en Ruby.
 
 
=== '''Programa "Hola Mundo!"''' ===
 
Arranca el IRB (Interactive Ruby).
 
La pantalla nos muestra:
 
irb(main):001:0>
 
 
Escribe esto: "Hola Mundo" y luego ENTER
 
La pantalla muestra:
 
irb(main):001:0> "Hola Mundo"
=> "Hola Mundo"
 
 
<big>'''¡Ruby te obedeció!'''</big>
 
¿Qué fue lo que pasó? ¿Acaso acabamos de escribir el programa “Hola Mundo” más corto del mundo? No exactamente. La segunda linea sólo es la forma que tiene IRB para decirnos el resultado de la última expresión evaluada. Si queremos que el programa escriba “Hola Mundo” necesitamos un poco más:
 
irb(main):002:0> puts "Hola Mundo"
Hola Mundo
=> nil
 
''puts'' es el comando básico para escribir algo en Ruby. Pero entonces, ¿qué es ese ''=> nil''? Ese es el resultado de la expresión ''puts'' siempre retorna ''nil'', que es el valor que significa “absolutamente nada” en Ruby.
 
== '''Diccionario de Palabras Reservadas, Operadores y Símbolos del Lenguaje''' ==
 
{| class="wikitable" border="1"
|-
! Palabra Reservada
! Función
|-
| alias
| Crea un alias para un operador, método o variable global que ya exista.
|-
| and
| Operador lógico, igual a && pero con menor precedencia.
|-
| break
| Finaliza un ''while'' o un ''until loop'', o un método dentro de un bloque
|-
| case
| Compara una expresión con una clausula ''when'' correspondiente
|-
| class
| Define una clase; se cierra con ''end''.
|-
| def
| Inicia la definición de un método; se cierra con ''end''.
|-
| defined?
| Determina si un método, una variable o un bloque existe.
|-
| do
| Comienza un bloque; se cierra con ''end''.
|-
| else
| Ejecuta el código que continua si la condición previa no es ''true''. Funciona con ''if'',
''elsif'', ''unless'' o case.
|-
| elsif
| Ejecuta el código que continua si la condicional previa no es ''true''. Funciona con ''if'' o ''elsif''.
|-
| end
| Finaliza un bloque de código.
|-
| ensure
| Ejecuta la terminación de un bloque. Se usa detrás del ultimo ''rescue''.
|-
| false
| Lógico o Booleano ''false''.
|-
| true
| Lógico o Booleano ''true''.
|-
| for
| Comienza un loop ''for''. Se usa con ''in''.
|-
| if
| Ejecuta un bloque de código si la declaración condicional es ''true''. Se cierra con ''end''.
|-
| in
| Usado con el loop ''for''.
|-
| module
| Define un modulo. Se cierra con ''end''.
|-
| next
| Salta al punto inmediatamente después de la evaluación del loop condicional
|-
| nil
| Vacio, no inicializado, invalido. No es igual a cero.
|-
| not
| Operador lógico, igual como !.
|-
| or
| Operador lógico, igual a // pero con menor precedencia.
|-
| redo
| Salta después de un loop condicional.
|-
| rescue
| Evalua una expresión después de una excepción es alzada. Usada después de ''ensure''.
|-
| retry
| Cuando es llamada fuera de ''rescue'', repite una llamada a método. Dentro de ''rescue'' salta a un bloque superior.
|-
| return
| Regresa un valor de un método o un bloque.
|-
| self
| Objeto contemporáneo. Alude al objeto mismo.
|-
| super
| Llamada a método del mismo nombre en la superclase.
|-
| then
| Separador usado con ''if'', ''unless'', ''when'', ''case'', y ''rescue''.
|-
| undef
| Crea un método indefinido en la clase contemporánea.
|-
| unless
| Ejecuta un bloque de código si la declaración condicional es ''false''.
|-
| until
| Ejecuta un bloque de código mientras la declaración condicional es ''false''.
|-
| when
| Inicia una clausula debajo de ''under''.
|-
| while
| Ejecuta un bloque de código mientras la declaración condicional es ''true''.
|-
| yield
| Ejecuta un bloque pasado a un método.
|-
| _FILE_
| Nombre del archivo de origen contemporáneo.
|-
| _LINE_
| Numero de la linea contemporánea en el archivo de origen contemporáneo.
|}
 
Los tipos de datos son, como su nombre lo indica, los diversos datos que se pueden almacenar en la memoria usando el lenguaje de programación Ruby. Como en todo lenguaje de programación, se tiene una diferencia en cuanto a estos datos, pues la cantidad de memoria que usan no es similar, y esta diferencia hace que la distinción entre unos y otros sea importante.
 
== Números ==
En ruby, todo es tratado como un objeto, eso no excluye a los números, en forma general, ruby cuenta con diferentes clases para manejar cada tipo de números, por ejemplo:
 
* Integer -> la clase base de donde derivan todos los enteros.
 
* Fixnum -> clase para números enteros, su tamaño depende de la arquitectura de donde se interprete el código, sin embargo, su tamaño es eso -1 bit y usa complemento 2 para su representación en memoria, si un número excede el tamaño asignado, automaticamente se convierte en bignum.
 
* Bignum -> Contiene valores mayores a fixnum, la restricción depende de la arquitectura pero pueden guardarse números muy grandes, tanto como de nuestra memoria, si el número ingresado cabe en un fixnum, automáticamente se convierte a esta clase.
 
* Float -> Almacena números con punto flotante con la arquitectura de doble precisión nativa.
 
* Rational -> Almacena números racionales, es decir, números con un valor de numerador y un denominador.
 
== Strings ==
Para las cadenas de caracteres, su uso es bastante similar al de cualquier lenguaje orientado a objetos, con la clase String, sin embargo cabe mencionar algunas caracteristicas mas emocionantes de ruby, por ejemplo, puedes multiplicar cadenas!
 
“Hola ” * 5
=> “Hola Hola Hola Hola Hola”
 
Para una vista mas completa referirse al capitulo de Strings
 
== Date/Time ==
 
Ruby ya trae librerias para manejar los tipos date y time, sin embargo para usarlos, debemos llamar a la librería correspondiente, esto con la palabra reservada '''require'''.
 
<source lang="ruby">
require ‘date’
</source>
 
Con esto ya podemos usar el tipo Date, este contiene un fecha(dia, mes, año), sin embargo, si deseas agregar la hora debemos hacer uso de otra clase: DateTime, que contiene, además de la fecha, la hora, minutos y segundos de la instancia que creemos.
 
== '''Operaciones de Entrada y Salida ''' ==