Guia Basica para bachillerato de Circuitos Basicos
Ruby Latin Developer20012010
1. Ruby, Ruby on Rails,
IronRuby
Miguel Rodriguez
Enero 2010
2. 2 Lenguajes de Programación
“Existen dos tipos de lenguajes de programación:
los que la gente se queja todo el rato;
y por otro, los que nadie utiliza.”
Bjarne Stroustrup, inventor del lenguaje C++
6. Ruby es ...
Un lenguaje de programación dinámico y de
código abierto enfocado en la simplicidad
y productividad.
Su elegante sintaxis se siente natural al leerla y
fácil al escribirla.
8. Flexibilidad Bloques
motores_de_busqueda =
class Numeric %w[Google Yahoo MSN].map do |motor|
def sumar(x) "http://www." + motor.downcase + ".com"
self.+(x) end
end
end
y = 5.sumar 6
# ahora y vale 11
Mixin
class MiArray
Hash include Enumerable
end
grades = Hash.new
grades["Bob"] = 82
grades["Jim"] = 94
grades["Billy"] = 58
Arrays
puts grades["Jim"]
days1 = ["Mon", "Tue", "Wed"]
days2 = ["Thu", "Fri", "Sat", "Sun"]
days = days1 + days2
=> ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
9. Metodos
def suma(i,j)
i+j
end
suma(3,2)
» 5
def suma_si_existe(i,j=nil)
if j
"Con j=#{j}: " + (i+j).to_s
else
"Sin j (i=#{i}): " + i.to_s
end
end
suma_si_existe(1)
» Sin j (i=1): 1
suma_si_existe 3, 5
» Con j=5: 8
10. Expresiones : Condiciones
es_cierto = true
puts "Es cierto" if es_cierto
» Es cierto
puts "Es cierto ¡otra vez!" unless not es_cierto
» Es cierto ¡otra vez!
programas = 3
numero_programas = if programas < 2
"hay un programa"
elsif programas >= 2 and programas < 4
"hay entre dos y tres programas"
else
"hay muchos programas"
end
puts numero_programas
» hay entre dos y tres programas
11. Iteradores
a = 3
while a > 0
a -= 1
end
3.times do
print 'hola' + ' '
end
» hola hola hola
for i in ['lunes', 'martes', 'miercoles', 'jueves', 'viernes']
print i, ' '
end
» lunes martes miercoles jueves viernes
12. Arrays
a = ['a', 'b', 'c','e','f','g','h','a','h']
a.size
» 9
a.include?('d') » false
a[2]
» c
a.index('c')
2
»
a.join(' - ')
» a - b - c - e - f - g - h - a - h
a.slice(1,4)
['b','c','e','f']
»
a.sort
» ['a','a','b','c','e','f','g','h','h']
a.uniq
» ['a','b','c','e','f','g','h']
13. Hash
persona = {'nombre' => 'Juan',
'apellidos' => 'García Robledo',
'telefono' => '915671234' }
persona['nombre']
» Juan
persona['edad'] = 26
persona.each_key {|key| print key,' '}
» nombre telefono apellidos
persona.each {|key,value| print key,' > ',value, ' ' }
» nombre > Juan telefono > 915671234
apellidos > García Robledo
persona.delete_if {|key,value| key == 'telefono' and value =~ /^91/ }
14. Manejo de excepciones
f = File.open("testfile")
begin
puts "Fichero abierto"
rescue
puts "No se ha podido abrir el fichero"
else
puts "Congratulations: no errors!"
ensure
f.close unless f.nil?
end
15. Clases y Herencias
class Persona
def initialize(nombre, apellidos, edad)
@nombre,@apellidos,@edad = nombre,apellidos,edad
end
def es_mayor_edad?
@edad >= 18
end
end
p = Persona.new('Juan','García',18)
p.es_mayor_edad?
» true
p = Persona.new('Felipe','Andrés',14)
p.es_mayor_edad?
» false
p.edad
» undefined method `edad'
class Persona class Persona
attr_reader :nombre,:edad ...
attr_writer :edad private
def initialize(nombre, apellidos, edad) def es_mayor_edad?
@nombre,@apellidos,@edad = nombre,apellidos,edad @edad >= 18
end end
def es_mayor_edad? end
@edad >= 18
end class Adulto < Persona
end public :es_mayor_edad?
def initialize(nombre, apellidos,edad) super end
p = Persona.new('Juan','García',18) end
p.edad
» 18
p.edad = 15
» 15 a = Adulto.new('Jaime','García',15)
p.es_mayor_edad?
false
» a.es_mayor_edad?
» false
p = Persona.new('Juan','García',18)
p.es_mayor_edad?
» private method `es_mayor_edad?'
16. y tambien...
✓mark-and-sweep garbage collector
✓escribir extenciones en C para Ruby
✓puede cargar bibliotecas de extensión
dinámicamente
✓threading
19. no apesta tanto como otros :)
grafica basada en google code search
20.
21. es una implementacion de Ruby para
Microsoft .NET framework, para aprovechar
DLR (Dynamic Languaje Runtime)
22.
23. Ventajas o al menos donde se quiere llegar
✓ Deploy on .Net infrastructure
✓ Web apps on IIS (Rails on .Net!)
✓ Consumir nativamente servicios .net
✓ Consumir codigo C#
✓ SQL
✓ Office
✓ Active Directory
✓ Exchange
✓ Interoperabilidad con .net
24. Estado de desarrollo
• No integracion con IDE
• Lack ASP.NET app
• No LinQ
• No WPF data binding
• Performance
25. Rails
Convencion sobre configuracion
Framework
Open Source AJAX
No config apps
lighttpd
RESTFUL
Database Agnostic MVC
BDD
DRY (Dont Repeat Yourself) Test
No XML innecesario
David Heinemeier Hansson Menos código
36. Gracias!
Miguel Rodriguez
http://twitter.com/miguelr
http://www.linkedin.com/in/miguelrodriguezs
Notes de l'éditeur
e Ruby est&#xE1; dise&#xF1;ado para la productividad y la diversi&#xF3;n del desarrollador, siguiendo los principios de una buena interfaz de usuario.
A menudo la gente, especialmente los ingenieros en inform&#xE1;tica, se centran en las m&#xE1;quinas. Ellos piensan, "Haciendo esto, la m&#xE1;quina funcionar&#xE1; m&#xE1;s r&#xE1;pido. Haciendo esto, la m&#xE1;quina funcionar&#xE1; de manera m&#xE1;s eficiente. Haciendo esto..." Est&#xE1;n centrados en las m&#xE1;quinas, pero en realidad necesitamos centrarnos en las personas, en c&#xF3;mo hacen programas o c&#xF3;mo manejan las aplicaciones en los ordenadores. Nosotros somos los jefes. Ellos son los esclavos.
RubyGems es un gestor de paquetes para el lenguaje de programaci&#xF3;n Ruby que proporciona un formato est&#xE1;ndar y autocontenido (llamado gem) Es, por tanto, equivalente al papel que juegan CPAN y PEAR en los lenguajes Perl y PHP, respectivamente.
Las clases pueden mezclar (mixin) un m&#xF3;dulo e incorporar todos sus m&#xE9;todos gratuitamente. Por ejemplo, cualquier clase que implemente el m&#xE9;todo each puede incorporar el m&#xF3;dulo Enumerable, que le agrega un conjunto de m&#xE9;todos que usan each para recorrer sus elementos.
un verdadero mark-and-sweep garbage collector para todos los objetos de Ruby. No es necesario mantener contadores de referencias en bibliotecas externas. Como dice Matz, &#x201C;Esto es mejor para tu salud&#x201D;.
Consume all the C# code you want!
The huge .Net library ecosystem
External .Net libraries
Custom / existing C# code
REST describe todo un paradigma de arquitectura para aplicaciones que solicitan y manipulan recursos en la web utilizando los m&#xB4;etodos estandar de HTTP: GET, POST, PUT y DELETE.
En REST todo recurso es una entidad direccionable mediante una URL unica con la que se puede interactuar a trav&#xB4;es del protocolo HTTP. Dichos recursos pueden representarse en diversos formatos como HTML, XML o RSS, segun lo solicite el cliente.
URLs limpias.
Formatos de respuesta variados
Menos codigo.
Controladores orientados a CRUD.
Diseno limpio de la aplicacion.
facil de usar, mitos de escalabilidad, empresas.. Panama