1 / 35

Ruby

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)

ulmer
Download Presentation

Ruby

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ruby Lenguajes de Programación

  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

  18. 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"

  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

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

  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+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.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, dondecadaelementoes a suvez un arreglo con 2 elementos, formados de tomarcadaelemento de la cadena, separadospor “;” 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

  26. Clases

  27. Herencia

  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

More Related