SlideServe
Menu
Préférences
© SlideServe · v2026

Ruby

ulmer avatar
35 diapositives · 714 Views · Aug 25, 2014

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)

Ruby - slide 1
01 / 35Ruby
1 / 17

Télécharger la présentation

Ruby
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  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