end - Vardump

Propaganda
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]
Download