ruby - criando código para máquinas e humanos

25
Ruby

Upload: gregorio-kusowski

Post on 24-May-2015

532 views

Category:

Documents


1 download

DESCRIPTION

Introdução a linguagem de programação Ruby, onde tópicos comohistó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

TRANSCRIPT

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

Ruby

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

Criando código para máquinas e humanos.

Gregório Chalinski KusowskiCiência da Computação - Feevale

Ruby

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

Yukihiro "Matz" Matsumoto@yukihiro_matz

“Matz”

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

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

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

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

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

Métodos

def rua= (rua) @rua = ruaenddef numero= (numero) @numero = numeroenddef endereco return "#{@rua}, #{@numero}"end

Declaração

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

MétodosUtilização

rua=("Rua 5 de Abril")numero=(321)

endereco() # => Rua 5 de Abril, 321

10.*(5) # => 50

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

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?

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

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

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

Estruturas de Controle

for numero in (1..3) puts numeroend

(1..3).each do |numero| puts numeroend

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

Classes

class Jogo def self.atual # classe # ... end def finalizar # instância # ... endend

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

Módulosmodule Time class Jogador endend

module Calculadora def media_aritmetica(valores = []) if valores.size > 0 valores.sum / valores.size end endend

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

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!

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

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"

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

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"

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

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

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

Alguns tipos de dadosArrays

a = Array.newb = [3]

a << 1a.push 2

a # => [1, 2]a + b # => [1, 2, 3]a.inject(:+) # => 3

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

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

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

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

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

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

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

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

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

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; }}

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

Mixins

Exceptions

Meta-programação

Threads

Implementações (JRuby, etc)

Não para por aí...

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

Obrigado pela

atenção!