Вы находитесь на странице: 1из 30

Taller de Ruby

Primero que nada tienen que saber que es Ruby.


Ruby es, en lineas generales un lenguaje de programacion orientado a objetos, que es
muy sencillo. Fue diseado para que sea facil de leer y escribir. No se compila, es por eso
que es un lenguaje de guiones o Scripts que es interpretado por un Interprete (en este
caso el interprete de Ruby) para ser ejecutado en tu computadora.
Bueno, antes de seguir quiero que vean que es lo que vamos a necesitar por ahora para el
taller.
1) Se van instalando el Ruby para Windows, yo voy atrabajar usando la version disponible
en http://rubyforge.org/frs/?group_id=167 yo estoy usando la version 1.8.6-26 Final
Release.

Este paquete (que ya se me estan bajando e instalando) contiene el interprete Ruby y un


editor de texto llamado Scite, entre otras utilidades, sobre los cuales nos vamos a centrar
casi totalmente para los ejemplos y contenidos que aprendamos en este taller.
Sepan que vamos a utilizar el Scite como "IDE" para programar en Ruby, aunque no sea
un IDE de ruby en si, sino un editor de textos.
Ahora si, una vez instalado todo, vallan a Inicio----> Todos los programas----> Ruby 18626----->Scite.
Se van a encontrar con algo como esto:

Este es el famoso editor de texto del que les hablaba, con elque van a crear obras
maestras-...... dentro de unas cuantas clases xD.
Les muestro una parte de codigo asi la analisamos y la ejecutamos asi ven como vamos a
trabajar a lo largo del taller =)
Escriban en el editor:
puts 'Hola'

Ahora, para poder ejecutar el programa primero deben guardarlo en su disco, con la
extension *.rb, que es la que tienen todos los scripts de Ruby. Asi que nos vamos a File-->Save As o apretamos Control+S y guardamos el archivo donde queremos (yo les
recomiendo que guarden este y todos los archivos del taller en una misma carpeta, bien

identificada, asi ganan orden y un acceso mas facil para despues no tener que ir buscando
los archibos por la PC --Bajon!--) pero con la extension *.rb.
Por ejemplo puts.rb
Una vez que lo guardaron con la extension *.rb el Scite habra reconocido este archivo

como un script de Ruby por eso ahora podemos ejecutarlo para ver como anda
Asi que
presionen F8, y veran que a la derecha aparecera otra ventana de fondo blanco, en la
quen o van a poder escribir. Esta "nueva ventana blanca" recibe el nombre de terminal y es

donde se ejecutaran todos sus scripts.


Ahora solo resta ejecutar el script, presionando F5 o llendo a Tools--->Go. Para limpiar
esta terminal apreta las teclasShift+F5 ya que cuando ejecutes varios scripts siempre
quedan sus respectivas salidas en esa terminal.
Cuando ejecutes el script tendrias que obtener algo asi en tu terminal:

>ruby puts.rb
Hola
>Exit code: 0

Buenisimo.
La sentencia puts sirve para mostrar strings (string= cadena de texto) en pantalla, si lo
pensas te das cuenta puts = put string = poner cadena de texto.

Espero que me vallan siguiendo, cualqueir cosa me preguntan

Numeros y operaciones en Ruby

En ruby, tenemos distintos tipos de datos que, a grandes rasgos, podemos identificar
como Strings (o cadenas de texto) yNumericos.
Estos ultimos, los subclasificamos por tipo, y distinguimos a los Enteros y
los Reales (tambien llamados de Coma Flotante o Float) que serian los Reales Decimales.
Para trabajar con numeros, hacemos uso de los Operadores Aritmeticos que nos permiten
realizar las operaciones mas comunes, como la suma( + ), la resta( - ), division( / ) y
multiplicacion( * ).
Ahora vamos a ver unos ejemplos para que entiendan mejor como trabajar los numeros
con Ruby.

