programación iv - clase de introducción a ruby

Upload: eduardo-ludi

Post on 15-Oct-2015

25 views

Category:

Documents


0 download

DESCRIPTION

Introducción a Ruby on Rails

TRANSCRIPT

  • 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)