SlideShare une entreprise Scribd logo
1  sur  36
Ruby, Ruby on Rails,
     IronRuby
              Miguel Rodriguez




                     Enero 2010
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++
Ruby, Ruby on Rails,
     IronRuby
Es decir...
Ruby por todos lados!
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.
Yukihiro “matz” Matsumoto

Clases
               1995                 Objetos


                                  Instancias
 Python, Perl , Smalltalk, Lips                OpenSource GPL



  Rubygems                                            Portable
             interpretado, reflexivo y
Herencia
            orientado a objecionesetos
                                 Interfaces
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"]
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
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
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
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']
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/ }
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
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?'
y tambien...


✓mark-and-sweep garbage collector
✓escribir extenciones en C para Ruby
✓puede cargar bibliotecas de extensión
 dinámicamente
✓threading
¿porque lo uso para casi todo?
y bueno no es para flame war pero ...
no apesta tanto como otros :)




grafica basada en google code search
es una implementacion de Ruby para
Microsoft .NET framework, para aprovechar
DLR (Dynamic Languaje Runtime)
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
Estado de desarrollo

  •   No integracion con IDE
  •   Lack ASP.NET app
  •   No LinQ
  •   No WPF data binding
  •   Performance
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
Model -View-Controller
Active Record
object-relational mapping (ORM)

  ✓Encapsula el acceso a BD
  ✓Métodos de clase para
   obtener instancias
  ✓migraciones
Active Record
               object-relational mapping (ORM)
                     class Product < ActiveRecord::Base
                     end

                      CREATE TABLE products (
                        id int(11) NOT NULL auto_increment,
                        name varchar(255),
                        PRIMARY KEY (id)
                      );



firm = Firm.new("name" => "Next Angle")
# SQL: INSERT INTO companies (name, type) VALUES("Next Angle", "Firm")
firm.save
client = Client.new("name" => "37signals", "client_of" => firm.id)
# SQL: INSERT INTO companies (name, client_of, type) VALUES("37signals", 1, "Firm")
client.save
# SQL: SELECT * FROM companies WHERE id = 1
next_angle = Company.find(1)

# SQL: SELECT * FROM companies WHERE id = 1 AND type = 'Firm'
next_angle = Firm.find(1)

# SQL: SELECT * FROM companies WHERE id = 1 AND name = 'Next Angle'
next_angle = Company.find(:first, :conditions => "name = 'Next Angle'")

next_angle = Firm.find_by_sql("SELECT * FROM companies WHERE id = 1").first
REST
Representational State Transfer
REST
Representational State Transfer
TESTEAR ANTES DE CODIFICAR



 Tests unitarios (modelos)
 Tests funcionales (controladores)
 Test de integración (acciones)
Conclusiones
Usando Rails




http://rails100.pbworks.com/Alexa+Rankings
Links y creditos
‣http://www.slideshare.net/demisone/athens-ruby-meetup-3-ironruby
‣http://poignantguide.net/ruby/
‣http://www.humblelittlerubybook.com/book/
‣http://ruby-doc.org/docs/ProgrammingRuby/
‣http://en.wikipedia.org/wiki/IronRuby
‣http://github.com/ironruby/ironruby/
‣http://ruby-lang.org/en/documentation/quickstart/
‣http://en.wikipedia.org/wiki/Ruby_%28programming_language%29
‣http://the-cocktail.com/docs/rails1/
Preguntas?
Gracias!
                    Miguel Rodriguez

                 http://twitter.com/miguelr
http://www.linkedin.com/in/miguelrodriguezs

Contenu connexe

Similaire à Ruby Latin Developer20012010

Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRJuan Belón Pérez
 
Programando con Python
Programando con PythonProgramando con Python
Programando con PythonMario IC
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#Luis Ruiz Pavón
 
Resumen Java Script
Resumen Java ScriptResumen Java Script
Resumen Java Scriptjlgomezri
 
Metaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programasMetaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programasSergio Gil
 
C curso intr
C curso intr C curso intr
C curso intr leo24012
 
Lenguajec intorduccionui
Lenguajec intorduccionuiLenguajec intorduccionui
Lenguajec intorduccionui3dwin3
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Railsguest638090
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friendflekoso
 
Workshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a RubyWorkshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a RubyEdgar Suarez
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Richard Eliseo Mendoza Gafaro
 
Java script
Java script Java script
Java script Pidusa
 

Similaire à Ruby Latin Developer20012010 (20)

Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 
Ruby
RubyRuby
Ruby
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
Programando con Python
Programando con PythonProgramando con Python
Programando con Python
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#
 
Python (práctica 4)
Python (práctica 4)Python (práctica 4)
Python (práctica 4)
 
Resumen Java Script
Resumen Java ScriptResumen Java Script
Resumen Java Script
 
Idiomatic Ruby
Idiomatic RubyIdiomatic Ruby
Idiomatic Ruby
 
Metaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programasMetaprogramación (en Ruby): programas que escriben programas
Metaprogramación (en Ruby): programas que escriben programas
 
C curso intr
C curso intr C curso intr
C curso intr
 
