SlideShare une entreprise Scribd logo
1  sur  35
Ruby
Lenguajes de Programación
Características de Ruby
• Interpretado
▫ Ruby es el lenguaje interpretado, por lo que no tiene que volver a
compilar para ejecutar un programa escrito en Ruby.
• Las variables no tienen ningún tipo (tipeo dinámico)
▫ Variables en Ruby pueden contener datos de cualquier
tipo. Usted no tiene que preocuparse sobre cómo escribir
variables. Por consiguiente, es débil en la verificación en tiempo
de compilación.
• No necesita declaración
▫ Usted puede utilizar variables en sus programas sin ningún tipo
de declaraciones de Ruby. Los nombres de las variables denotan
su ámbito de aplicación (local, global, etc)
• Sintaxis simple
▫ Ruby tiene una sintaxis simple ligeramente influenciada por
Eiffel.
Características de Ruby
• Gestión Automática de Memoria
▫ Recolección de Basura
• Todo es un objeto
▫ Ruby es un lenguaje de orientación a objetos pura. Incluso
los datos básicos como enteros son tratados como objetos
de manera uniforme.
• Clase, herencia, métodos
▫ Por supuesto, como un lenguaje OO, Ruby tiene
características como las clases, herencia, métodos, etc. No
maneja herencia múltiple
• Dinámico
▫ Puede ser modificado en tiempo de ejecución
Características de Ruby
• Iteradores
▫ Ruby tiene iteradores para construcción de lazos.
• Bloques
▫ Permiten hacer porciones de código que son objetos.
• Tratamiento de textos y de expresiones
regulares
• Bignums
▫ Con built-in bignums, se puede calcular factoriales (400), por
ejemplo.
• El manejo de excepciones
▫ Como en Java
• Acceso directo al SO
▫ Puede ser utilizado en la programación del sistema.
Clase Range
• Clase Range (Rango)
▫ Describe un intervalo
▫ (1..20)
▫ (“a”..”m”)
▫ Cuando se usa tres punto, el número de la
derecha no se incluye. Ej: (1…10)
• Método each
▫ Para cada elemento del rango, ejecuta lo que
contiene el bloque adjunto
▫ (1..20).each {|i| print i*i, "n"}
Range
• También está soportada la iteración al estilo
tradicional
for i in (1..10) do
puts( i )
end
• Cambiar un rango a arreglo:
mi_rango.to_a
devuelve un arreglo, con los mismos elementos de
rango
Arrays
• Arreglos
▫ Un arreglo es una colección secuencial de
referencias a objetos, cada una ocupará una
posición, identificada con un índic entero no
negativo. A diferencia de otros lenguajes, un
arreglo puede tener items que pertenecen a
distintos tipos de datos. Ej:
a1 = [1,'two', 3.0, array_length( a0 ) ]
Arrays
• Creación de un arreglo
def hello
return "hello world"
end
x = [1+2, hello, `ver`]
Accediendo a un Arreglo
a = [ 1, 3, 5, 7, 9 ]
a[-1] » 9
a[-2] » 7
a[-99] » nil
a[1..3] » [3, 5, 7]
a[1...3] » [3, 5]
a[3..3] » [7]
a[-3..-1] » [5, 7, 9]
Hashes
• Tambien se los conoce como arreglos asociativos
o diccionarios.
• Son similares a los arreglos, en el sentido que es
una colección indexada de referencias a objetos
• Sin embargo, mientras que los arreglos se
indexan con un entero, los hash se pueden
indexar con objetos de cualquier tipo
• Al almacenar un Hash, deberá suplir 2 objetos:
la clave y el valor
Hashes
Ejemplo
h = { 'dog' => 'canine', 'cat' => 'feline', 'donkey' => 'asinine'
}
h.length » 3
h['dog'] » "canine“
h['cow'] = 'bovine‘
h[12] = 'dodecine‘
h['cat'] = 99
h » {"donkey"=>"asinine", "cow"=>"bovine",
"dog"=>"canine", 12=>"dodecine", "cat"=>99}
Bloques
• Un bloque puede aparecer en el código
adyacente a la llamada a un método, escrito
como ultimo parámetro del método
• El código del bloque no es ejecutado
inmediatamente al ser encontrado. En cambio
Ruby recuerda el contexto en el cual el bloque
aparece y entonces llama al método
Bloques
def fibUpTo(max)   
i1, i2 = 1, 1        # asignación en paralelo
while i1 <= max   
   yield i1    
  i1, i2 = i2, i1+i2 
   end
