Ruby - Criando código para máquinas e humanos
-
Upload
gregorio-kusowski -
Category
Documents
-
view
532 -
download
1
description
Transcript of Ruby - Criando código para máquinas e humanos
Ruby
Criando código para máquinas e humanos.
Gregório Chalinski KusowskiCiência da Computação - Feevale
Ruby
Yukihiro "Matz" Matsumoto@yukihiro_matz
“Matz”
História
Ruby - 1993
Ruby Alpha - 1994
Ruby 1.0 - 1996
Rails - 2004
Rails 1.0 - 2005
Rails 2.0 - 2007
Rails 3.0 - 2010
Variáveis
a # escopo@a # instância$a # global@@a # classe
a = 1@a, $a, @@a = 2, 3, 4a # => 1@a # => 2$a # => 3@@a # => 4
Métodos
def rua= (rua) @rua = ruaenddef numero= (numero) @numero = numeroenddef endereco return "#{@rua}, #{@numero}"end
Declaração
MétodosUtilização
rua=("Rua 5 de Abril")numero=(321)
endereco() # => Rua 5 de Abril, 321
10.*(5) # => 50
Estruturas de Controle
if valor < 7 return "Reprovado"else return "Aprovado"end
return valor < 7 ? "Reprovado" : "Aprovado"
unless pessoas.empty? puts pessoas.sizeend
puts pessoas.size unless pessoas.empty?
Estruturas de Controle
def resultado(nota) case nota when (0..3); "Reprovado" when (3..7); "Recuperação" when (7..10); "Aprovado" else raise "Nota inválida" endend
Estruturas de Controle
for numero in (1..3) puts numeroend
(1..3).each do |numero| puts numeroend
Classes
class Jogo def self.atual # classe # ... end def finalizar # instância # ... endend
Módulosmodule Time class Jogador endend
module Calculadora def media_aritmetica(valores = []) if valores.size > 0 valores.sum / valores.size end endend
Orientação a objetos
5.+(2) # => 7
Em Ruby, não existem tipos primitivos.Qualquer coisa é um objeto:
foo = truefoo.nil? # => falsebar = nilbar.nil? # => true
Qualquer coisa mesmo!
FlexibilidadeA linguagem não limita o programador.
Você pode adicionar funcionalidade, ou alterar o que já existe!
class String def carioqueish "#{self}sh" endend
"Oi".carioqueish # => "Oish"
Paradigma FuncionalPor in!uência da linguagem Lisp, Ruby conta com
estruturas de blocos, que funcionam como closures.
a = lambda { "Sem Argumento" }
b = Proc.new do |args| puts "Chamou b com: #{args}"end
b.call("Argumento") # => "Chamou b com: Argumento"
Alguns tipos de dadosStrings
v= 1"V: #{v}" # => "V: 1"'V: #{v}' # => "V: #{v}"%(Teste de String) # => "Teste de String" %w(Teste de String) # => ["Teste", "de", "String"]r = <<KEYWORDLorem ipsum dolor sit amet,consectetur adipisicing elitKEYWORD
Alguns tipos de dadosArrays
a = Array.newb = [3]
a << 1a.push 2
a # => [1, 2]a + b # => [1, 2, 3]a.inject(:+) # => 3
Alguns tipos de dadosArrays
telefones = pessoas.collect do |pessoa| pessoa.telefoneend # Lista de telefones
menores = pessoas.select do |pessoa| pessoa.idade < 18end # Lista de pessoas
pessoas.select{|p| p.idade < 18}.collect{|p| p.telefone} # Lista de telefones filtrada
Alguns tipos de dadosHashes
hash = Hash.newoutro_hash = {}hash[:valor] = 555endereco = {:rua => "5 de Abril", :numero => 321}
endereco[:rua] # => "5 de Abril" endereco[:numero] # => 321hash[:valor] # => 555
Syntax SugarSimpli"cando tanto a escrita, quanto a leitura.
1.+(1)1+1conta.valores=('teste')conta.valores = 'teste'conta.imprime_extrato()conta.imprime_extratoif (condicao)if condicao
DRYDon’t Repeat Yourself
public class Endereco { private String rua; private Integer numero; public String getRua() { return rua; } public void setRua(String rua) { this.rua = rua; } public Integer getNumero() { return numero; } public void setNumero(Integer numero) { this.numero = numero; }}
class Endereco attr_writer :rua attr_writer :numero attr_reader :rua attr_reader :numeraend
Java
Ruby
Java
Ruby
DRYDon’t Repeat Yourself
class Endereco attr_accessor :rua, :numeroend
public class Endereco { private String rua; private Integer numero; public String getRua() { return rua; } public void setRua(String rua) { this.rua = rua; } public Integer getNumero() { return numero; } public void setNumero(Integer numero) { this.numero = numero; }}
Mixins
Exceptions
Meta-programação
Threads
Implementações (JRuby, etc)
Não para por aí...
http://www.ruby-lang.org/
http://linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html
http://mislav.uniqpath.com/poignant-guide/book/
http://ruby-doc.org/
http://ruby-doc.org/docs/ProgrammingRuby/
http://www.informit.com/articles/article.aspx?p=18225
http://tarr.uspto.gov/servlet/tarr?regser=serial&entry=77119206
http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done
http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done
Referências
Obrigado pela
atenção!