Python boloñesa
Python boloñesa Python boloñesa
Python boloñesa
 
Lenguajec intorduccionui
Lenguajec intorduccionuiLenguajec intorduccionui
Lenguajec intorduccionui
 
Introducción a Ruby on Rails
Introducción a Ruby on RailsIntroducción a Ruby on Rails
Introducción a Ruby on Rails
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friend
 
Javascript
JavascriptJavascript
Javascript
 
Workshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a RubyWorkshop Camp México 09 - Introducción a Ruby
Workshop Camp México 09 - Introducción a Ruby
 
IntroducciónPHP.pptx
IntroducciónPHP.pptxIntroducciónPHP.pptx
IntroducciónPHP.pptx
 
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)Semana 2   Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
Semana 2 Fundamentos de Python(Entradas, Salidas y Operaciones Aritméticas)
 
Php Basico
Php BasicoPhp Basico
Php Basico
 
Java script
Java script Java script
Java script
 

Dernier

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 

Dernier (10)

EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
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++
  • 3. Ruby, Ruby on Rails, IronRuby
  • 5. Ruby por todos lados!
  • 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.
  • 7. Yukihiro “matz” Matsumoto Clases 1995 Objetos Instancias Python, Perl , Smalltalk, Lips OpenSource GPL Rubygems Portable interpretado, reflexivo y Herencia orientado a objecionesetos Interfaces
  • 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
  • 17. ¿porque lo uso para casi todo?
  • 18. y bueno no es para flame war pero ...
  • 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
  • 27. Active Record object-relational mapping (ORM) ✓Encapsula el acceso a BD ✓Métodos de clase para obtener instancias ✓migraciones
  • 28. Active Record object-relational mapping (ORM) class Product < ActiveRecord::Base end CREATE TABLE products ( id int(11) NOT NULL auto_increment, name varchar(255), PRIMARY KEY (id) ); firm = Firm.new("name" => "Next Angle") # SQL: INSERT INTO companies (name, type) VALUES("Next Angle", "Firm") firm.save client = Client.new("name" => "37signals", "client_of" => firm.id) # SQL: INSERT INTO companies (name, client_of, type) VALUES("37signals", 1, "Firm") client.save # SQL: SELECT * FROM companies WHERE id = 1 next_angle = Company.find(1) # SQL: SELECT * FROM companies WHERE id = 1 AND type = 'Firm' next_angle = Firm.find(1) # SQL: SELECT * FROM companies WHERE id = 1 AND name = 'Next Angle' next_angle = Company.find(:first, :conditions => "name = 'Next Angle'") next_angle = Firm.find_by_sql("SELECT * FROM companies WHERE id = 1").first
  • 31. TESTEAR ANTES DE CODIFICAR Tests unitarios (modelos) Tests funcionales (controladores) Test de integración (acciones)
  • 36. Gracias! Miguel Rodriguez http://twitter.com/miguelr http://www.linkedin.com/in/miguelrodriguezs

Notes de l'éditeur

  1. e Ruby est&amp;#xE1; dise&amp;#xF1;ado para la productividad y la diversi&amp;#xF3;n del desarrollador, siguiendo los principios de una buena interfaz de usuario. A menudo la gente, especialmente los ingenieros en inform&amp;#xE1;tica, se centran en las m&amp;#xE1;quinas. Ellos piensan, &quot;Haciendo esto, la m&amp;#xE1;quina funcionar&amp;#xE1; m&amp;#xE1;s r&amp;#xE1;pido. Haciendo esto, la m&amp;#xE1;quina funcionar&amp;#xE1; de manera m&amp;#xE1;s eficiente. Haciendo esto...&quot; Est&amp;#xE1;n centrados en las m&amp;#xE1;quinas, pero en realidad necesitamos centrarnos en las personas, en c&amp;#xF3;mo hacen programas o c&amp;#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&amp;#xF3;n Ruby que proporciona un formato est&amp;#xE1;ndar y autocontenido (llamado gem) Es, por tanto, equivalente al papel que juegan CPAN y PEAR en los lenguajes Perl y PHP, respectivamente.
  2. Las clases pueden mezclar (mixin) un m&amp;#xF3;dulo e incorporar todos sus m&amp;#xE9;todos gratuitamente. Por ejemplo, cualquier clase que implemente el m&amp;#xE9;todo each puede incorporar el m&amp;#xF3;dulo Enumerable, que le agrega un conjunto de m&amp;#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, &amp;#x201C;Esto es mejor para tu salud&amp;#x201D;.
  3. Consume all the C# code you want! The huge .Net library ecosystem External .Net libraries Custom / existing C# code
  4. REST describe todo un paradigma de arquitectura para aplicaciones que solicitan y manipulan recursos en la web utilizando los m&amp;#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&amp;#xB4;es del protocolo HTTP. Dichos recursos pueden representarse en diversos formatos como HTML, XML o RSS, segun lo solicite el cliente.
  5. URLs limpias. Formatos de respuesta variados Menos codigo. Controladores orientados a CRUD. Diseno limpio de la aplicacion.
  6. facil de usar, mitos de escalabilidad, empresas.. Panama