end
fibUpTo(1000) { |f| print f, " " }
Resultado:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
Yield
• Dentro del método, la sentencia yield invocará
al bloque, como si se tratara de algún método
• Cuando yield es ejecutado, invoca al código del
bloque
• Cuando el bloque finaliza, el control regresa
inmediatamente a la línea después del yield
Argumentos de bloques
• En el bloque, el argumento aparece entre barras
verticales.Es aquí donde se recibe los valores
pasados a yield
• Aunque es común pasar sólo un valor al bloque,
se pueden tambien pasar más de un valor
Bloques
• El bloque tambien puede retornar un valor al
método, a través de yield: yield toma el valor de
la última expresión evaluada en el bloque
Algunos métodos de la clase enum que
trabajan con bloques
• each
• collect
• find
Ejemplo con find
Dir.entries('C:')
Devuelve un Arreglo cuyos elementos son los 
nombres de archivo del directorio indicado.
El siguiente ejemplo usa find, para encontrar el primer 
elemento del arreglo que cumple la condición:
Dir.entries('C:').find {|archivo| archivo.match('htm') }
=> "DocProyect.html"
Que valor retornan las expresiones de
abajo?
f=3
begin
if f==1 then f=12 else f==h end
end
⇒“h“
f=3
begin
if f==1 then f=12 else puts(“prueba”) end
End
=>nil
Expresiones Regulares
"Escuela"=~/cue/
"Escuela"=~/^c/
"Escuela"=~/^E/
"1011100"=~/1(0|1)*00/
Expresiones Regulares
Cualquier carácter, excepto /^$|.+*?()[]{}, hace match
con si mismo.
^ match con el inicio de una línea,
$ match con el fin de una línea.
. Match con cualquier caracter.
a* cero o más repeticiones de a.
a+ equivalente a aa*.
a|b hace match a a or b.
[characters] Hace Match con un rango de caracteres.
Ej:
[a-zA-Z0-9] hace match a caracteres o alfanuméricos
[^characters] Hace Match a la negación de un rango de
caracteres. Ejemplo: [^a-zA-Z0-9] hace match con
todos los caracteres que NO son alfanuméricos.
Expresiones Regulares
Dir.entries('C:').find {|archivo| archivo.match('htm') }
=> "DocProyect.html"
Dir.entries('C:').find {|archivo| archivo=~/.*ht.*|.*[0-9].*/ }
=> "DocProyect.html"
=> "11MejObrasMusiClasica"
Ejemplo de lectura de archivo
irb(main):001:0> arr = IO.readlines("abrir.txt")
⇒["123;1+2n", "58+78;47n", "12;1+1n", "*3;*1n",
"*6;*2n", "*2;*10n", "*2;asn", "*2;12n", "70;*1n",
"*4;*5n", "78;*4n", "78;*13n", "78;*asn", "*13;*17n",
"*15;*2n", "*16;*1n"]
• Arr.map es lo mismo que arr.collect
irb(main):002:0> arr.map { |a| a.chomp.split(";")}
=> [["123", "1+2"], ["58+78", "47"], ["12", "1+1"], ["*3", "*1"],
["*6", "*2"], ["*2", "*10"], ["*2", "as"], ["*2", "12"], ["70",
"*1"], ["*4", "*5"], ["78", "*4"], ["78", "*13"], ["78", "*as"],
["*13", "*17"], ["*15", "*2"], ["*16", "*1"]]
Ejemplo. En base al arreglo anterior, obtener un
arreglo, donde cada elemento es a su vez un
arreglo con 2 elementos, formados de tomar
cada elemento de la cadena, separados por “;”
irb(main):002:0> arr.map { |a| a.chomp.split(";")}
=> [["123", "1+2"], ["58+78", "47"], ["12", "1+1"],
["*3", "*1"], ["*6", "*2"], ["*2", "*10"], ["*2", "as"],
["*2", "12"], ["70", "*1"], ["*4", "*5"], ["78", "*4"],
["78", "*13"], ["78", "*as"], ["*13", "*17"], ["*15",
"*2"], ["*16", "*1"]]
Variables, constantes, símbolos
• Variables / methods: student, i, epsilon,
last_time
• Constants: OldPerson, PDF_KEY, R2D2
• Instance Variables: @name, @last_time,
@maximum
• Class Variables: @@lookup_table, @@instance
• Global Variables: $global, $1, $count
• Symbols: :name, :age, :Class
Clases
Herencia
Superclases
x = 6.class
begin
x = x.superclass
puts(x)
end until x == Object
=>Fixnum
Integer
Numeric
Object
nil
Superclases
Función recursiva que muestra todos los ancestros de una
clase dada
def showFamily( aClass )
if (aClass != nil) then
puts(aClass)
showFamily( aClass.superclass )
end
end
Manejo de Excepciones
• Básicamente, podemos manejar excepciones de la
siguiente manera:
Begin
# Algún código que podría causar una excepción
rescue <Exception Class>
# Código para recuperarse de una excepción
end
<Exception Class> puede ser la clase Exception, o una
de sus descendientes
Manejo de Excepciones
• Exception Class
▫ StandardError
 ZeroDivisionError
 NameError
 NoMethodError
 IOError
 EOFError
 TypeError
▫ Fatal
rescueException=>
def calc( val1, val2 )
begin
result = val1 / val2
rescue Exception => e # e va a referenciar a una instancia de Exception
puts( e.class ) # Visualizo la clase del objeto e
puts( e ) # Muestra la descripción del objeto e
result = nil
end
return result
end
Manejando errores específicos
def calc( val1, val2 )
begin
result = val1 / val2
rescue TypeError, NoMethodError => e
puts( e.class )
puts( e )
puts( "One of the values is not a number!" )
result = nil
rescue Exception => e
puts( e.class )
puts( e )
result = nil
end
return result
end
Ancestros de una excepción
begin
x = 1/0
rescue Exception => exc
x = 0
puts( exc )
puts( "Family Tree of this exception..." )
showFamily( exc.class )
end
Else-ensure
def doCalc( aNum )
begin
result = 100 / aNum.to_i
rescue Exception => e
result = 0
msg = "Error: " + e
else
msg = "Result = #{result}"
ensure
msg = "You entered '#{aNum}'. " + msg
end
return msg
end

Contenu connexe

Tendances

Mule Librerias en Java
Mule Librerias en JavaMule Librerias en Java
Mule Librerias en JavaManuel Antonio
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scalanluaces
 
Informe Proyecto Final
Informe Proyecto FinalInforme Proyecto Final
Informe Proyecto FinalJorge Ramon
 
Chuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesChuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesAbrirllave
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friendflekoso
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM DoctrineDecharlas
 
Funciones de Cadenas/ Computación para ingenieros
Funciones de Cadenas/ Computación para ingenierosFunciones de Cadenas/ Computación para ingenieros
Funciones de Cadenas/ Computación para ingenierosMaria jose Ramirez perez
 
Javascript - Módulo 8: LocalStorage, iFrames, Origin policy y JSON
Javascript - Módulo 8: LocalStorage, iFrames, Origin policy y JSONJavascript - Módulo 8: LocalStorage, iFrames, Origin policy y JSON
Javascript - Módulo 8: LocalStorage, iFrames, Origin policy y JSONDavid Zapateria Besteiro
 
BIBLIOTECAS EN PROGRAMACION
BIBLIOTECAS EN PROGRAMACIONBIBLIOTECAS EN PROGRAMACION
BIBLIOTECAS EN PROGRAMACIONUTPL
 

Tendances (20)

Mule Librerias en Java
Mule Librerias en JavaMule Librerias en Java
Mule Librerias en Java
 
Descubriendo scala
Descubriendo scalaDescubriendo scala
Descubriendo scala
 
Curso de Python
Curso de PythonCurso de Python
Curso de Python
 
Informe Proyecto Final
Informe Proyecto FinalInforme Proyecto Final
Informe Proyecto Final
 
Chuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantesChuleta de lenguaje C para principiantes
Chuleta de lenguaje C para principiantes
 
Intro a ruby
Intro a rubyIntro a ruby
Intro a ruby
 
Ejercicio ADA: Ocultación de Información en ADA
Ejercicio ADA: Ocultación de Información en ADAEjercicio ADA: Ocultación de Información en ADA
Ejercicio ADA: Ocultación de Información en ADA
 
Ejercicios con Python parte 05
Ejercicios con Python parte 05Ejercicios con Python parte 05
Ejercicios con Python parte 05
 
Ejercicio ADA Instrucciones y Estructuras de Control
Ejercicio ADA Instrucciones y Estructuras de ControlEjercicio ADA Instrucciones y Estructuras de Control
Ejercicio ADA Instrucciones y Estructuras de Control
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friend
 
Libreria c++
Libreria c++Libreria c++
Libreria c++
 
Tema3 p2%20
Tema3 p2%20Tema3 p2%20
Tema3 p2%20
 
C++ y sus librerias
C++ y sus libreriasC++ y sus librerias
C++ y sus librerias
 
18613352 assembler
18613352 assembler18613352 assembler
18613352 assembler
 
Ejercicios Python parte 4
Ejercicios Python parte 4Ejercicios Python parte 4
Ejercicios Python parte 4
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM Doctrine
 
Funciones de Cadenas/ Computación para ingenieros
Funciones de Cadenas/ Computación para ingenierosFunciones de Cadenas/ Computación para ingenieros
Funciones de Cadenas/ Computación para ingenieros
 
Javascript - Módulo 8: LocalStorage, iFrames, Origin policy y JSON
Javascript - Módulo 8: LocalStorage, iFrames, Origin policy y JSONJavascript - Módulo 8: LocalStorage, iFrames, Origin policy y JSON
Javascript - Módulo 8: LocalStorage, iFrames, Origin policy y JSON
 
Ejercicios resueltos con Python
Ejercicios resueltos con PythonEjercicios resueltos con Python
Ejercicios resueltos con Python
 
BIBLIOTECAS EN PROGRAMACION
BIBLIOTECAS EN PROGRAMACIONBIBLIOTECAS EN PROGRAMACION
BIBLIOTECAS EN PROGRAMACION
 

Similaire à Ruby

Similaire à Ruby (20)

Ruby intro
Ruby introRuby intro
Ruby intro
 
Ruby
RubyRuby
Ruby
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 
Php
PhpPhp
Php
 
Programacion matlab
Programacion matlabProgramacion matlab
Programacion matlab
 
Idiomatic Ruby
Idiomatic RubyIdiomatic Ruby
Idiomatic Ruby
 
Perl (practical extraction and report language)
Perl (practical extraction and report language)Perl (practical extraction and report language)
Perl (practical extraction and report language)
 
Presentación de matlab electromagnetismo ...
Presentación de matlab electromagnetismo                                     ...Presentación de matlab electromagnetismo                                     ...
Presentación de matlab electromagnetismo ...
 
Programación Java
Programación JavaProgramación Java
Programación Java
 
Programación de código
Programación de códigoProgramación de código
Programación de código
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostream
 
Ambiente
 Ambiente Ambiente
Ambiente
 
Ambiente de programación en pascal
Ambiente de programación en pascalAmbiente de programación en pascal
Ambiente de programación en pascal
 
Ambiente de programacin en pascal
Ambiente de programacin en pascalAmbiente de programacin en pascal
Ambiente de programacin en pascal
 
Ambiente de programación en pascal
Ambiente de programación en pascalAmbiente de programación en pascal
Ambiente de programación en pascal
 
Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02
 
Metaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programasMetaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programas
 
Introducción a php
Introducción a phpIntroducción a php
Introducción a php
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Rails
 

Plus de Velmuz Buzz

Ecuaciones Diferenciales de 1er Orden
Ecuaciones Diferenciales de 1er OrdenEcuaciones Diferenciales de 1er Orden
Ecuaciones Diferenciales de 1er OrdenVelmuz Buzz
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de ProgramacionVelmuz Buzz
 
Capa de Aplicacion
Capa de AplicacionCapa de Aplicacion
Capa de AplicacionVelmuz Buzz
 
Capa de Transporte
Capa de TransporteCapa de Transporte
Capa de TransporteVelmuz Buzz
 
Estructura Organizacional
Estructura OrganizacionalEstructura Organizacional
Estructura OrganizacionalVelmuz Buzz
 
Inteligencia artificial sistema experto
Inteligencia artificial sistema expertoInteligencia artificial sistema experto
Inteligencia artificial sistema expertoVelmuz Buzz
 
Electronica transistores
Electronica transistoresElectronica transistores
Electronica transistoresVelmuz Buzz
 
Electronica rectificadores
Electronica rectificadoresElectronica rectificadores
Electronica rectificadoresVelmuz Buzz
 
Electronica polarizacion
Electronica polarizacionElectronica polarizacion
Electronica polarizacionVelmuz Buzz
 
Electronica polarizacion tipo h
Electronica polarizacion tipo hElectronica polarizacion tipo h
Electronica polarizacion tipo hVelmuz Buzz
 
Electronica introduccion y repaso
Electronica introduccion y repasoElectronica introduccion y repaso
Electronica introduccion y repasoVelmuz Buzz
 
Electronica funcion de transferencia
Electronica funcion de transferenciaElectronica funcion de transferencia
Electronica funcion de transferenciaVelmuz Buzz
 
Electronica ejercicios
Electronica ejerciciosElectronica ejercicios
Electronica ejerciciosVelmuz Buzz
 
Electronica aplicaciones de diodos
Electronica aplicaciones de diodosElectronica aplicaciones de diodos
Electronica aplicaciones de diodosVelmuz Buzz
 
Electronica polarizacion del fet
Electronica  polarizacion del fetElectronica  polarizacion del fet
Electronica polarizacion del fetVelmuz Buzz
 
Electronica modelaje de transitores bipolares
Electronica  modelaje de transitores bipolaresElectronica  modelaje de transitores bipolares
Electronica modelaje de transitores bipolaresVelmuz Buzz
 
Electronica analisis a pequeña señal fet
Electronica  analisis a pequeña señal fetElectronica  analisis a pequeña señal fet
Electronica analisis a pequeña señal fetVelmuz Buzz
 
Electronica transitores efecto de cambio
Electronica transitores efecto de cambioElectronica transitores efecto de cambio
Electronica transitores efecto de cambioVelmuz Buzz
 

Plus de Velmuz Buzz (20)

Ecuaciones Diferenciales de 1er Orden
Ecuaciones Diferenciales de 1er OrdenEcuaciones Diferenciales de 1er Orden
Ecuaciones Diferenciales de 1er Orden
 
Lenguajes de Programacion
Lenguajes de ProgramacionLenguajes de Programacion
Lenguajes de Programacion
 
Capa de Aplicacion
Capa de AplicacionCapa de Aplicacion
Capa de Aplicacion
 
Capa de Transporte
Capa de TransporteCapa de Transporte
Capa de Transporte
 
Capa Red
Capa RedCapa Red
Capa Red
 
Capa Enlace
Capa Enlace Capa Enlace
Capa Enlace
 
