feliz programación ;) juan Álvarez Álvarez luis serrano arjona francisco javier trujillo mata
TRANSCRIPT
![Page 1: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/1.jpg)
Feliz Programación
;)Juan Álvarez ÁlvarezLuis Serrano ArjonaFrancisco Javier Trujillo Mata
![Page 2: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/2.jpg)
Introducción Objetivo Características Ruby Vs Haskell Tutorial Ruby Aplicación Bibliografía
2
![Page 3: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/3.jpg)
Creador Yukihiro “matz” Matsumoto
3
![Page 4: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/4.jpg)
Interpretado, reflexivo y orientado a objetos.
Sus orígenes constan del año 1993. Presentado en 1995. Combina una sintaxis inspirada en
Python y Perl. Características similares a Smalltalk
con respecto a la programación orientada a objetos.
4
![Page 5: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/5.jpg)
• “A menudo la gente, especialmente los ingenieros en informática, se centran en las máquinas. Ellos piensan, "Haciendo esto, la máquina funcionará más rápido. Haciendo esto, la máquina funcionará de manera más eficiente. Haciendo esto..." Están centrados en las máquinas, pero en realidad necesitamos centrarnos en las personas, en cómo hacen programas o cómo manejan las aplicaciones en los ordenadores. Nosotros somos los jefes. Ellos son los esclavos.”
5
![Page 6: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/6.jpg)
“Principio de la menor sorpresa”
6
![Page 7: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/7.jpg)
• Software libre• Orientado a Objetos• Flexibilidad• Posibilidad de redefinir los operadores• Bloques• Apariencia visual• Recolección de basura automática• Herencia como Mixin y patrones singleton• …
7
![Page 8: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/8.jpg)
Popularidad Haskell es más potente y eficiente Nivel lógico importante en Haskell Pattern matching en Haskell Fácil adaptación a Ruby
8
![Page 9: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/9.jpg)
Prelude, librería Haskell para Ruby
http://www.appdesign.com/products/open-source-projects/prelude-library/
9
![Page 10: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/10.jpg)
El programa Hola MundoArrancamos el interprete:
irb(main):001:0>Escribimos la sentencia:
puts “Hola mundo”Resultado:
irb(main):001:0> puts "hola mundo"hola mundo=> nil
10
![Page 11: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/11.jpg)
Ventajas con otros lenguajes• Para programadores de C y Java - no se
necesita escribir un método main. • Los strings son secuencias de caracteres
entre simple o dobles comillas. • Es un lenguaje interpretado, entonces no
hace falta recompilar para ejecutar un programa.
11
![Page 12: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/12.jpg)
Números en Ruby (algunos ejemplos)• puts 1 + 2
3=> Nil
#Divisón: cuando divides dos enteros, obtienes un entero:
• puts 3 / 2 1=> nil
12
![Page 13: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/13.jpg)
Números en Ruby (algunos ejemplos)
#si quieres obtener el resultado de decimal, #al menos uno de los dos tiene que ser
decimal • puts 3.0 / 2
1.5=> nil
13
![Page 14: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/14.jpg)
Números en Ruby• Los números en Ruby son objetos de la
clase Fixnum o Bignum
14
![Page 15: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/15.jpg)
Números en Ruby• Operadores y precedencia
15
[] Índices
** Exponentes
+ - ! ~Unarios: pos/neg, no,…
* / %Multiplicación, División,…
+ -Suma, Resta,…
« »Desplazadores binarios,…
& 'y' binario
|, ^'or' y 'xor' binarios
>= < <=Comparadores
== === <=> != =~ !~
Igualadad, inegualdad,…
&& 'u' booleano
|| 'o' booleano
.. …Operadores de rango
= (+=, -=,...) Asignadores
?:Decisión ternaria
not 'no' booleano
![Page 16: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/16.jpg)
Strings• Los strings (o cadenas de texto) son secuencias de
caracteres entre comillas simples o comillas dobles. '' (dos comillas simples) no tienen nada: podemos llamarlo string vacío. puts "Hola mundo"
# Se puede usar " o ' para los strings, pero ' es más eficiente.
puts 'Hola mundo' # Juntando cadenas
puts 'Me gusta' + ' Ruby' # Secuencia de escape
puts 'Ruby\'s party' # Repetición de strings puts
'Hola' * 3
16
![Page 17: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/17.jpg)
Variables • Para almacenar un número o un string en la
memoria del ordenador, con el fin de usarlos en cálculos posteriores, necesitas dar un nombre a ese número o string. En programación este proceso es conocido como asignación. #Ejemplos de asignaciones
s = ‘¡Hola Mundo!' x = 10
17
![Page 18: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/18.jpg)
Variables • Las variables locales en ruby son palabras
que: deben empezar con un letra minúscula o un
guión bajo (_) deben estar formadas por letras, números y/o
guiones bajos.
• Existen dos tipos distintos de variables dependiendo del alcanze: Locales y Globales
18
![Page 19: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/19.jpg)
Variables Globales• Las variables globales se distinguen porque
están precedidas del signo dólar ($).• Ruby tiene por defecto un gran número de
variables globales inicializadas desde el principio.
• Son variables que almacenan información útil.
• Por ejemplo, la variable global $0 contiene el nombre del fichero que Ruby está ejecutando.
19
![Page 20: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/20.jpg)
Introduciendo datos (gets) • ¿Cómo podemos introducir nuestros propios
datos? Para esto gets (get=coger, s=string) y chomp son de ayuda.# gets y chomp puts "¿En qué ciudad te gustaría vivir?" STDOUT.flush ciudad = gets.chomp puts "La ciudad es " + ciudad
20
![Page 21: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/21.jpg)
Los métodos • Empiezan por la palabra def y acaba por
la end.
# Definición de un método def hello
puts 'Hola' end #uso del método hello
21
![Page 22: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/22.jpg)
Los métodos: argumentos • Ruby deja especificar los valores por
defecto de los argumentos. • Esto se hace mediante el operador =
def sinceridad(arg1=“Messi ", arg2=“el ", arg3=“mejor.")puts arg1 + arg2 + arg3
end puts sinceridad
22
![Page 23: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/23.jpg)
Rangos• El principal uso y quizás el más apropiado
para los rangos, es expresar una secuencia. Genera una secuencia donde los puntos límites
están incluidos. (1..3).to_a #es la secuencia 1, 2, 3
Genera una secuencia en la que no está incluida el límite superior. (1...5).to_a #equivale a 1, 2, 3, 4
23
![Page 24: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/24.jpg)
Arrays • Es un conjunto ordenado: cada posición en la
lista es una variable que podemos leer y/o escribir.
# array vacío vec1 = []
# Los índices empiezan desde el cero (0,1,2,...) nombres = ['Satish', 'Talim', 'Ruby', 'Java']
puts nombres[0] # si el elemento no existe, se devuelve nil puts nombres[4]
24
![Page 25: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/25.jpg)
Condicionales • if,else
xyz = 5 if xyz == 5
puts 'Se puede anidar un bloque if,else,end dentro de otro' else
puts "Parte del bloque anidado" end
25
![Page 26: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/26.jpg)
Condicionales • if,else
Además de la igualdad, existen otros operadores condicionales:
26
== igual
!= distinto
>= mayor igual que
<= menor igual que
> mayor que
< menor que
![Page 27: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/27.jpg)
Condicionales • Case
xyz = 10 par = case
when xyz % 2 == 0: true when xyz % 2 != 0: false
end puts par
27
![Page 28: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/28.jpg)
Condicionales • Unless
nombre = 'Pepe' unless nombre == 'Enjuto'
puts 'Ese nombre no tiene arte ninguno'
end
28
![Page 29: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/29.jpg)
Bucles • while
# Loops var = 0 while var < 10
puts var.to_s var += 1
end
29
![Page 30: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/30.jpg)
Bucles • times : Lo que hace times es iterar el bloque
ese "número" de veces.
10.times do |num| puts num
end
30
![Page 31: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/31.jpg)
Clases y Objetos • Un objeto es un contenedor de datos, que
a su vez controla el acceso a dichos datos.
• Asociados a los objetos está una serie de variables que lo definen: sus atributos.
• Y también un conjunto de funciones que crean un interfaz para interactuar con el objeto: son los métodos.
31
![Page 32: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/32.jpg)
Clases y Objetos • Una clase es usada para construir un
objeto.
• Una clase es como un molde para objetos.
• Y un objeto, una instancia de la clase.
32
![Page 33: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/33.jpg)
Clases y Objetos # define la clase Perro class Perro
# método inicializar clase def initialize(raza, nombre)
# atributos @raza = raza @nombre = nombre
end # método ladrar def ladrar
puts 'Guau! Guau!' end
33
![Page 34: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/34.jpg)
Clases y Objetos # método saludar def saludar
puts "Soy un perro de la raza #{@raza} y mi nombre es #{@nombre}" end
end
# para hacer nuevos objetos, # se usa el método new d = Perro.new('Labrador', 'Benzy') puts d.methods.sort puts "La id del ojbeto es #{d.object_id}."
34
![Page 35: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/35.jpg)
Clases y Objetos if d.respond_to?("correr")
d.correr else
puts "Lo siento, el objeto no entiende el mensaje 'correr'" end
d.ladrar d.saludar
35
![Page 36: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/36.jpg)
Usando librerías
• Una librería es un fichero que contiene métodos y clases para su uso a posteriori.
• Para poder usar estas librerías, necesitas de los métodos require y load.
36
![Page 37: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/37.jpg)
Usando librerías • Require: El método require lee una única
vez el fichero especificado.
require ‘mi_librería’
• Load: El método load lee el fihcero indicado tantas veces como aparezca la instrucción.
load ‘mi_libreria’
37
![Page 38: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/38.jpg)
38
![Page 39: Feliz Programación ;) Juan Álvarez Álvarez Luis Serrano Arjona Francisco Javier Trujillo Mata](https://reader030.vdocuments.net/reader030/viewer/2022012823/5665b4731a28abb57c918be7/html5/thumbnails/39.jpg)
Wikipedia http://www.ruby-lang.org/es/about/ http://newsgug.blogspot.com/
2007/09/el-le http://www.demiurgo.org/src/ruby/
nguaje-de-programacin-ruby.html http://rubytutorial.wikidot.com/
bloques
39