Ruby e Ruby on Rails Universidade Federal de São Carlos Anderson Kenji Mise kenji@vardump.com
Ruby? linguagem de programação orientada a objetos (tudo é objeto)
Ruby on Rails? RoR é um framework para desenvolvimento web feito em Ruby
Histórico do Ruby Japão, 1995 Yukihiro 'Matz' Matsumoto stable1.8.4 - março/2006 puramente orientado a objetos mais popular que Python, no Japão
Características
Tudo é um objeto
5 é um objeto da class Fixnum "palavra" é um objeto da classe String "palavra".capitalize retorna "Palavra" 5.times { print "oi mundo" } 5+2
carro = Veiculo.new() carro.porta.abrir() carro.porta.abrir.fechar carro.porta.abrir.fechar.ligar.acelerar carro.ligar unless carro.motorista.drunk? carro.desligar if carro.motorista.idade < 18
características variáveis globais, de classe (estáticas), de instância e locais tratamento de exceções herança única Módulos (mixins) Sintaxe de blocos Garbage Collector (mark & sweep)
características linguagem de script, interpretada planos para gerar bytecodes na versão 1.9 Threading Expressões Regulares GNU/Linux, Unix, DOS, Mac OS, BeOS, OS/2, Windows
free software
do começo
variáveis variáveis locais em minúsculas x = 2 constantes em maiúsculas Pi = 3.1415 variáveis globais com cifrão $cambio = 2.10 variáveis de classe (estáticas) @@blocked = true variáveis de instância @idade = 19
blocos de código delimitados por { } ou do/ do print 'bom dia' unless noite? { print "bom dia" if!noite? } 5.times { puts 'olá' } blocos recebem parâmetros 5.times { n puts 'olá' + n.to_s }
Array m = ["janeiro", "fevereiro","março","abril","maio"] m << "junho" m.push("julho") m.push "julho" m.include?("abril") m.include? "abril"
Hash s = { "a"=>"amora", "b"=>"bairro","c"=>"cor"} s[9] = "nove" s[:cor] = :vermelho print s["a"] print s[:cor] print s[9]
Iteração m.each { mes print mes } s.each { key,value print key.to_s + value.to_s } teste.sort.each { x print x }
Símbolos x = "vermelho" y = String.new("vermelho") s[:cor] = :vermelho telhado = :vermelho Memória "vermelho" "vermelho" :vermelho :cor z = :vermelho
Tratamento de Exceções begin z = x /y rescue TypeError => err print "Erro de tipo" rescue => err print "Erro Geral" ensure z = 3
Estruturas de controle if else elsif unless else x = 5 unless ano == 2006 case when else
range 3..9 3, 4, 5, 6, 7, 8, 9 3...9 3, 4, 5, 6, 7, 8 x = 1..5 x.each { print 'oi' }
loop while condição for i in 1..5 print i for mes in ['jan', 'fev','mar','abr', 'mai'] print mes
Classes e métodos class Driver def initialize(i) @idade = i @drunk = false def drunk? @drunk def get_idade @idade
Métodos class Tools def area(x,y) x * y def say "Hello, world"
Métodos def get_numbers [4, 8, 15, 16, 23,42] a1,a2,a3,a4,a5,a6 = get_numbers last, first = "mise", "anderson"
setters e getters class Pessoa attr_reader :idade attr_accessor :nome attr_writer :cpf def initialize(n) @nome = n
setters e getters p2 = Pessoa.new("Joao") print p2.idade p2.nome = "Silva" p2.cpf = '219438539'
Herança class Cliente < Pessoa attr_accessor :credito def initialize(n) super(n)
sobrecarga class Item attr_accessor :valor def +(x) @valor += x.valor
lo arquivos File.open('arquivo.txt') do file file.each_line do linha print linha
Módulos Module Dispositivo def Dispositivo.ligar puts 'ligado'
Módulos class Carro < Veiculo require 'Dispositivo' def initialize tmp = Dispositivo.ligar
Banco de Dados require 'dbi' con = DBI.connect ( "DBI:Mysql:dbname:localhost","user","password") con.execute('select * from tabela') do resultset resultset.fetch do tupla print tupla["nome"]+" "+tupla["ereco"]
XSLT require 'xml/xslt' xslt = XML::XSLT.new() xslt.xls = 'layout.xsl' xslt.xml = 'dados.xml' print xslt.serve xslt.save('resultado.html')
Ruby na web mod_ruby no Apache CGI eruby <%= "palavras".capitalize %>
Ruby no mundo va de livros de ruby e python ruby python http://radar.oreilly.com/archives/2005/12/ruby_book_sales_surpass_python.html
Google Trs ruby python php http://google.com/trs?q=python+language%2c+ruby+language%2c++php+language&ctab=0&geo=all&date=all
Referências
Ruby in a Nutshell A Desktop Quick Reference Autor: Yukihiro Matsumoto
Ruby Conheco a linguagem Autor: Eustáquio 'TaQ' Rangel de Oliveira Jr.
Programming Ruby The Pragmatic Programmer's Guide Autor: Dave Thomas
Agile Web Development with Rails Autores: Dave Thomas, David Heinemeier Hansson
Tietagem
Contato http://vardump.com/edu kenji@vardump.com