#Sumar dos numeros y mostrarlos en pantalla:


puts 4 + 4
#Restar dos numeros y mostrarlos en pantalla:
puts 6 - 3
#Multiplicar dos numeros y mostrarlos en pantalla:
puts 8 * 2
#Dividir dos numeros y mostrarlos en pantalla:
puts 3 / 2

Nota: las lineas antecedidas por el simbolo # son comentarios, es decir que esas lineas
seran ignoradas por el interprete. Esto es util, por ejemplo cuando queremos describir que
hace un pedazo de codigo, o comentar algunas lineas del mismo codigo, para que no sean
interpretadas, etc,etc.

Fijense que cuando ejecuten este codigo, les dara como resultado

>ruby operadores.rb
8
3
16
1
>Exit code: 0

Si lo leen, se daran cuenta que la division de 3 con 2, dio como resultado 1 y no 1.5. Esto
es porque los numeros 3 y 2 son numeros Enteros. Para que el resultado sea 1.5 ,
tendriamos que haber puesto 3.0 divido 2, ya que el 3.0 es un numero decimal o de coma
flotante. Hagan la prueba y veran que:

puts 3.0 / 2

Nos devolvera 1.5 de resultado

Operador Mod ( % )
El operador Mod, calcula el resto de una division entre dos numeros. Un ejemplo de su
uso:

puts (5 % 3) # muestra '2' en la salida

Ejecutenlo y veran que nos devolvera el valor 2

Potencia de un numero ( ** )
Ruby, tambien nos facilita el operador ** que sirve para calcular la potencia de un numero.
Por ejemplo, si queremos calcular 3 al cuadrado y 2 al cubo:

puts 3 ** 2
puts 2 ** 3

As de facil muchachos

Variables en Ruby
Bueno, como ya sabran algunos y otros no, basicamente las variables son dates que,
como indica su nombre, pueden variar durante la ejecucion de un programa, ya sea
asignandoles un valor y luego otro, o modificando con algun operador esos valores,
etc,etc.
Estas variables, si bien pueden cambiar el valor de sus datos, siempre mantienen el mismo
tipo de datos, es decir que una variable numerica, ser siempre numerica a lo largo del
programa.
En Ruby, el valor a las variables se asigna as:

# Defino una variable tipo string:


miString = 'Viva Taringa y Caught In My Net'
# Defino una variable tipo entera:
miEntero = 1432
# Defino una variable tipo Real o Decimal:
miReal = 4,5
miReal2 = 4.0 #si pusieramos miReal2 = 4 seria un Entero y no un Decimal o Real
# Definicion de una Constante (El nombre de una constante debe ser escrito
TOTALMENTE en MAYUSCULAS):
CONSTANTE = 5.3

Nota: Sepan que Ruby es "case sensitive" osea que discrimina entre mayusculas y
minusculas, por lo cual no seria igual la variable miReal que miREAL. As que tengan
cuidado y acuerdense y fijense como escriban las variables.

Si prestaron atencion, acaban de ver ejemplos de como declarar variables y constantes,


