Ruby Lenguajes de Programación
Características de Ruby <ul><li>Interpretado </li></ul><ul><ul><li>Ruby es el lenguaje interpretado, por lo que no tiene q...
Características de Ruby <ul><li>Gestión Automática de Memoria </li></ul><ul><ul><li>Recolección de Basura </li></ul></ul><...
Características de Ruby <ul><li>Iteradores </li></ul><ul><ul><li>Ruby tiene iteradores para construcción de lazos. </li></...
Clase Range <ul><li>Clase Range (Rango) </li></ul><ul><ul><li>Describe un intervalo </li></ul></ul><ul><ul><li>(1..20) </l...
Range <ul><li>También está soportada la iteración al estilo tradicional </li></ul><ul><ul><ul><li>for i in (1..10) do  </l...
Arrays <ul><li>Arreglos </li></ul><ul><ul><li>Un arreglo es una colección secuencial de referencias a objetos, cada una oc...
Arrays <ul><li>Creación de un arreglo </li></ul><ul><li>def hello  </li></ul><ul><li>return &quot;hello world&quot;  </li>...
Accediendo a un Arreglo <ul><li>a = [ 1, 3, 5, 7, 9 ] </li></ul><ul><li>a[-1]  » 9  </li></ul><ul><li>a[-2]  » 7 </li></ul...
Hashes <ul><li>Tambien se los conoce como arreglos asociativos o diccionarios.  </li></ul><ul><li>Son similares a los arre...
Hashes <ul><li>Ejemplo </li></ul><ul><li>h = { 'dog' => 'canine', 'cat' => 'feline', 'donkey' => 'asinine' } </li></ul><ul...
Bloques <ul><li>Un bloque puede aparecer en el código adyacente a la llamada a un método, escrito como ultimo parámetro de...
Bloques <ul><li>def fibUpTo(max)    </li></ul><ul><li>i1, i2 = 1, 1        # asignación en paralelo </li></ul><ul><li>whil...
Yield <ul><li>Dentro del método, la sentencia  yield  invocará al bloque, como si se tratara de algún método </li></ul><ul...
Argumentos de bloques <ul><li>En el bloque, el argumento aparece entre barras verticales.Es aquí donde se recibe los valor...
Bloques <ul><li>El bloque tambien puede retornar un valor al método, a través de yield: yield toma el valor de la última e...
Algunos métodos de la clase enum que trabajan con bloques <ul><li>each </li></ul><ul><li>collect </li></ul><ul><li>find </...
Ejemplo con find <ul><li>  Dir.entries('C:') </li></ul><ul><li>Devuelve un Arreglo cuyos elementos son los nombres de arch...
Que valor retornan las expresiones de abajo? <ul><li>f=3 </li></ul><ul><li>begin </li></ul><ul><li>if f==1 then f=12 else ...
Expresiones Regulares <ul><li>&quot;Escuela&quot;=~/cue/ </li></ul><ul><li>&quot;Escuela&quot;=~/^c/ </li></ul><ul><li>&qu...
Expresiones Regulares <ul><li>Cualquier carácter, excepto /^$|.+*?()[]{}, hace match con si mismo. </li></ul><ul><li>^ mat...
Expresiones Regulares <ul><li>Dir.entries('C:').find {|archivo| archivo.match('htm') } </li></ul><ul><li>=> &quot;DocProye...
Ejemplo de lectura de archivo <ul><li>irb(main):001:0> arr = IO.readlines(&quot;abrir.txt&quot;) </li></ul><ul><li>[&quot;...
<ul><li>Ejemplo. En base al arreglo anterior, obtener un arreglo, donde cada elemento es a su vez un arreglo con 2 element...
Variables, constantes, símbolos <ul><li>Variables / methods: student, i, epsilon, last_time </li></ul><ul><li>Constants: O...
Clases
Herencia
Superclases <ul><li>x = 6.class </li></ul><ul><li>begin  </li></ul><ul><li>x = x.superclass </li></ul><ul><li>puts(x) </li...
Superclases <ul><li>Función recursiva que muestra todos los ancestros de una clase dada </li></ul><ul><li>def showFamily( ...
Manejo de Excepciones <ul><li>Básicamente, podemos manejar excepciones de la siguiente manera: </li></ul><ul><ul><li>Begin...
Manejo de Excepciones <ul><li>Exception Class </li></ul><ul><ul><li>StandardError </li></ul></ul><ul><ul><ul><li>ZeroDivis...
rescueException=> <ul><li>def calc( val1, val2 ) </li></ul><ul><li>begin </li></ul><ul><li>result = val1 / val2 </li></ul>...
Manejando errores específicos <ul><li>def calc( val1, val2 ) </li></ul><ul><li>begin </li></ul><ul><li>result = val1 / val...
Ancestros de una excepción <ul><li>begin </li></ul><ul><li>x = 1/0 </li></ul><ul><li>rescue Exception => exc </li></ul><ul...
Else-ensure <ul><li>def doCalc( aNum ) </li></ul><ul><li>begin </li></ul><ul><li>result = 100 / aNum.to_i </li></ul><ul><l...
Upcoming SlideShare
Loading in …5
×

Intro a ruby

706 views
608 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
706
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Intro a ruby

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

×