You are on page 1of 14

...

o como pasar un buen rato programando

Ruby Tutorial

Leccin 1
Introduccin Instalacin El Primer Programa Nmeros en Ruby Strings y diversin Variables Alcance de las variables

Leccin 2
Introduciendo Datos Normas en los nombres Los m todos Los m todos! argumentos Rangos Arrays

Leccin 3
"lo#ues $%s malabares con strings E&'resiones Regulares (ondicionales "ucles Nmeros Aleatorios

Leccin 4
(lases y )b*etos Accesores +ic,eros! lectura-escritura (argando librer.as /erencia de clases $odi0icando clases (ongelando ob*etos Seriali1ando ob*etos

Leccin 5
(ontrol de acceso E&ce'ciones $dulos (onstantes /as,es y S.mbolos La clase Time

Leccin 6
sel0 Duc2 Ty'ing A1car Sint%ctico Test de unidades

contacto
e3mail t4itter

licencia sitio

Ruby en 15 Minutos
+old Table of Contents 5/ola mundo5 Asignaciones irb y ri Sinta&is variables6 constantes6 m todos677 0unciones6 strings inter'olados6 nmeros De0inicin de 0unciones (lases y ob*etos Todo es un ob*eto8 De0inicin de clases /erencia de clases Accesores (lases! e&tendiendo las clases E&ce'ciones $dulos De0inicin /erencia mlti'le Arrays Arrays! los arrays 'ueden ser usados como 'ilas o colas /as,es 9diccionarios:

"lo#ues e iteradores "lo#ues! de0inicin "lo#ues! sinta&is Iteradores "lo#ues! salvando los blo#ues Estructuras de control case condicionales verdadero y 0also bucles E&'resiones regulares ;nidades de Testeo Por #u Re#uisitos Este resumen est% basado en Ruby (ourse de "rian Sc,r<der7

'Hola mundo'
puts 'Hola mundo' salida! Hola mundo

signaciones
# Toda asignacin devuelve su valor a = 4 # 4 # Las asignaciones se pueden usar en cadena a = b = 4 # 4 a + b # 8 # y usados fichero = cont)linea cont)linea # -ta.os a += / a = a+/ en un test ile!open"'!!#tutor!t$t'% # #& ile'!!#tutor!t$t( = * # * += + ,hile "line = fichero!gets%# nil # 0 # 8

# -signacin en paralelo a1 b = b1 a # 241 83 # 4ividiendo arrays array = 2+1 /3 # 2+1 /3 a1 b = 5array # 2+1 /3

irb y ri

irb! es el int r'rete interactivo de ruby6 donde se 'ueden 'robar al vuelo 'orciones de cdigo7 ri! ,erramienta 'ara acceder a la documentacin7 Por e*em'lo6 'ara documentarnos sobre el m todo tr de la clase 6tring6 'onemos en la l.nea de comandos! ri 6tring#tr

!inta"is
#ariables$ constantes$ m%todos$..
Variables - Mtodos: estudiante6 i6 e'silon6 'iso=grande Las variables y los m todos se 'arecen7 Esto es lgico6 'uesto #ue una variable se 'uede sustitu.r 'or un m todo7 Las variables y los mtodos deben ser escritos en minsculas6 #ue em'iecen 'or una letra6 y #ue contengan cual#uier car%cter al0anum rico o el guin ba*o7 Por e*! piso)grande7 Sin embargo6 las clases deben em'e1ar 'or mayscula7 Adem%s6 a di0erencia de los m todos-variables6 no se usa el guin ba*o 'ara nombres com'uestos7 Por e*! 7iso8rande7 Las clases deben em'e1ar 'or mayscula7 Adem%s6 a di0erencia de los m todos-variables6 no se usa el guin ba*o 'ara nombres com'uestos7 Constantes: PD+=>E?6 R@D@6 PERS)NA=VIAAE Las constantes slo se 'ueden de0inir una ve17 Las constantes deben ser escritas en letras maysculas7 Variables de objeto: Bnombre6 Bma&imo6 B,ora=comer Las variables de ob*eto 9o variables de instancia: slo 'ueden ser le.das-escritas 'or el 'ro'io ob*eto7 Variables de clase: ob*eto6 llave=maestra Las variables de clase no 'ertenecen a los ob*etos6 si no a la clase7 E&isten nicamente en la clase6 y son com'artidas 'or todos los ob*etos7 Variables globlales: Cglobal6 CD6 Ccontador El uso de las variables globales ,a sido declarado un crimen ca'ital 'or la escuela del buen diseEo7 Smbolos: !nombre6 !edad6 !(lase Los s.mbolos son identi0icadores nicos #ue los encontraremos en varios sitios7

&unciones$ strings interpolados$ n'meros


# Las funciones est9n definidas por la palabra clave :def: # Los argumentos pueden tener valores por defecto

def multi)foo"count = ;% 'foo'5count end # Los par<ntesis pueden omitirse1 si la situacin no es ambigua multi)foo";% # :foo foo foo: puts :hola mundo: : hola mundo # 7ara interpolar valores dentro de los strings' # i! =sar comillas dobles # ii! =sar #>!!!? '6imple #>multi)foo"/%?' # 6imple #>multi)foo"/%? :@nterpolado #>multi)foo?: # @nterpolado foo foo foo # ABmeros +* # *!C # /eD4 # *$ # *+* # +* *!C *!***/ 0CC;C 8

(e&inicin de &unciones
Las 0unciones se de0inen 'or la 'alabra clave def def hola"programador% puts :Hola #>programador?: end hola"'7epe'% # Hola 7epe

)lases y ob*etos
+odo es un ob*eto,
8acostmbrate a usar la notacin del "C!0%!round "C!0%!class "C!0%!round!class # 0 # loat # i$num

!m<todo

'un string'!length # E 'un string'!class # 6tring 'pepe dice'!gsub"'p'1't'% # 'tete dice' 'abc'!gsub"'b'1'$$$'%!length # C 2'algunas'1 'cosas'1 'array'3!length 2'algunas'1 'cosas'1 'array'3!reverse # ; # 2'array'1 'cosas'1 'array'3

# -l ser un ob.eto1 el m<todo suma es' +!+"/% # ; # pero para estos casos hay un aFBcar sint9ctico'

+ + /

# ;

(e&inicin de clases
class 7ersona def initialiFe"nombre% Gnombre = nombre end def saludar :Hola1 mi nombre es #>Gnombre?!: end end pepe = 7erson!ne,"'7epe'% puts pepe!saludar # Hola1 mi nombre es 7epe

Herencia de clases
class HatF & 7ersona def initialiFe super"'IuJihiro Hatsumoto'% end end puts HatF!ne,!saludar # Hola1 mi nombre es IuJihiro Hatusmoto

ccesores
Los accesores son 0unciones #ue 'ermiten el acceso a los atributos de un ob*eto7 class 7erro def initialiFe"nombre1 raFa% Gnombre = nombre GraFa = raFa end # para leer las propiedades de un ob.eto def nombre Gnombre end def raFa GraFa end end perro+ = 7erro!ne,"'Trampas'1 'palleiro'% perro+!nombre # Trampas perro+!raFa # palleiro Esto es e#uivalente a!

class 7erro def initialiFe"nombre1 raFa% Gnombre = nombre GraFa = raFa end attr)reader 'nombre1 'raFa end perro+ = 7erro!ne,"'Trampas'1 'palleiro'% perro+!nombre # Trampas perro+!raFa # palleiro Esta es la tabla con el ti'o de accesores6 y su 0uncin! accesor attr=reader attr=4riter funcin lectura escritura

attr=accessor lectura y escritura

)lases- e"tendiendo las clases


En Ruby las clases nunca se consideran cerradas6 y se 'ueden modi0icar al vuelo6 aEadiendo m todos6 variables68 Por e*em'lo6 veamos como aEadir una nueva 0uncionalidad a la clase Integer! class @nteger def fac raise : actoriFacin no definida para #>self?: if self & * return "+!!self%!in.ect"+% >Kresult1iK result5i? end end puts"*!!C%!map>KiK i!fac?!.oin"'1 '% # +1 +1 ;1 01 /41 +/*

."cepciones
La ca'tura se ,ace mediante rescue 'revio uso de begin! begin # Ldigo Mue puede dar problemas rescue LlaseN$cepcion+ =( e$ception+ # 6e e.ecuta si se lanFa una LlaseN$cepcion+ rescue LlaseN$cepcion/ =( e$ception/ # 6e e.ecuta si se lanFa una LlaseN$cepcion/

rescue # Laptura cualMuier e$cepcin ensure # Ldigo Mue siempre se e.ecuta end Para lan1ar una e&e'cin6 usaremos raise

Mdulos
(e&inicin
Los mdulos son similares a las clases en #ue contienen una coleccin de m todos6 constantes y otros mdulos y de0iniciones7 Pero a di0erencia de las clases6 no se 'ueden crear clases derivadas de los mdulos7 # trig!rb module Trig 7@ = ;!+4+0 # m<todos def Trig!sin"$% # !!! end def Trig!cos"$% # !!! end end reMuire 'trig' Trig!sin"Trig''7@#4% # :'': D( 7@#4 de la clas Trig

Herencia m'ltiple
Podemos aEadir 0uncionalidades de distintos mdulos! module 4+ !!! end module 4/ !!! end class LlaseLualMuiera include 4+ include 4/ end

rrays
# -rray literal

2'=n'1 'array'1 'con'1 C1 'entradas'3!.oin"' '% # =n array con C entradas # Auevo array a = -rray!ne, a && 'algunas' && 'cosas' a2/3 a2*3 = ; a # # # # # 23 algunas cosas cosas ; ; cosas

# 6e pueden usar valores por defecto!!! -rray!ne,"41 *% # 2*1 *1 *1 *3 # !!!pero ten cuidado a = -rray!ne,"/1 '6ilJe'% a2*3 && '-mberg' a # 2'6ilJe'1 '6ilJe'3 # 6ilJe -mberg # 2'6ilJe -mberg'1 '6ilJe -mberg'3

rrays- los arrays pueden ser usados como pilas o colas


print '-rray como pila' ' pila = -rray!ne,"% pila!push"'a'% pila!push"'b'% pila!push"'c'% print pila!pop until pila!emptyO print :\n: print '-rray como cola' ' cola = -rray!ne,"% cola!push"'a'%!push"'b'%!push"'c'% print cola!shift until cola!emptyO

# -rray como pila' cba

# -rray como cola' abc

Has/es 0diccionarios1
# Hash literal h* = >'uno' =( +1 'dos' =( /? h*2'uno'3 # + # Pellenando un hash h+ = Hash!ne, #>? h+2'.oya'3 = 'ruby' h+2'fruta'3 = 'banana' h+ # >:.oya:=(:ruby:1 :fruta:=( :banana:? # - menudo1 los sQmbolos se usan como llaves h/ = >'.unio =( 'perl'1 '.ulio =( 'ruby'? h/2'.ulio3 # ruby

2lo3ues e iteradores
2lo3ues- de&inicin

;n blo#ue es una 'ie1a de cdigo6 similar a un 0uncin annima7 ;na 0uncin 'uede usar un blo#ue como argumento7 # =n iterador sencillo1 llamando al bloMue por cada elemento del array 2'soy'1 'un'1 'platano'3!each do KelementoK print elemento1 ' ' end #soy un platano # Rtro iterador muy usado! Nl bloMue modifica el conte$to done fue creado fac = + +!upto"C% do KiK fac 5= i end fac # +/* # Nl resultado del bloMue puede ser usado por Mui<n lo usa!!! 2+1/1;141C3!map> KnumK num5num? # 2+141E1+01/C3 # !!!y puede usarse m9s de un argumento "*!!+**%!in.ect"*%> Kresultado1 numK result + num? #C*C*

2lo3ues- sinta"is
# Los bloMues son encerrados por do KK !!! end 2+1/1;141C3!each do KeK puts e end # o por par<ntesis >KK !!! ? 2+1/1;141C3!map> KeK e5e? Por convencin! usa do || end donde las modi0icaciones sean im'ortantes y {|| } donde el valor de retorno sea im'ortante #2+141E1+C1/C3

4teradores
def f"cont1 SbloMue% valor = + +!upto"cont% do KiK valor = valor 5 i blocJ!call"i1 valor% end end f"C%!do Ki1 f)iK puts :f"#>i?% = #>f)i?: end f"+% = + f"/% = / f";% = 0 f"4% = /4 f"C% = +/*

2lo3ues- sal#ando los blo3ues


class Pepetidor def initialiFe"SbloMue%

GbloMue = bloMue Gcont = * end def repetir Gcont += + GblocJ!call"Gcont% end end repetidor = Pepetidor!ne, do KcontK puts : He has llamado #>cont? veces: end ;!times do repetidor!repetir end He has llamado + veces He has llamado / veces He has llamado ; veces

.structuras de control
case
def saludar"5nombres% # 5 indica nBmero indefinido de argumentos case nombres!length ,hen * :Tue triste1 nadie ha leido mi tutorial: ,hen + :Hola #>nombres?! 7or lo menos una persona Muiere saber Puby: ,hen /!!C :Hola #>nombres!.oin"'1 '%?! 8racias por venir: ,hen 0!!+/ :#>nombres!length? lectores! Uienvenidos a PubyV: else :Wo, #>nombres!length? lectores! Luanta genteV: end end puts saludar"'-le.andro'1 'Luis'1 '7edro'1 '-ntonio'1 '8uido'1 'HatF1 '6atish'% # X lectores! Uienvendios a PubyV

condicionales
Ruby tiene todas las estructuras de control est%ndar7 ? adem%s6 se 'ueden ane&ar a una e&'resin7 # Nstructura de control habitual!!! if "+++ == /% :He gusta la escuela: else :Henuda sorpresaV: end #!!!Mue podemos ane$ar a la derecha :He gusta la escuela!: if "+++ == /% # :He gusta la escuela:

:Henuda sorpresaV: unless "+++ == /% "+++ == /% O 'Lorrecto'''@ncorrecto'

# nil # Lorrecto

prob)lluvia = rand"+**% # 04 "por e.emplo% case prob)lluvia ,hen *!!!+* then :7robabilidad m9s ba.a: ,hen +*!!!C* then :Ua.a probabilidad: ,hen C*!!!E* then :-lta probabilidad: ,hen E*!!!+** then :7robabilidad m9s alta: end # -lta probabilidad

#erdadero y &also
Fnicamente

nil y false son 0alsosG todo lo dem%s6 es verdadero7

def es)true"valor% puts valor O true ' false end # nil es)true"false% es)true"nil% es)true"true% es)true"+% es)true"*% es)true"2*1+1/3% es)true"'a'!!'F'% es)true"''% es)true"'un)simbolo% # # # # # # # # # false false true true true true true true true

bucles
Ruby tiene donde elegir en las construcciones de bucles6 H'ero no ,ay #ue olvidarse de los blo#uesI i = + # +

,hile "i & +*% i 5=/ end # nil puts i # +0 i 5= / ,hile "i & +**% puts i begin i 5= / end ,hile "i & +**% puts i # nil # +/8

# nil # /C0

i 5=/ until "i (= +***% # nil puts i # +*/4 loop do

breaJ i if "i (= 4***% i 5= / end # 4*E0 puts i # 4*E0 4!times do i 5= / end puts i r = 23 for i in *!!X ne$t if i Y / == * r && i end puts r # 4 # 0CC;0 # 23

# *!!X # 2+1 ;1 C1 X3

# Los bloMues pueden simplificar muchas cosas "*!!X%!select> KiK Y / V= *? # 2+1 ;1 C1 X3

."presiones regulares
En las e&'resiones regulares! Se 'onen entre / / (ual#uier caracter concuerda con si mismo6 e&ce'to \/^$|.+*?()[]\{\} #ue tienen distintas 0unciones dentro de las e&'resiones7 Para 'oder buscarlos6 ,ay #ue usar la secuencia de esca'e J7 P7 e*! JJ6 J-68 ^ busca el 'rinci'io de una l.nea6 $ busca el 0inal de una l.nea . busca cual#uier car%cter Si a,b o o o o o son e&'resiones regulares6 entonces! ab es tambi n una e&'resin regular aK es una e&'resin regular #ue busca el caparazn de a a+ es e#uivalente a aaK a|b busca a L b Las e&'resiones 'ueden ser agru'adas 'or 'ar ntesis7 P7 e*!

#"aKb%c# # busca >'ac'1 'bc? #aKbc# # busca >'a'1 'bc'? [caracteres busca un rango de caracteres7 #2aDF-DZ*DE3# # busca los caracteres alfanum<ricos [!caracteres busca los caracteres #ue N) 'ertenecen al rango7 Ata*os 'ara los rangos!

atajo rango

J4 JR Js JS

MN3OA3Pa31Q MSN3OA3Pa31Q MJtJnJrJ0Q MS JtJnJrJ0Q

5nidades de +esteo
El testeo de unidades es un m todo 'ara testear el cdigo en 'e#ueEos tro1os7

6or 3u%
Signi0ica #ue nunca tendr%s el 'roblema de crear un error mientras solucionas otro7 Signi0ica #ue no tendr%s #ue e*ecutar tu 'rograma y *ugar con l 9lo #ue es lento: 'ara arreglar los errores7 El testeo de unidades es muc,o m%s r%'ido #ue el Ttesteo manualT7 (onociendo cmo usar las unidades de test6 abre el mundo al driven development7

Re3uisitos
(argar la biblioteca 5test-unit5 /acer #ue la clase a testear sea una subclase de Test''=nit''TestLase Escribir los m todos con el 're0i*o test) A0irmar 9assert: las cosas #ue decidas #ue sean ciertas7 E*ecutar los tests y corregir los errores ,asta #ue desa'are1can7

reMuire 'test#unit' class Hi7rimerTest & Test''=nit''TestLase def test)de)verdad assert true end end

You might also like