recuerden que estas ultimas deben llevar el nombre escrito totalmente en mayusculas, sino
Ruby las reconocera como Variables. Tambien observen que a diferencia de otros
lenguajes, en Ruby no es necesario declarar que tipo de datos va a almacenar cada
variable, ya que Ruby se da cuenta por la forma en la que van declarando las mismas
variables, as que resumiendo no se olviden de que:
- Los valores asignados a un string van entre apostrofes ( ' ).
- Las constantes se van a definir EN MAYUSCULAS, de lo contrario ser una variable.

- Los enteros no llevan punto decimal, sino serian definidos como Reales o Decimales

Metodos To_i, To_f y To_s


Estos metodos nos permiten convertir una variable a distintos tipo de datos:
To_i : Convierten en un Entero (en ingles Integer)
To_f : Convierten en un Decimal (en ingles Float)
To_s : Convierten en un String.

Por ejemplo, vamos a definir una variable como string y la convertiremos en Entera, y
luego la vamos a convertir a Decimal.

#Defino el string y luego le asignaremos ese valor convertido en entero a una variable
entera:
miString = '1991'
#Convierto miString en entero y se lo asigno a la variable miEntero:
miEntero = miString.to_i
#Convierto miEntero en Decimal / Real y lo asigno a la variable miReal:
miReal = miEntero.to_f
#Imprimo en pantalla los tres valores de las variables:
puts miReal, miEntero, miString

Lectura de Datos

En las "capitulos" (?) anteriores, usamos el comando "puts", para mostrar los datos en
pantalla. Estos datos, etan definidos por nosotros, dentro del programa, es decir que no
eran ingresados en el momento de ejecucion del script.

Ahora vamos a ver como tomar datos durante la ejecucion de un programa, es aqu

donde gets (get= obtener s=string


xD.

) y el metodo chomp nos simplificaran la existencia

Por ejemplo, vamos a pedir que el usuario ingrese una edad por teclado, se la
asignaremos a una variable y luego mostraremos el valor de esa variable en pantalla:

#ejemplo de Gets y Chomp


puts "Que edad tenes?"
STDOUT.flush
edad = gets.chomp
puts "Su edad es: " + edad +" aos"

Nota: Cuando ejecutes el codigo del ejemplo de Gets y Chomp tendras que hacer clic en la
ventana de output (la salida) del SciTE ya que el programa va a estar esperando que
ingreses tu edad, si no lo haces el programa no va a continuar hasta que ingreses una
edad.

Si vieron atentamente el codigo se daran cuenta que hay una CONSTANTE llamada
"STDOUT" que yo nunca inicializ (es decir, no le asigne ningun valor ni la defin). Esta
constante es una constante interna de Ruby, que almacena todas las salidas del
programa.

STDOUT.flush

El flush es un metodo que lo que hace es limpiar STDOUT para que no quede con basura
de salidas anteriores, es decir que siempre tenes que uzarlo antes de tomar un valor.

edad = gets.chomp

Esta linea de codigo lo que hace es asignar a la variable "edad" el resultado del gets.
Cuando vos tomas un valor con gets, Ruby automaticamente le agrega al final el "\n" que
es el salto de linea, lo que hace el chomp es eliminar ese "\n" almacenado en el gets, asi
que no te olvides de ponerlo!.

Les pongo otro ejemplo as pueden entender mejor lo del STDOUT.

Con este programa vamos a tomar 2 numeros por teclado, y vamos a sumarlos para luego
calcular su promedio.

# Promedio de dos numeros


puts "Ingrese el primer numero: "
STDOUT.flush
numeroA = gets.chomp
puts "Ingrese el segundo numero: "
STDOUT.flush
numeroB = gets.chomp
promedio = numeroA.to_i+numeroB.to_i
puts "El promedio de los dos numeros es: ", promedio /2

Si se fijan, aqui para poder operar con los numeros, tube que convertir los datos
ingresados en Enteros (Integers), ya que, como indica su nombre, gets, toma todos los
valores como STRINGS. Es por eso que tube que convertir con el metodo to_i numeroA y
numeroB para que sean enteros.

Bueno ahora que ya saben variables simples, operaciones con numeros y variables, saben
leer datos por teclado, saben constantes, saben los tipos de datos con los que nos
podemos encontrar, etc. Les voy a dejar algunos ejercicios para que practiquen, y retengan
mejor la sintaxis y lgica.
1) Hagan un programa que, ingresado un numero por teclado correspondiente a horas,
calcule a cuantos minutos equivale.

2) Hagan un programa que pida ingresar 5 numeros, y luego calcule su promedio.

Recuerden convertir todos los numeros con to_i o to_f para poder hacer operaciones.

Mtodos: Manipulacin de objetos


