Primeras notas que he tomado aprendiendo Ruby con el fantástico libro Programming Ruby.
Ejecutando código ruby.
Podemos escribir código interactivamente desde la consola de comandos o escribirlo en un fichero y luego ejecutarlo (programa), que es lo más apropiado para código complejo o que queramos guardar.
- Interactivamente:
- En la consola escribir ruby -> expresión -> ^D (control+D).
% ruby
puts "Hello, world!"
^DHello, world!
Apropiado para ejecutar expresiones sencillas.
- En la consola escribir irb -> expresiones
% irb
irb(main):001:0> def sum(n1, n2)
irb(main):002:1> n1 + n2
irb(main):003:1> end
=> nil
irb(main):004:0> sum(3, 4)
=> 7
irb(main):005:0> sum("cat", "dog")
=> "catdog"
Irb (interactive ruby) contiene algunas características avanzadas para trabajar interactivamente, por ej va mostrando los resultados de los comandos. Para salir poner exit
- En la consola escribir ruby -> expresión -> ^D (control+D).
- Programas:
Suelen tener la extensión .rb. En la primera linea se le puede poner la ruta a Ruby y así los sistemas *nix lo pueden ejecutar directamente (acordarse de hacer el fichero ejecutable). Es en la manera que yo suelo trabajar, aunque sólo sea para hacer pruebas.Documentación:
Tiene un sistema llamado RDoc. Puede ser exportado a HTML facilmente. http://www.ruby-doc.org contiene toda la documentación Rdoc de Ruby. Para acceder a ésta documentación interactivamente se usa el comando ri ClassNameOrMethod
Nociones básicas de Ruby
En Ruby todo es un objeto:
Escribir por pantalla:
En lineas diferentes:one
thwoEn la misma linea:
onethwo
Con formato:Number: 1.23
String: helloLeer por pantalla:
Variables y constantes
Convención para distinguir el uso de las variables:
- Local variables, method parameters, and method names:
mi_variable
_mi_variable - Global variables:
$mi_variable - Instance variables:
@mi_variable - Class variables:
@@mi_variable - Class names, module names:
MyClassOrModule - Constants:
CONSTANT_PI
Acceso:
Para acceder a una variable o metodo dentro de una clase: clase.var_o_met
Para acceder a una constante dentro de una clase: clase::CONSTANTECon dobles comillas busca substituciones:
And good night,
Grandma‘Good night, ‘ + name es lo mismo que “Good night, #{name}”
Si es variable global, de instancia, o de clase no hacen falta los corchetes:Tambien podemos meter código:
Las variables contienen referencias a objetos, no objetos:
Si queremos evitar estos alias:
Para evitar modificaciones a un objeto:
comprobar si una variable está definida:
Símbolos
Los símbolos son una manera interna de Ruby de manejar strings, también accesible al programador. Se definen con dos puntos delante:
:a
:book
:”Here’s how to make a symbol with spaces in it.”Consumen menos recursos que un string, pero son inmutables (no podemos añadir, borrar o modificarlos).
Cuando creamos una variable x, Ruby automáticamente crea el símbolo :x
Son apropiados como argumentos para métodos y especialmente como hash keys. También si vamos a utilizar una palabra muchas veces en el código sin ser modificada mejor que sea un símbolo.
Arrays:
One\tThwo
wilma
great gazooOne Thwo
wilma
great gazooHashes:
Estructuras de control:
if:
case:
while / begin:
loop:
1
2
3
4for/Do:
Alteradores de flujo:
retry: vuelve a empezar desde el primer elemento de la condición
redo: vuelve a empezar desde el elemento que estaba
next: salta al siguiente elemento
break: cancela la iteraciónBloques:
Son trozos de código que pueden ser definidos entre do y end o entre llaves.Se puede utilizar para hacer callbacks, pasar trozos de código, o implementar iteraciones.
hola
hola
hola
hola
holaEjemplos de bloques:
Muchos de los métodos de las librerías de Ruby que devuelven sucesivos elementos (iteradores) utilizan estos bloques. Ej:
cat dog horse *****3456abcde
collect crea un array a partir de otro:
inject acumula valores a traves de los elementos de un array
Procs
Son una manera de guardar trozos de código (blocks) en variables, o pasarlas a métodos.
Cheers!
Cheers!
Cheers!Los blocks, como ya hemos visto, pueden recibir variables
I *really* like chocolate!
I *really* like Ruby!De ésta manera podemos hacer cosas que los métodos no nos permiten, como escribir una función que haga ‘algo’ dos veces, sin saber de antemano qué es ese ‘algo’.
<wink>
<wink>
<glance>
<glance>
Podemos enviar acciones y bloques como parámetros a las funciones. Se indica poniendo un & a la variable (las convierte automáticamente a procs).
acciones:
bloques:
Yum! I just love apple pies, don ' t you?
Yum! I just love cherry pies, don ' t you?
1 is NOT an even number!
3 is NOT an even number!
5 is NOT an even number!Podemos hacer de varias formas:
Expresiones Regulares:
Metodos:
Si no se indica un return devuelve el valor de la última sentencia:
Convención: en minusculas y palabras separadas por _. Normalmente si un método actua como una pregunta se le suele poner un ? (is_instance_of?). Si puede ser peligrosa o modifica al que la llama se le pone un ! (collect!). Si puede asignar un valor se le pone un = (duration=)
En el caso de querer pasar parametros entre funciones sin saber cuales son esos parámetros, basta con poner un * a la variable.
Aliasing
Define un nuevo nombre para referirse a un metodo, operador, variable o expresión regular. Si luego el original cambia el aliased conserva el original.
Clases
Métodos de clase
Un método no tiene poque ir siempre asociado a un objeto, puede ir asociado a la clase en sí. Por ejemplo el método new (se llama para crear una nueva instancia, por lo cual la instancia no puede existir). Otro ejemplo: para crear nuevas canciones, podemos detectar si existe el hardware necesario, de otra manera no tendría sentido crear el nuevo objeto:
- Local variables, method parameters, and method names:












