Ruby Lenguajes de Programación. Características de Ruby Interpretado Ruby es el lenguaje...

35
Ruby Lenguajes de Programación

Transcript of Ruby Lenguajes de Programación. Características de Ruby Interpretado Ruby es el lenguaje...

Page 1: 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.

Ruby

Lenguajes de Programación

Page 2: 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.

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.

Page 3: 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.

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

Page 4: 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.

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.

Page 5: 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.

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"}

Page 6: 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.

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

Page 7: 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.

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 ) ]

Page 8: 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.

Arrays

•Creación de un arreglo def hello return "hello world" end x = [1+2, hello, `ver`]

Page 9: 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.

Accediendo a un Arregloa = [ 1, 3, 5, 7, 9 ]a[-1] » 9 a[-2] » 7a[-99] » nil

a[1..3] » [3, 5, 7]a[1...3] » [3, 5]a[3..3] » [7] a[-3..-1] » [5, 7, 9]

Page 10: 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.

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

Page 11: 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.

HashesEjemploh = { '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}

Page 12: 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.

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

Page 13: 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.

Bloquesdef fibUpTo(max)   

i1, i2 = 1, 1        # asignación en paralelowhile i1 <= max   

   yield i1      i1, i2 = i2, i1+i2    endend

fibUpTo(1000) { |f| print f, " " }Resultado:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

Page 14: 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.

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

Page 15: 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.

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

Page 16: 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.

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

Page 17: 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.

Algunos métodos de la clase enum que trabajan con bloques•each•collect•find

Page 18: 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.

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"

Page 19: 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.

Que valor retornan las expresiones de abajo?f=3beginif f==1 then f=12 else f==h endend“h“f=3beginif f==1 then f=12 else puts(“prueba”) endEnd=>nil

Page 20: 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.

Expresiones Regulares

"Escuela"=~/cue/"Escuela"=~/^c/"Escuela"=~/^E/ "1011100"=~/1(0|1)*00/

Page 21: 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.

Expresiones RegularesCualquier 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.

Page 22: 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.

Expresiones RegularesDir.entries('C:\\').find {|archivo| archivo.match('htm') }=> "DocProyect.html"

Dir.entries('C:\\').find {|archivo| archivo=~/.*ht.*|.*[0-9].*/ } => "DocProyect.html"=> "11MejObrasMusiClasica"

Page 23: 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.

Ejemplo de lectura de archivo

irb(main):001:0> arr = IO.readlines("abrir.txt")["123;1+2\n", "58+78;47\n", "12;1+1\n", "*3;*1\n", "*6;*2\

n", "*2;*10\n", "*2;as\n", "*2;12\n", "70;*1\n", "*4;*5\n", "78;*4\n", "78;*13\n", "78;*as\n", "*13;*17\n", "*15;*2\n", "*16;*1\n"]

•Arr.map es lo mismo que arr.collectirb(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"]]

Page 24: 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.

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"]]

Page 25: 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.

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

Page 26: 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.

Clases

Page 27: 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.

Herencia

Page 28: 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.

Superclasesx = 6.classbegin x = x.superclass

puts(x) end until x == Object =>FixnumIntegerNumericObjectnil

Page 29: 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.

SuperclasesFunción recursiva que muestra todos los ancestros

de una clase dada

def showFamily( aClass )if (aClass != nil) then

puts(aClass)showFamily( aClass.superclass )

endend

Page 30: 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.

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

Page 31: 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.

Manejo de Excepciones

•Exception Class▫StandardError

ZeroDivisionError NameError

NoMethodError IOError

EOFError TypeError

▫Fatal

Page 32: 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.

rescueException=>def calc( val1, val2 )

beginresult = 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 eresult = nil

endreturn result

end

Page 33: 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.

Manejando errores específicosdef calc( val1, val2 )

beginresult = val1 / val2

rescue TypeError, NoMethodError => eputs( e.class )puts( e )puts( "One of the values is not a number!" )result = nil

rescue Exception => eputs( e.class )puts( e )result = nil

endreturn result

end

Page 34: 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.

Ancestros de una excepción

beginx = 1/0

rescue Exception => excx = 0puts( exc )puts( "Family Tree of this exception..." )showFamily( exc.class )

end

Page 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.

Else-ensuredef doCalc( aNum )

beginresult = 100 / aNum.to_i

rescue Exception => eresult = 0msg = "Error: " + e

elsemsg = "Result = #{result}"

ensuremsg = "You entered '#{aNum}'. " + msg

endreturn msg

end