Ruby e Ruby on Rails Universidade Federal de São Carlos Anderson Kenji Mise [email protected] 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/end do print 'bom dia' unless noite? end { 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 Memória x = "vermelho" y = String.new("vermelho") s[:cor] = :vermelho telhado = :vermelho z = :vermelho "vermelho" "vermelho" :vermelho :cor Tratamento de Exceções begin z = x /y rescue TypeError => err print "Erro de tipo" rescue => err print "Erro Geral" ensure z=3 end Estruturas de controle • if else elsif end • unless else end x = 5 unless ano == 2006 • case when else end 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 end • for i in 1..5 print i end • for mes in ['jan', 'fev','mar','abr', 'mai'] print mes end Classes e métodos class Driver def initialize(i) @idade = i @drunk = false end def drunk? @drunk end def get_idade @idade end end Métodos class Tools def area(x,y) x*y end def say "Hello, world" end end Métodos def get_numbers [4, 8, 15, 16, 23,42] end 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 end end setters e getters p2 = Pessoa.new("Joao") print p2.idade p2.nome = "Silva" p2.cpf = '219438539' Herança class Cliente < Pessoa attr_accessor def initialize(n) super(n) end end :credito sobrecarga class Item attr_accessor :valor def +(x) @valor += x.valor end end lendo arquivos File.open('arquivo.txt') do |file| file.each_line do |linha| print linha end end Módulos Module Dispositivo def Dispositivo.ligar puts 'ligado' end end Módulos class Carro < Veiculo require 'Dispositivo' def initialize tmp = Dispositivo.ligar end end 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["endereco"] end end 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 venda de livros de ruby e python ruby python http://radar.oreilly.com/archives/2005/12/ruby_book_sales_surpass_python.html Google Trends ruby python php http://google.com/trends?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 Conhecendo 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 [email protected]