programación iv - clase de introducción a ruby
DESCRIPTION
Introducción a Ruby on RailsTRANSCRIPT
-
Programacin IVRuby on Rails
Profesores:
Evaldo KalbermatterEduardo Ludi
-
Que vamos a ver?
Ruby - Lenguaje
Ruby on Rails - Framework
Conceptos Desarrollo Web:HTML,CSS,JS
Filosofa de Desarrollo gil:DRY, KIS, C/C
Algunas Mejores Practicas
-
Importante?
-
Bibliografa y Recursos Agile Web Development with Rails (libro)
TryRuby.org (TP1)
RubyMonk.com
RailsForZombies.org (TP2)
RailsCasts.com (400 screencasts)AsciiCasts.com (121 episodios en espaol)
ruby-doc.com
RailsApi.com
-
Que es Ruby?
Lenguaje Multipropsito Interpretado
Todo es un objeto en Ruby
Debilmente Tipado
Sintaxis simple e intuitiva
Librerias especializadas (Gemas)
-
Que es Rails? Web Framework
Open Source
Arquitectura MVC
Desarrollo Web gil
Listo para usar desde el principio
Muchas librerias disponibles (como gemas Engines)
Generadores de Cdigo (Scaffold)
-
Filosofa de Rails
DRY: Dont Repeat Yourself - No te repitas
KIS(S): Keep It Simple - Mantenelo Simple
Convencin sobre configuracin
Desarrollo gil
-
Filosofa de Rails
SIal trabajo inteligente
NOal trabajo duro
(aunque al principio puede costar)
-
Desarrollo gil
Individuos e interacciones sobre procesos y herramientas
Software funcionando sobre una amplia documentacin
Colaborar con el cliente sobre negociar el contrato
Respuesta al cambio sobre seguir un plan
-
Ejemplos en Ruby2 + 3 # => 5 (Fixnum)5.next # => 6 nombre = 'Juan'hola = "Hola #{nombre}" # => "Hola Juan"
"A" + "B" # => "AB" (String)"Hola".reverse # => "aloH""Hola".length # => 4
["gato","perro","loro"] # => Array{ :nombre => 'Juan', :apellido => 'Perez' } # => Hash
-
Ejemplos en Rubyitems = 1..5 # (Range)# => [1,2,3,4,5]items2 = items.map {|item| item*2 } # => [2,4,6,8,10]items.map! {|item| item.even? } # bang method (!)# => [false,true,false,true,false]
numeros = [16,42,8,23,4,15]numeros.sort! # => [4,8,15,16,23,48]numeros[2] # => 15numeros[3] = 17 # => [4,8,15,17,23,48]
-
Nombres en Ruby@variable && nombre_de_metodo(parametro) # todo en minuscula y espacios convertidos en guiones bajos
NombreDeClase && Modulo # Camelizado: primera letras de cada palabra en mayscula y sin espacios
UNA_CONSTANTE # todo en mayscula y espacios convertidos en guiones bajos
Los nombres deben ser lo ms descriptivos posibles, para aprovechar la legibilidad del cdigo.
-
Bloques en Rubyanimales = ['gato','perro','loro','conejo','pez']
# Bloque multi-linea (do ... end)animales.map do |a| a.size if a.size.even? # size es un alias de length
end# => [4,4,6]
# Bloque en una linea ({ ... })animales.map { |a| a.size if a.size.even? } # => [4,4,6]
-
Condiciones en Rubyanimales = [:gato,:perro,:loro,:conejo,:pez]
unless animales.empty? if animales.include?(:elefante) # Con parentesis puts 'Me parece que ests en Africa.' elsif animales.include? :koala # Sin parentesis puts 'Casi seguro que ests en Australia.' else puts 'Lo ms probable es que estes en tu casa.' endend
-
Clases en Rubyclass Car
end
# metodo especial para nuevas instanciasdef initialize(brand,model)@year = Time.now.year # variable de instancia@brand, @model = brand, model@@count += 1
end
# getters y settersattr_accessor :brand, :model, :year
-
Herencia de Clases en Ruby
class Vehicle
end
def initialize(brand,model)# ...
end
attr_accessor :brand, :model, :year
class Car < Vehicle
endattr_accessor :coupe # boolean attribute
-
Metodos en Rubyclass Car@@count = 0 # Variable de clase# Metodo de clasedef self.count@@count
end# Metodo de instanciadef startprint "Bruuumm!"
endend
-
IRBInteractive Ruby
user@ubuntu # irbirb#> class Carirb?> # escribir clase aqui...irb?> endirb#> => nilirb#> gol = Car.new 'VW','Gol'=> # irb#> gol.start"Bruuumm!" => nilirb#> Car.count=> 1
-
tryruby.orgCurso terminado para la prxima clase
-
Best Practice #1
Fat Model, Skinny ControllerModelo gordo, Controlador Flaco:
La lgica de negocio debe estar centralizada en el Modelo, evitando que este dispersa tanto en el Controlaror y la Vista
-
Best Practice #1class Vehicle
validates :brand, :model, presence: truedef title
"#{brand} #{model} (#{year})" # => VW Gol (2013)end
end
class VehiclesController < ApplicationController def create
@vehicle = Vehicle.create(params[:vehicle])redirect_to @vehicle
endend
-
Software (Recomenbligatorio)
Sistema Operativo: Ubuntu (12.04 o superior)
Terminal/Consola con RVM instalado
Editor de Texto: Sublime Text gEdit
+ +
-
goo.gl/ikihRGuia para instalar Ruby y Rails en Ubuntu
-
Trabajo Final
Sitio de e-commerce: catlogo con carro de compras
Tecnologas a aplicar:
Ruby y Rails (MVC)
JavaScript, AJAX y CSS (Bootstrap)