Para Ruby, todo es un objeto (ms adelante voy a dedicar todo un capitulo a objetos y
programacion orientada a objetos, as que, no se preocupen si no entienden ahora) ,
desde las variables (un string, etc) hasta los objetos definidos por el programador.
Entonces, que es un metodo ? un metodo es lo que nos permite manipular un objeto.

Por ejemplo, definimos la variable "a" como String (que en Ruby es tomada en cuenta
como un objeto) y luego usamos el metodo length para obtener su longitud:

a = 'Esta cadena tiene 31 caracteres'


puts a.length

Esto nos va a dar por salida el numero "31", que es la longitud de carcteres (de la A a la Z
+ a ala z + 0 al 9+ el "_" -guion bajo- + el " " -espacio en blanco).
El metodo length es un metodo predefinido por Ruby, es decir, que no lo definimos
nosotros mismos. Mas adelante vamos a ver como definir uno nosotros, manualmente.

Metodos Bang (!)


Y te estaras pregutnando que ***** es un metodo bang ? Un metodo Bang, es un metodo
que no devuelve o muestra el valor de un objeto, sino que lo modifican. Llevan ese
nombre, ya que se los considera peligrosos, por su capacidad de modificar directamente
en el objeto. Como distinguimos en el codigo un metodo bang de uno que no lo es ? Un
metodo bang, siempre lleva al final de su nombre un "!" que hace que modifique al objeto.
Veamos un ejemplo, para que quede mas claro:

#Definimos la variable "a", como string, y la lleno con


#una parte de una cancion de Megadeth xD (Trust)
a = "We lie to each other so much"
#Aclaro que el metodo "upcase" es para ver el valor de un string convertido en
maysculas.
#Usamos el metodo "comun" (no bang), por lo tanto el objeto no se modifica:
b = a.upcase
puts b
puts a
#Usamos un metodo bang (con "!" al final), en consecuencia la propiedad del objeto se
modifica y el string queda convertido TOTALMENTE en maysculas:
c = a.upcase!

puts c
puts a

Pensando en Objetos

Bueno, tanto que prometi hablar de objetos, y ac estamos. Cuando entiendan lo expuesto
en este capitulo, van a entender mejor lo referente a Mtodos, y cuales son las utilidades
de los mismos. Ademas, esto va a cambiar ampliamente la forma en que se planteen la
programacion, ya que van a poder hacer POO (Programacion Orientada a Objetos).

Cuando hablamos de POO, hablamos entre otras cosas, de:


- Abstraccion.
- Encapsulamiento.
- Herencia.
- Polimorfismo.
- Acoplamiento.

La abstraccin
La abstraccin, cuando nos referimos a POO, es la capacidad de poder abstraer las
propiedades y comportamientos comunes para poder representar un objeto.
Por ejemplo, supongamos que vamos a representar un alumno como objeto, entonces si
bien todos los alumnos son diferentes, (algunos altos, otros enanos, rubios, morochos, etc)
tenemos que abstraernos a las propiedades y comportamientos que los hacen alumnos, y
que tienen en comun entre ellos, entonces podremos reconocer que todos los alumnos:
- Van a una escuela determinada.
- Tienen materias.
- Tienen un numero determinado de las mismas.
- Aprueban y Desaprueban sus materias.
- Tienen una calificacion, etc.

Encapsulamiento
Esto significa, que las propiedades de cada objeto son privadas (propias del objeto)

y ajenas a los demas objetos. Ademas, solo se puede acceder a ellas por Mtodos (como
vimos en el capitulo anterior), que pueden ser publicos o privados
Al poner en practica estos conceptos desarrollando un objeto, no nos va a interesar su
funcionamiento interior, sino sus "productos" es decir, lo que hace, lo que nos regresa.

