Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Apresentação da Linguagem Ruby durante a Hora da Tecnologia na Universidade Feevale. Além disso, contribuiu para conhecimento da linguagem na disciplina de Paradigmas.

Gregório Chalinski Kusowski

November 07, 2011
Tweet

More Decks by Gregório Chalinski Kusowski

Other Decks in Programming

Transcript

  1. 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
  2. Variáveis a # escopo @a # instância $a # global

    @@a # classe a = 1 @a, $a, @@a = 2, 3, 4 a # => 1 @a # => 2 $a # => 3 @@a # => 4
  3. Métodos def rua= (rua) @rua = rua end def numero=

    (numero) @numero = numero end def endereco return "#{@rua}, #{@numero}" end Declaração
  4. Estruturas de Controle if valor < 7 return "Reprovado" else

    return "Aprovado" end return valor < 7 ? "Reprovado" : "Aprovado" unless pessoas.empty? puts pessoas.size end puts pessoas.size unless pessoas.empty?
  5. 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" end end
  6. Estruturas de Controle for numero in (1..3) puts numero end

    (1..3).each do |numero| puts numero end
  7. Classes class Jogo def self.atual # classe # ... end

    def finalizar # instância # ... end end
  8. Módulos module Time class Jogador end end module Calculadora def

    media_aritmetica(valores = []) if valores.size > 0 valores.sum / valores.size end end end
  9. Orientação a objetos 5.+(2) # => 7 Em Ruby, não

    existem tipos primitivos. Qualquer coisa é um objeto: foo = true foo.nil? # => false bar = nil bar.nil? # => true Qualquer coisa mesmo!
  10. 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"
  11. Paradigma Funcional Por 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"
  12. Alguns tipos de dados Strings v= 1 "V: #{v}" #

    => "V: 1" 'V: #{v}' # => "V: #{v}" %(Teste de String) # => "Teste de String" %w(Teste de String) # => ["Teste", "de", "String"] r = <<KEYWORD Lorem ipsum dolor sit amet, consectetur adipisicing elit KEYWORD
  13. 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
  14. Alguns tipos de dados Arrays telefones = pessoas.collect do |pessoa|

    pessoa.telefone end # Lista de telefones menores = pessoas.select do |pessoa| pessoa.idade < 18 end # Lista de pessoas pessoas.select{|p| p.idade < 18}.collect{|p| p.telefone} # Lista de telefones filtrada
  15. Alguns tipos de dados Hashes hash = Hash.new outro_hash =

    {} hash[:valor] = 555 endereco = {:rua => "5 de Abril", :numero => 321} endereco[:rua] # => "5 de Abril" endereco[:numero] # => 321 hash[:valor] # => 555
  16. Syntax Sugar Simpli"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
  17. DRY Don’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 :numera end Java Ruby
  18. Java Ruby DRY Don’t Repeat Yourself class Endereco attr_accessor :rua,

    :numero end 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; } }