Ruby - Criando código para máquinas e humanos

  • 497 views
Uploaded on

Introdução a linguagem de programação Ruby, onde tópicos como …

Introdução a linguagem de programação Ruby, onde tópicos como
história, comunidade, e diferenciais da linguagem serão abordados.
Será dada uma ênfase na simplicidade e produtividade do código em si,
além de alguns exemplos utilizados no dia-a-dia.

Apresentado em 07/11/2011, na Hora da Tecnologia, na Universidade Feevale.
http://www.feevale.br/internas/vwImprensaVisualizar.asp?strInd=via6&intIdSecao=2578&intIdConteudo=49091&dteDataPublicacao=2011/11/05

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
497
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
9
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Ruby
  • 2. RubyCriando código para máquinas e humanos. Gregório Chalinski Kusowski Ciência da Computação - Feevale
  • 3. “Matz”Yukihiro "Matz" Matsumoto @yukihiro_matz
  • 4. História Ruby - 1993Ruby Alpha - 1994 Ruby 1.0 - 1996 Rails - 2004 Rails 1.0 - 2005 Rails 2.0 - 2007 Rails 3.0 - 2010
  • 5. Variáveis a # escopo @a # instância $a # global @@a # classea = 1@a, $a, @@a = 2, 3, 4a # => 1@a # => 2$a # => 3@@a # => 4
  • 6. Métodos Declaraçãodef rua= (rua) @rua = ruaenddef numero= (numero) @numero = numeroenddef endereco return "#{@rua}, #{@numero}"end
  • 7. Métodos Utilizaçãorua=("Rua 5 de Abril")numero=(321)endereco() # => Rua 5 de Abril, 321 10.*(5) # => 50
  • 8. Estruturas de Controleif valor < 7 return "Reprovado" unless pessoas.empty?else puts pessoas.size return "Aprovado" endendreturn valor < 7 ? "Reprovado" : "Aprovado" puts pessoas.size unless pessoas.empty?
  • 9. Estruturas de Controledef resultado(nota) case nota when (0..3); "Reprovado" when (3..7); "Recuperação" when (7..10); "Aprovado" else raise "Nota inválida" endend
  • 10. Estruturas de Controle for numero in (1..3) puts numero end (1..3).each do |numero| puts numero end
  • 11. Classesclass Jogo def self.atual # classe # ... end def finalizar # instância # ... endend
  • 12. Módulos module Time class Jogador end endmodule Calculadora def media_aritmetica(valores = []) if valores.size > 0 valores.sum / valores.size end endend
  • 13. Orientação a objetosEm Ruby, não existem tipos primitivos. Qualquer coisa é um objeto: 5.+(2) # => 7 Qualquer coisa mesmo! foo = true foo.nil? # => false bar = nil bar.nil? # => true
  • 14. Flexibilidade A linguagem não limita o programador.Você pode adicionar funcionalidade, ou alterar o que já existe! class String def carioqueish "#{self}sh" end end "Oi".carioqueish # => "Oish"
  • 15. Paradigma Funcional Por in!uência da linguagem Lisp, Ruby conta comestruturas 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"
  • 16. Alguns tipos de dados Stringsv= 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
  • 17. Alguns tipos de dados Arrays a = Array.new b = [3] a << 1 a.push 2 a # => [1, 2] a + b # => [1, 2, 3] a.inject(:+) # => 3
  • 18. Alguns tipos de dados Arraystelefones = pessoas.collect do |pessoa| pessoa.telefoneend # Lista de telefonesmenores = pessoas.select do |pessoa| pessoa.idade < 18end # Lista de pessoaspessoas.select{|p| p.idade < 18}.collect{|p|p.telefone} # Lista de telefones filtrada
  • 19. Alguns tipos de dados Hasheshash = Hash.newoutro_hash = {}hash[:valor] = 555endereco = {:rua => "5 de Abril", :numero => 321}endereco[:rua] # => "5 de Abril"endereco[:numero] # => 321hash[:valor] # => 555
  • 20. Syntax SugarSimpli"cando tanto a escrita, quanto a leitura. 1.+(1) 1+1 conta.valores=(teste) conta.valores = teste conta.imprime_extrato() conta.imprime_extrato if (condicao) if condicao
  • 21. DRY Don’t Repeat Yourself Javapublic class Endereco { private String rua; private Integer numero; Ruby public String getRua() { return rua; class Endereco } public void setRua(String rua) { attr_writer :rua this.rua = rua; attr_writer :numero } attr_reader :rua public Integer getNumero() { attr_reader :numera return numero; } end public void setNumero(Integer numero) { this.numero = numero; }}
  • 22. DRY Don’t Repeat Yourself Javapublic class Endereco { private String rua; private Integer numero; public String getRua() { return rua; Ruby } public void setRua(String rua) { class Endereco this.rua = rua; } attr_accessor :rua, :numero public Integer getNumero() { end return numero; } public void setNumero(Integer numero) { this.numero = numero; }}
  • 23. Não para por aí... Mixins Exceptions Meta-programação ThreadsImplementações (JRuby, etc)
  • 24. Referênciashttp://www.ruby-lang.org/http://linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.htmlhttp://mislav.uniqpath.com/poignant-guide/book/http://ruby-doc.org/http://ruby-doc.org/docs/ProgrammingRuby/http://www.informit.com/articles/article.aspx?p=18225http://tarr.uspto.gov/servlet/tarr?regser=serial&entry=77119206http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-donehttp://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done
  • 25. Obrigado pelaatenção!