Herencia
Cuando se crean objetos nuevos a partir de otros existentes, estos van a heredar las
propiedades y comportamientos de sus "antecesores" por decir de algun modo. Hay solo
dos tipos de herencia: la Herencia Simple y la Herencia Mltiple.
La herencia es muy usada cuando hacemos POO ya que se puede especificar el

comportamiento de las clases hijas, lo cual nos deja un mejor diseo en el sistema

Polimorfismo
El polimorfismo es la capacidad del objeto de tener mtodos con el mismo nombre, pero
con comportamientos diferentes. Esto es conocido tambien como sobre escritura de
mtodos.

Acoplamiento
Es la medida en que un objeto depende de otro u otros, y mientras menor sea este
acoplamiento, mejor.

Espero que les halla servido, y disculpenme, que les halla puesto esta parte tan "teorica y
nada prctica" pero va a ser necesario que lo entiendan, y sepan para poder entender bien
la POO, ya que Ruby es un lenguaje orientado a objetos.
Ahora si, podemos seguir.

Que es una clase?


Partamos de que un objeto es un contenedor de datos y que a la vez controla el acceso a
los mismos. Encadenados a los objetos, se encuentran los Atributos, que definen sus
caracteristicas. Y luego estan los Mtodos, los cuales son como una "interfaz" para poder
acceder o mejor dicho, interactuar con el objeto.
Las clases se utilizan para construir un objeto. Es decir, que vendrian a ser una especie de

"molde" para hacer objetos. Y cada objeto seria una instancia de la clase

es facil.

Bueno... y resumiendo: ahora ya saben que es un mtodo, que es un objeto, saben en que
consiste la POO y saben que es una clase. As que no van a tener problemas para
entender el siguiente ejemplo, donde vamos a definir una clase, sus metodos, y objetos,
para que puedan aplicar tooodo lo aplicado =).

#Definimos la clase Perro:


class Perro
#"Inicializamos" la clase con el metodo initialize:
def initialize(raza, nombre, edad)
#Aqu van los atributos de la clase
@raza = raza
@nombre = nombre
@edad = edad
end #Fin del mtodo initialize
#Creamos el mtodo ladrar
def ladrar
puts 'Guau Guau'
end #Fin del mtodo ladrar

#Creamos el mtodo saludar


def saludar
puts "Soy un perro de la raza #{@raza} y mi nombre es #{@nombre} y mi edad
es #{@edad}"
end #Fin del mtodo saludar
end #Final de la clase
# Creo el objeto "a" de la clase "Perro" con el metodo new
#y paso los valores como en el mtodo "initialize(raza, nombre, edad)"
#de cuando definimos la clase perro.
a = Perro.new('siberiano','pancho','16')
#Hacemos uso del mtodo saludar, del nuevo objeto "a"
a.saludar
#Hacemos uso del mtodo saludar, del nuevo objeto "a"
a.ladrar

Lean el codigo, que en el mismo, est todo explicado, ya que puse comentarios para que

puedan entenderlo bien


Aclaraciones

Cuando usamos #{@raza} por ejemplo en:

puts "Soy un perro de la raza #{@raza} y mi nombre es #{@nombre} y mi edad


es #{@edad}"

estamos haciendo referencia al atributo raza que definimos en initialize cuando


incializamos la clase, el cual recibe un valor cuando creamos el objeto:

a = Perro.new('siberiano','pancho','16')

siberiano sera el valor del atributo raza


pancho sera el valor del atributo nombre
16 sera el valor del atributo edad
Porque definimos que serian ingresados as, en ese orden, cuando hicimos

initialize(raza, nombre, edad)

Y as fue que los recibieron cuando creamos el objeto:

a = Perro.new('siberiano','pancho','16')

Cualquier duda que tengan, peguen un chifle, y yo se las respondo aca mismo en T!
Espero que les halla gustado, porque me sac mucho esfuerzo, ademas lo escribi toooodo

yo

Criticas, agradecimientos, etc son bienvenidos

Saludos genteeeee!!!

Вам также может понравиться