Estructura Organizacional
Estructura OrganizacionalEstructura Organizacional
Estructura Organizacional
 
Inteligencia artificial sistema experto
Inteligencia artificial sistema expertoInteligencia artificial sistema experto
Inteligencia artificial sistema experto
 
Electronica transistores
Electronica transistoresElectronica transistores
Electronica transistores
 
Electronica rectificadores
Electronica rectificadoresElectronica rectificadores
Electronica rectificadores
 
Electronica polarizacion
Electronica polarizacionElectronica polarizacion
Electronica polarizacion
 
Electronica polarizacion tipo h
Electronica polarizacion tipo hElectronica polarizacion tipo h
Electronica polarizacion tipo h
 
Electronica introduccion y repaso
Electronica introduccion y repasoElectronica introduccion y repaso
Electronica introduccion y repaso
 
Electronica funcion de transferencia
Electronica funcion de transferenciaElectronica funcion de transferencia
Electronica funcion de transferencia
 
Electronica ejercicios
Electronica ejerciciosElectronica ejercicios
Electronica ejercicios
 
Electronica aplicaciones de diodos
Electronica aplicaciones de diodosElectronica aplicaciones de diodos
Electronica aplicaciones de diodos
 
Electronica polarizacion del fet
Electronica  polarizacion del fetElectronica  polarizacion del fet
Electronica polarizacion del fet
 
Electronica modelaje de transitores bipolares
Electronica  modelaje de transitores bipolaresElectronica  modelaje de transitores bipolares
Electronica modelaje de transitores bipolares
 
Electronica analisis a pequeña señal fet
Electronica  analisis a pequeña señal fetElectronica  analisis a pequeña señal fet
Electronica analisis a pequeña señal fet
 
Electronica transitores efecto de cambio
Electronica transitores efecto de cambioElectronica transitores efecto de cambio
Electronica transitores efecto de cambio
 

