Beruflich Dokumente
Kultur Dokumente
Introduccin
Ruby es un lenguaje interpretado, orientado a objetos creado por Yukihiro Matsumoto (Matz), 1995 !ltima "ersi#n estable 1 9 1, 11$%&$&%%9 'odos los tipos de datos son un objeto, incluidas las clases, tipos primiti"os
GSyC 2009
*os comentarios comienzan por +,+ -tra .orma) /begin c#digo comentado /end
Primer programa
# Programa en ruby puts'Hola Ruby' x=1 puts(x)
0ada instrucci#n se escribe en una l1nea di.erente, no es necesario +2+
Primer programa
8eclaraci#n de una .unci#n
# Programa en ruby def hola(nombre) puts "hola #{nombre}" end hola('Ruby') x=1 puts(x)
(l resultado de ejecutar este programa es) hola Ruby 1
GSyC 2009
5ustituci#n de la "ariable
Script de Ruby
<n script de ruby debe comenzar con una primera l1nea 4ue indi4ue d#nde se encuentra el int6rprete de ruby)
#+*usr*b%n*ruby "# #Programa en ruby def hola(nombre) puts "hola #{nombre}" end hola('Ruby') =ichero m%Programa)rb
(l .ichero debe ser ejecutable 3o es muy portable ya 4ue depende del directorio donde se haya instalado ruby
GSyC 2009
Ayuda ri
Re.erencia interacti"a) herramienta 4ue muestra descripciones de los m6todos, clases y m#dulos prede.inidos en Ruby
! r% ,tr%ng)-ap%tal%.e """""""""""""""""""""""""""""""""""""""""""""""""""""" ,tr%ng#-ap%tal%.e str)-ap%tal%.e =! ne#/str """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Returns a -opy of /str/ #%th the f%rst -hara-ter -on0erted to upper-ase and the rema%nder to lo#er-ase) "hello")-ap%tal%.e "H1223")-ap%tal%.e "1&4567")-ap%tal%.e #=! "Hello" #=! "Hello" #=! "1&4ab-"
GSyC 2009
puts saludo('5l%-%a')
GSyC 2009
Asignaciones especiales
(n Ruby casi cual4uier cosa de"uel"e un "alor @s1, pueden encadenarse asignaciones)
a = b = - = (:
@signaci#n paralela)
a9 b = b9 a # %nter-amb%a a y b
Identi icadores
Cariables locales, nombres de m6todos y par:metros de m6todos comienzan por letra min>scula o por D)
; l%sta9 n/max%mo9 num
10
Ejercicio
(j1) Realiza un programa en Ruby 4ue de.ina una .unci#n cuyo "alor de retorno sea una cadena de caracteres similar a)
G (l producto de ? por y es z
8onde ? e y pueden ser "alores cuales4uiera 4ue se le pasan a la .unci#n como par:metros y z/?Hy (l programa calcular: el producto de los n>meros 5 y I e imprimir: la cadena de caracteres) +(l producto de 5 por I es J%+
GSyC 2009
11
Arrays
0olecci#n de re.erencias a objetos inde?ados por un entero (l 1ndice del primer elemento es %
G *iteral)
a = D19 '-at'9 4)1(E # aDFE=1: aD1E="-at": aD&E=4)1( a = D'uno'9 'dos'9 'tres'E # aDFE="uno": aD1E="dos": aD&E="tres" a = G#(uno dos tres) # G#H array de palabras
G 0rear un array de cierto tamaKo cuyas posiciones est:n incializadas como re.erencias a un cierto objeto
a = 5rray)ne#(1F9 'aa') aDFE$$ 'b'
# aDFE="aa": aD1E="aa": I : aDJE="aa" # aDFE="aab": aD1E="aab": I : aDJE="aab"
GSyC 2009
12
=! =! =! =! =! =! =! =! =! =! =! =! =!
D4)1(9 5rray 4 4)1( "hola" 1 n%l 1 D19 49 D49 K9 D49 KE DLE DK9 L9
"hola"9 1E
K9 L9 JE LE
JE
a=
4)1(
"hola"
GSyC 2009
GSyC 2009
14
Array"join y String"split
D"a"9 "b"9 "-"E)No%n D"a"9 "b"9 "-"E)No%n(" ") D"a"9 "b"9 "-"E)No%n(""") D"a"9 "b"9 "-"E)No%n(""O"") D19 &9 4E)No%n D19 &9 49 "hola"E)No%n "hola a todos")spl%t "1&*11*&FFP")spl%t("*") =! =! =! =! =! =! "ab-" "a b -" "a"b"-" "a"O"b"O"-" "1&4" "1&4hola"
GSyC 2009
15
#as$
5imilar a un array, se puede utilizar cual4uier objeto como 1ndice o cla"e
h = {'uno' =! 19 'dos' =! &9 'tres' =! 4} puts hD'uno'E puts hD'dos'E puts hD'tres'E # Cmpr%me 1 # Cmpr%me & # Cmpr%me 4
<n hash de"uel"e n%l cuando se utiliza un 1ndice para el 4ue no se ha de.inido un "alor en ese hash <n array es m:s e.iciente 4ue un hash, pero un hash permite mayor .le?ibilidad
GSyC 2009
16
Ejecucin condicional
9=
%f a$1F then x= 'menor Que 1F' els%f a!=1F and a$=&F then x='entre 1F y &F' else x='mayor Que &F' end x = %f a$1F then 'menor els%f a!=1F and 'entre else 'mayor end Que 1F' a$=&F then 1F y &F' Que &F'
%f de"uel"e el "alor de la >ltima e?presi#n ejecutada la palabra then solo es obligatoria si el %f se escribe en una sola l1nea la palabra then puede sustituirse (si se 4uiere) por el car:cter H <na condici#n es cierta si su e"aluaci#n es cual4uier cosa sal"o false o n%l (objeto 4ue representa +nada+) G (l "alor % no es false, es m:s, es true (LsorpesaM) ; ; ; G
GSyC 2009
17
GSyC 2009
18
G *a cl:usula else) si no se cumple alguna de las condiciones anteriores G *as cl:usulas #hen pueden lle"ar o no al .inal then o H (como el i.)
x = -ase % #hen 19 &))K then puts "menor Que #hen R))1F then puts "mayor Que -ase str #hen 'aaa'9 'bbb' puts 'aaa or bbb' #hen *def* puts "%n-luye *def*" else puts "7ualQu%er -osa" end 19
R"
R" end
GSyC 2009
%ucles
PQ9*(
#h%le l%ne = gets # I end beg%n # I end #h%le l%ne = gets
<3'9*
unt%l not (l%ne = gets) # I end beg%n # I end unt%l -$1FF
=-R)
Modi.icadores)
- = & #h%le - $ 1FFF - = - O end - = & - = - O- #h%le - $ 1FFF
GSyC 2009
20
E&presiones regulares
=orma de especi.icar un patr#n de caracteres 4ue se encuentra en una cadena) $patr#n$ @bre"iaturas para clases de caracteres)
Sd SV Ss S, S# SX -ualQu%er -arT-ter -ualQu%er -arT-ter -ualQu%er -arT-ter -ualQu%er -arT-ter -ualQu%er -arT-ter m%nWs-ulas) -ualQu%er -arT-ter numUr%-o del F al J ex-epto los numUr%-os del F al J "#h%tespa-e" (blan-o9 tabulador9 f%n de l8nea9 f%n de f%-hero ex-epto los "#h%tespa-e" prop%o de una palabra (letras y nWmeros9 mayWs-ulas sal0o los prop%os de una palabra
(jemplos)
*PerlYPython* *P(erlYython)* *SdSdHSdSdHSdSd* *Perl OPython* *Perl 'Python* # "Perl" o "Python" # "Perl" o "Python" # ddHddHdd9 eNH 1&H&4H(K # "Perl" F Z mTs espa-%os "Python" # "Perl" 1 Z mTs espa-%os "Python"
GSyC 2009
21
E&presiones regulares
-perador de b>s4ueda de una patr#n) =
G Rusca un determinado patr#n en una cadena de caracteres 8e"uel"e la posici#n donde lo encuentra o nil G (jemplo, l%ne es una cadena)
%f l%ne = *PerlYPython* puts "2enguaNe #{l%ne}" end
(?traer patrones)
*()O) ()O)* = D<19 <&E "hola ruby" =! F =! D"hola"9 "ruby"E =! *nombreH"()O)"* =! #$>at-hVataHFx(F&-1f-F! =! "ruby"
GSyC 2009
22
GSyC 2009
%lo'ues
<n blo4ue es un conjunto de instrucciones 4ue puede asociarse a una llamada de un m6todo, como si .uera un par:metro <n blo4ue se de.ine entre lla"es o entre las palabras reser"adas doIend
C! ndo e" #es!"t do es i$po#t nte
;ara asociar un blo4ue a un m6todo, el blo4ue se escribe a continuaci#n de la llamada al m6todo (despu6s de los par:metros 4ue hubiera 4ue pasar al m6todo) 8entro de un m6todo se utiliza la instrucci#n y%eld para ejecutar el blo4ue asociado al m6todo *os blo4ues pueden tener sus propios argumentos, 4ue se pasar:n en el y%eld
GSyC 2009
24
Ejemplo de blo'ue
)*ec!t e" '"o(!e soci do " $+todo llama/al/bloQue
def llama/al/bloQue puts "7om%en.a el mUtodo" y%eld y%eld puts "?%n del mUtodo" end llama/al/bloQue {puts "6loQue"}
def llama/al/bloQue puts "7om%en.a el mUtodo" y%eld("hola"94) puts "?%n del mUtodo" end
25
Iteradores
M6todos 4ue de"uel"en sucesi"amente elementos pertenecientes a una colecci#n, por ejemplo, un array o un rango de n>meros - #i '"e "oc " (!e to$
%o# i in ni$ "es do p!ts i end
GSyC 2009
26
Ejemplos de iteradores
D'yo'9 'soy'9 'un'9 'plTtano'E)each do YentryY pr%nt entry9 ' ' end fa-=1 1)upto(K) do Y%Y fa-O=% end fa=! 1 =! 1&F
2ev!e"ve !n n!evo ## y desp!+s de ite# # so'#e "os e"e$entos de" ## y y e*ec!t # e" '"o(!e con c d !no de e""os/
27
()s ejemplos
3te# ci.n ent#e ente#os desde 0 n-1
()times do Y%Y puts %O=& end 4)upto(R) {Y%Y pr%nt % } ('a')) 'e'))each {Y-harY pr%nt -har } a=G#(a b -) a)collect {YxY x)su-- } a
4is$ %!ncion "id d (!e $ p
=! D"a"9 "b"9 "-"E =! D"b"9 "-"9 "d"E =! D"a"9 "b"9 "-"E =! D"a"9 "b"9 "-"E =! D"5"9 "6"9 "7"E =! D"5"9 "6"9 "7"E
28
()s ejemplos
: s # !n '"o(!e co$o p #;$et#o de !n %!nci.n
def f(-ount9 [blo-\) 0alue = 1 1)upto(-ount) do Y%Y 0alue = 0alue O% blo-\)-all(%9 0alue) end end f K do Y%9 f/%Y puts "f(#{%})= #{f/%}" end )*ec!t e" '"o(!e blo-\
def f(-ount) 0alue = 1 1)upto(-ount) do Y%Y 0alue = 0alue O% y%eld(%9 0alue) end end f(K) do Y%9 f/%Y puts "f(#{%})= #{f/%}" end
GSyC 2009
29
Ejercicios
(j&) (scribe una .unci#n iterador n/t%mes (!e "" $e '"o(!e n veces/
def n/t%mes(n) # I end
!n
(jJ) <tilizando %nNe-t de un rango de n>meros escribe una .unci#n 4ue calcule nM
def fa-(n) # I end
(jT) (scribe una .unci#n 4ue calcule la cadena m:s larga dentro de un array
def longest/str%ng(array) # I end
GSyC 2009 < "ongit!d de !n c den de c # cte#es p!ede s 'e#se !ti"i0 ndo5 a="hola" a)length
30
!lases y *bjetos
*os nombres de clases comienzan con la primera letra en may>scula (l m6todo ne# crea un nue"o objeto de una determinada clase
s=,tr%ng)ne#
'odas las clases heredan de la clase 3bNe-t (n ruby todo son objetos y por tanto, pueden in"ocarse sus m6todos de la siguiente .orma) obNeto)metodo
G *os hemos estado usando)
] l%ne)gsub(I)9 1)upto(4)9 x)up-ase
Ruby dispone de un recolector de basura 4ue se encarga de destruir los objetos cuando ya no se usan
GSyC 2009
31
Ejemplos de objetos
(()R))round (()R))-lass (()R))round)-lass "()-lass 'hola')length 'hola')-lass 'hola')gsub('h'9 'm') D'esto'9 'es'9 'un'9 'array'E)length =! =! =! =! K ?loat ?%xnum ?%xnum
=! ( =! ,tr%ng =! "mola" =! (
GSyC 2009
!lases y objetos
(n algunos lenguajes de programaci#n orientados a objetos)
G *os objetos son datos G *as clases son tipos de datos
=! =! =! =! =! =!
5e pueden in"ocar los m6todos de las clases, como se in"ocan los m6todos de los objetos)
,tr%ng)ne# ,tr%ng)methods =! "" =! D"%nspe-t"9 "pr%0ate/-lass/method"9 "-onst/m%ss%ng"9 "-lone"9 "method"9 "publ%-/methods"9 I E
GSyC 2009
34
Cariable al%-%a 4ue es un nue"o objeto de la clase Persona 5e construye llamando a %n%t%al%.e de Persona
GSyC 2009
35
sel
8entro de un m6todo de una clase self es una re.erencia al objeto sobre el 4ue dicho m6todo se ha in"ocado self puede utilizarse para in"ocar otros m6todos, pero no para in"ocar atributos Muchas "eces utilizar self es redundante
-lass Persona ))) def nue0o/saludo/1 ",aludo 1H " ' saludo end def nue0o/saludo/& ",aludo &H " ' self)saludo end end
GSyC 2009
36
#erencia
*a clase >uNer hereda de la clase Persona) (s una especializaci#n de Persona)
-lass >uNer $ Persona def %n%t%al%.e (nombre9 edad9 n/partos9 0%0a=true) super(nombre9 edad9 0%0a) =n/partos = n/partos end end puts >uNer)ne#("V%ana"9 &&9 F))saludo m = >uNer)ne#(">ar%sa"9 (F9 1) m)%nspe-t # de0uel0e el %d del obNeto # y las 0ar%ables de %nstan-%a
5e in"oca dentro de un m6todo para ejecutar el m6todo del mismo nombre en la clase padre (n este caso se llama al constructor de Persona 0rea un objeto de tipo >uNer e imprime en la salida est:ndar +Me llamo 8iana y tengo && aKos+
37
Sobrecarga de m,todos
Ruby no permite la sobrecarga de m6todos)
G <na clase no puede tener dos m6todos con el mismo nombre y di.erente n>mero de par:metros 5i los tiene, s#lo ser: ":lido el >ltimo 4ue tenga de.inido G 5#lo puede e?istir un constructor por clase
GSyC 2009
38
(,todos de clase
=uncionan sin necesidad de ser in"ocados a partir de una determinada instancia
G M6todo neU) persona= Persona)ne# G M6todo para borrar un .ichero) ?%le)delete("nombre")
8e.inici#n de un m6todo de clase -tras .ormas de de.inir m6todos de clase
-lass 1Nemplo def self)metodo/de/-lase end -lass $$self def metodo/de/-lase end end
end
GSyC 2009
39
*bjetos y atributos
*os atributos de una instancia del objeto ;ersona son pri"ados y s#lo los m6todos de una instancia tienen acceso a ellos ;ara 4ue una instancia pueda mostrar el contenido de sus atributos es necesario de.inir
G M6todos 4ue muestren el "alor de los atributos
-lass Persona def %n%t%al%.e(nombre9 edad9 0%0a=true) =nombre9 =edad9 =0%0a = nombre9 edad9 0%0a 8e.iniciones e4ui"alentes end def nombre =nombre -lass Persona end attr/reader Hnombre9 Hedad9 H0%0a def edad def %n%t%al%.e(nombre9 edad9 0%0a=true) =edad =nombre9 =edad9 =0%0a = nombre9 edad9 0%0a end end def 0%0a end =0%0a end end 40
GSyC 2009
*bjetos y atributos
;ara 4ue una instancia pueda modi.icar el contenido de sus atributos desde .uera de los m6todos de dicha instancia, es necesario de.inir
G M6todos 4ue modi.i4uen el "alor de los atributos
-lass Persona def %n%t%al%.e(nombre9 edad9 0%0a=true) =nombre9 =edad9 =0%0a = nombre9 edad9 0%0a end 8e.iniciones e4ui"alentes def edad=(nue0a) =edad=nue0a end -lass Persona end attr/#r%ter Hedad def %n%t%al%.e(nombre9 edad9 0%0a=true) =nombre9 =edad9 =0%0a = nombre9 edad9 0%0a end end
GSyC 2009
41
Ejemplo
-lass Persona attr/#r%ter Hedad attr/reader Hnombre9 Hedad9 H0%0a def %n%t%al%.e(nombre9 edad9 0%0a=true) =nombre9 =edad9 =0%0a = nombre9 edad9 0%0a end end p=Persona)ne#("dan%el"9 &) puts "1l nombre es #{p)nombre}" p)edad '=1 puts "#{p)nombre} t%ene #{p)edad} a^os"
GSyC 2009
42
*bjetos y atributos
0rear .unciones de lectura y modi.icaci#n para los atributos de una clase)
-lass Persona attr/a--essor Hnombre9 Hedad9 H0%0a def %n%t%al%.e(nombre9 edad9 0%0a=true) =nombre9 =edad9 =0%0a = nombre9 edad9 0%0a end end
GSyC 2009
43
Smbolos
(s un objeto 4ue puede ser representado por un n>mero o por una cadena de caracteres
; Hab- es un objeto 5ymbol y se interpreta como +la cosa llamada abc+
5e utilizan para representar nombres y cadenas de caracteres *os s1mbolos ahorran memoria y tiempo
G ;ara crear una tabla hash)
] h= {Hnombre =! "Pepe"9 Hema%l =! "pepe=gsy-)es"}
44
!ontrol de acceso
(n Ruby la >nica .orma de cambiar el estado de un objeto es a tra"6s de sus m6todos 0ontrolando el acceso a los m6todos, se controla el acceso al estado del objeto (?isten J ni"eles de protecci#n)
G (,todos p-blicos) cual4uiera puede llamarlos ;or de.ecto son todos p>blicos (sal"o %n%t%al%.e) G (,todos protegidos) s#lo pueden llamarlos los objetos de la clase de.inida y sus subclases (l acceso 4ueda controlado dentro de esa .amilia de objetos G (,todos privados) s#lo los puede in"ocar el propio objeto 3o se puede llamar a los m6todos pri"ados de otro objeto, incluso si el objeto 4ue los llama es de la misma clase 4ue el otro objeto ;or ello, s#lo se permite in"ocar un m6todo pri"ado en la .orma m()))) y no en la .orma o)m()))), para ning>n o (Lni si4uiera selfM)
GSyC 2009
45
46
Ejemplo
-lass Persona def nombre '>ar%sa' end def apell%do '2ope.' end def nombre/-ompleto -onstruye/nombre end def -onstruye/nombre nombre ' " " ' apell%do end
Hnombre/-ompleto H-onstruye/nombre 47
GSyC 2009
Ejemplo
-lass Persona def nombre '>ar%sa' end def apell%do '2ope.' end end prote-ted def nombre/-ompleto -onstruye/nombre end pr%0ate def -onstruye/nombre nombre ' " " ' apell%do end end 48
Persona5--Publ%-o tiene los mismos m6todos de Persona por4ue los ha heredado ;ermite 4ue se ejecute nombre/-ompleto a tra"6s del m6todo p>blico nombre/-ompleto/publ%-o ;ermite 4ue se ejecute -onstruye/nombre a tra"6s del m6todo p>blico -onstruye/nombre/publ%-o
-lass Persona5--Publ%-o $ Persona def nombre/-ompleto/publ%-o self)nombre/-ompleto end def -onstruye/nombre/publ%-o -onstruye/nombre end
GSyC 2009
Ejemplo
-lass Persona def nombre '>ar%sa' end def apell%do '2ope.' end end prote-ted def nombre/-ompleto -onstruye/nombre end pr%0ate def -onstruye/nombre nombre ' " " ' apell%do end end 49
;or ser un m6todo pri"ado, no puede in"ocarse sobre ning>n objeto (Lni si4uiera selfM)
-lass Persona5--Publ%-o $ Persona def nombre/-ompleto/publ%-o self)nombre/-ompleto end def -onstruye/nombre/publ%-o self.-onstruye/nombre end
GSyC 2009
-lass Persona def nombre '>ar%sa' end def apell%do '2ope.' end prote-ted def nombre/-ompleto -onstruye/nombre end
Ejemplo
pr%0ate def -onstruye/nombre nombre ' " " ' apell%do end
p = Persona)ne# p)%gual/aM(Persona)ne#)
nombre/-ompleto es un m6todo protegido y por tanto puede ser llamado desde los objetos de la clase en la 4ue est: de.inido y de las clases hijas
50
-lass Vatos def %n%t%al%.e(arg19 Ol%st) puts "5rg1=#{arg1}" puts "2%sta long%tud=#{l%st)length}" puts l%st end end d1 = Vatos)ne#("dato1") d& = Vatos)ne#("dato1"9 "dato&") d4 = Vatos)ne#("dato1"9 "dato&"9 "dato4")
5rg1=dato1 2%sta long%tud=F 5rg1=dato1 2%sta long%tud=1 dato& 5rg1=dato1 2%sta long%tud=& dato& dato4
GSyC 2009
51
*bjetos y variables
<na "ariable no es un objeto <na "ariable es una re.erencia a un objeto St#ing
person1 = "_%m" person& = person1 person1DFE='`' person1 person& =! "`%m" =! "`%m"
=>i$=
person1
person&
GSyC 2009
52
El objeto nil
(l objeto n%l es de la clase A%l7lass Ruby utiliza este "alor para asignarlo a los campos sin inicializar de una clase
GSyC 2009
53
GSyC 2009
54
E&cepciones
<n c#digo bien programado debe anticiparse a los errores, en Ruby, utilizando las e?cepciones Ruby prede.ine una jerar4u1a de e?cepciones a partir de la clase 1x-ept%on (l usuario puede lanzar una de las e?cepciones ya de.inidas en Ruby o crear las suyas propias 5i un usuario 4uiere de.inir sus propias e?cepciones, 6stas deber1an heredar de ,tandard1rror o alguna de sus clases hijas para 4ue por de.ecto se capturen <na e?cepci#n tiene asociado un mensaje (cadena de caracteres) y la traza de llamadas (backtrace)
GSyC 2009
55
!apturar e&cepciones
beg%n # las ex-ep-%ones lan.adas por este -Zd%go # serTn -apturadas por la s%gu%ente %nstru--%Zn res-ue # I # I # I res-ue 1x-ept%on7lass59 1x-ept%on7lass6 =! e1 # se eNe-uta s% el -Zd%go lan.a una 1x-ept%on7lass5 # o 1x-ept%on7lass6 # e1 toma el 0alor de la ex-ep-%Zn Que se ha lan.ado res-ue 1x-ept%on7lass7 =! e& # se eNe-uta s% el -Zd%go lan.a una 1x-ept%on7lass7 # e& toma el 0alor de la ex-ep-%Zn Que se ha lan.ado res-ue # -aptura una ex-ep-%Zn ,tandard1rror ensure # -Zd%go Que siempre se eNe-uta end
GSyC 2009
56
+an/ar e&cepciones
beg%n # I # I # I ra%se # # ra%se # # ra%se # # end
Relan.a de nue0o la m%sma ex-ep-%Zn (o Runt%me1rror s% no se hab8a lan.ado hasta ahora n%nguna ex-ep-%Zn) ",er0%dor -a8do" 7rea una ex-ep-%Zn Runt%me1rror -on el mensaNe ",er0%dor -a8do" y la lan.a 1,er0erVo#n9 "1l ser0%dor no responde" -rea una ex-ep-%Zn de t%po 1,er0erVo#n y le aso-%a el mensaNe "1l ser0%dor no responde"
GSyC 2009
57
GSyC 2009
Del libro Pragmatic Bookshelf - Programming Ruby
58
59
Ejemplo
-lass >%1x-ep-%on $ 1x-ept%on: end -lass >%1x-ep-%onH%Na $ >%1x-ep-%on: end -lass >%3tra1x-ep-%onH%Na $ >%1x-ep-%on: end def prueba1x-ep-%ones beg%n puts "Prueba a lan.ar >%3tra1x-ep-%onH%Na" ra%se >%3tra1x-ep-%onH%Na puts "no deber%a %mpr%m%rse" res-ue >%1x-ep-%onH%Na puts "7apturada m% ex-ep-%on h%Na" ra%se res-ue >%3tra1x-ep-%onH%Na puts "7apturada m% otra ex-ep-%on h%Na" ra%se end end beg%n prueba1x-ep-%ones res-ue >%1x-ep-%on =! e puts "#{e} ha o-urr%do" puts "Por fa0or9 -onta-ta -on el adm%n%strador del s%stema H)" GSyC 2009 end
60
Incluir ic$eros
(s .recuente "er una organizaci#n del c#digo Ruby en di.erentes .icheros, por ejemplo di"idiendo las clases de.inidas en .icheros distintos ;ara poder usar las clases de.inidas en otros .icheros, es necesario utiliza la instrucci#n reQu%re
reQu%re 'nombre?%-hero'
61
Ejemplo0 require
@icAe#o %1/#'
a=1 def b & end
@icAe#o %2/#'
a="gato" reQu%re 'f1' puts a puts b
(scribe) gato &
GSyC 2009
62