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

699 views

Published on

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

  • Be the first to comment

  • Be the first to like this

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

  1. 1. Ruby
  2. 2. RubyCriando código para máquinas e humanos. Gregório Chalinski Kusowski Ciência da Computação - Feevale
  3. 3. “Matz”Yukihiro "Matz" Matsumoto @yukihiro_matz
  4. 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. 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. 6. Métodos Declaraçãodef rua= (rua) @rua = ruaenddef numero= (numero) @numero = numeroenddef endereco return "#{@rua}, #{@numero}"end
  7. 7. Métodos Utilizaçãorua=("Rua 5 de Abril")numero=(321)endereco() # => Rua 5 de Abril, 321 10.*(5) # => 50
  8. 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. 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. 10. Estruturas de Controle for numero in (1..3) puts numero end (1..3).each do |numero| puts numero end
  11. 11. Classesclass Jogo def self.atual # classe # ... end def finalizar # instância # ... endend
  12. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 23. Não para por aí... Mixins Exceptions Meta-programação ThreadsImplementações (JRuby, etc)
  24. 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. 25. Obrigado pelaatenção!

×