Ruby

  • 2. Características de Ruby • Interpretado ▫ Ruby es el lenguaje interpretado, por lo que no tiene que volver a compilar para ejecutar un programa escrito en Ruby. • Las variables no tienen ningún tipo (tipeo dinámico) ▫ Variables en Ruby pueden contener datos de cualquier tipo. Usted no tiene que preocuparse sobre cómo escribir variables. Por consiguiente, es débil en la verificación en tiempo de compilación. • No necesita declaración ▫ Usted puede utilizar variables en sus programas sin ningún tipo de declaraciones de Ruby. Los nombres de las variables denotan su ámbito de aplicación (local, global, etc) • Sintaxis simple ▫ Ruby tiene una sintaxis simple ligeramente influenciada por Eiffel.
  • 3. Características de Ruby • Gestión Automática de Memoria ▫ Recolección de Basura • Todo es un objeto ▫ Ruby es un lenguaje de orientación a objetos pura. Incluso los datos básicos como enteros son tratados como objetos de manera uniforme. • Clase, herencia, métodos ▫ Por supuesto, como un lenguaje OO, Ruby tiene características como las clases, herencia, métodos, etc. No maneja herencia múltiple • Dinámico ▫ Puede ser modificado en tiempo de ejecución
  • 4. Características de Ruby • Iteradores ▫ Ruby tiene iteradores para construcción de lazos. • Bloques ▫ Permiten hacer porciones de código que son objetos. • Tratamiento de textos y de expresiones regulares • Bignums ▫ Con built-in bignums, se puede calcular factoriales (400), por ejemplo. • El manejo de excepciones ▫ Como en Java • Acceso directo al SO ▫ Puede ser utilizado en la programación del sistema.
  • 5. Clase Range • Clase Range (Rango) ▫ Describe un intervalo ▫ (1..20) ▫ (“a”..”m”) ▫ Cuando se usa tres punto, el número de la derecha no se incluye. Ej: (1…10) • Método each ▫ Para cada elemento del rango, ejecuta lo que contiene el bloque adjunto ▫ (1..20).each {|i| print i*i, "n"}
  • 6. Range • También está soportada la iteración al estilo tradicional for i in (1..10) do puts( i ) end • Cambiar un rango a arreglo: mi_rango.to_a devuelve un arreglo, con los mismos elementos de rango
  • 7. Arrays • Arreglos ▫ Un arreglo es una colección secuencial de referencias a objetos, cada una ocupará una posición, identificada con un índic entero no negativo. A diferencia de otros lenguajes, un arreglo puede tener items que pertenecen a distintos tipos de datos. Ej: a1 = [1,'two', 3.0, array_length( a0 ) ]
  • 8. Arrays • Creación de un arreglo def hello return "hello world" end x = [1+2, hello, `ver`]
  • 9. Accediendo a un Arreglo a = [ 1, 3, 5, 7, 9 ] a[-1] » 9 a[-2] » 7 a[-99] » nil a[1..3] » [3, 5, 7] a[1...3] » [3, 5] a[3..3] » [7] a[-3..-1] » [5, 7, 9]
  • 10. Hashes • Tambien se los conoce como arreglos asociativos o diccionarios. • Son similares a los arreglos, en el sentido que es una colección indexada de referencias a objetos • Sin embargo, mientras que los arreglos se indexan con un entero, los hash se pueden indexar con objetos de cualquier tipo • Al almacenar un Hash, deberá suplir 2 objetos: la clave y el valor
  • 11. Hashes Ejemplo h = { 'dog' => 'canine', 'cat' => 'feline', 'donkey' => 'asinine' } h.length » 3 h['dog'] » "canine“ h['cow'] = 'bovine‘ h[12] = 'dodecine‘ h['cat'] = 99 h » {"donkey"=>"asinine", "cow"=>"bovine", "dog"=>"canine", 12=>"dodecine", "cat"=>99}
  • 12. Bloques • Un bloque puede aparecer en el código adyacente a la llamada a un método, escrito como ultimo parámetro del método • El código del bloque no es ejecutado inmediatamente al ser encontrado. En cambio Ruby recuerda el contexto en el cual el bloque aparece y entonces llama al método
  • 13. Bloques def fibUpTo(max)    i1, i2 = 1, 1        # asignación en paralelo while i1 <= max       yield i1       i1, i2 = i2, i1+i2     end end fibUpTo(1000) { |f| print f, " " } Resultado: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
  • 14. Yield • Dentro del método, la sentencia yield invocará al bloque, como si se tratara de algún método • Cuando yield es ejecutado, invoca al código del bloque • Cuando el bloque finaliza, el control regresa inmediatamente a la línea después del yield
  • 15. Argumentos de bloques • En el bloque, el argumento aparece entre barras verticales.Es aquí donde se recibe los valores pasados a yield • Aunque es común pasar sólo un valor al bloque, se pueden tambien pasar más de un valor
  • 16. Bloques • El bloque tambien puede retornar un valor al método, a través de yield: yield toma el valor de la última expresión evaluada en el bloque
  • 17. Algunos métodos de la clase enum que trabajan con bloques • each • collect • find
  • 19. Que valor retornan las expresiones de abajo? f=3 begin if f==1 then f=12 else f==h end end ⇒“h“ f=3 begin if f==1 then f=12 else puts(“prueba”) end End =>nil
  • 21. Expresiones Regulares Cualquier carácter, excepto /^$|.+*?()[]{}, hace match con si mismo. ^ match con el inicio de una línea, $ match con el fin de una línea. . Match con cualquier caracter. a* cero o más repeticiones de a. a+ equivalente a aa*. a|b hace match a a or b. [characters] Hace Match con un rango de caracteres. Ej: [a-zA-Z0-9] hace match a caracteres o alfanuméricos [^characters] Hace Match a la negación de un rango de caracteres. Ejemplo: [^a-zA-Z0-9] hace match con todos los caracteres que NO son alfanuméricos.
  • 22. Expresiones Regulares Dir.entries('C:').find {|archivo| archivo.match('htm') } => "DocProyect.html" Dir.entries('C:').find {|archivo| archivo=~/.*ht.*|.*[0-9].*/ } => "DocProyect.html" => "11MejObrasMusiClasica"
  • 23. Ejemplo de lectura de archivo irb(main):001:0> arr = IO.readlines("abrir.txt") ⇒["123;1+2n", "58+78;47n", "12;1+1n", "*3;*1n", "*6;*2n", "*2;*10n", "*2;asn", "*2;12n", "70;*1n", "*4;*5n", "78;*4n", "78;*13n", "78;*asn", "*13;*17n", "*15;*2n", "*16;*1n"] • Arr.map es lo mismo que arr.collect irb(main):002:0> arr.map { |a| a.chomp.split(";")} => [["123", "1+2"], ["58+78", "47"], ["12", "1+1"], ["*3", "*1"], ["*6", "*2"], ["*2", "*10"], ["*2", "as"], ["*2", "12"], ["70", "*1"], ["*4", "*5"], ["78", "*4"], ["78", "*13"], ["78", "*as"], ["*13", "*17"], ["*15", "*2"], ["*16", "*1"]]
  • 24. Ejemplo. En base al arreglo anterior, obtener un arreglo, donde cada elemento es a su vez un arreglo con 2 elementos, formados de tomar cada elemento de la cadena, separados por “;” irb(main):002:0> arr.map { |a| a.chomp.split(";")} => [["123", "1+2"], ["58+78", "47"], ["12", "1+1"], ["*3", "*1"], ["*6", "*2"], ["*2", "*10"], ["*2", "as"], ["*2", "12"], ["70", "*1"], ["*4", "*5"], ["78", "*4"], ["78", "*13"], ["78", "*as"], ["*13", "*17"], ["*15", "*2"], ["*16", "*1"]]
  • 25. Variables, constantes, símbolos • Variables / methods: student, i, epsilon, last_time • Constants: OldPerson, PDF_KEY, R2D2 • Instance Variables: @name, @last_time, @maximum • Class Variables: @@lookup_table, @@instance • Global Variables: $global, $1, $count • Symbols: :name, :age, :Class
  • 28. Superclases x = 6.class begin x = x.superclass puts(x) end until x == Object =>Fixnum Integer Numeric Object nil
  • 29. Superclases Función recursiva que muestra todos los ancestros de una clase dada def showFamily( aClass ) if (aClass != nil) then puts(aClass) showFamily( aClass.superclass ) end end
  • 30. Manejo de Excepciones • Básicamente, podemos manejar excepciones de la siguiente manera: Begin # Algún código que podría causar una excepción rescue <Exception Class> # Código para recuperarse de una excepción end <Exception Class> puede ser la clase Exception, o una de sus descendientes
  • 31. Manejo de Excepciones • Exception Class ▫ StandardError  ZeroDivisionError  NameError  NoMethodError  IOError  EOFError  TypeError ▫ Fatal
  • 32. rescueException=> def calc( val1, val2 ) begin result = val1 / val2 rescue Exception => e # e va a referenciar a una instancia de Exception puts( e.class ) # Visualizo la clase del objeto e puts( e ) # Muestra la descripción del objeto e result = nil end return result end
  • 33. Manejando errores específicos def calc( val1, val2 ) begin result = val1 / val2 rescue TypeError, NoMethodError => e puts( e.class ) puts( e ) puts( "One of the values is not a number!" ) result = nil rescue Exception => e puts( e.class ) puts( e ) result = nil end return result end
  • 34. Ancestros de una excepción begin x = 1/0 rescue Exception => exc x = 0 puts( exc ) puts( "Family Tree of this exception..." ) showFamily( exc.class ) end
  • 35. Else-ensure def doCalc( aNum ) begin result = 100 / aNum.to_i rescue Exception => e result = 0 msg = "Error: " + e else msg = "Result = #{result}" ensure msg = "You entered '#{aNum}'. " + msg end return msg end