La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

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"=>"cani ne", 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 fibUpTo(1000) { |f| print f, " " } Resultado:

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/ " "=~/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, 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 @maximum Class Variables: 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

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 # Código para recuperarse de una excepción end 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


Descargar ppt "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."

Presentaciones similares


Anuncios Google