Linguagem de Programação -
           Ruby



 Diego Rubin - rubin.diego@gmail.com
Ruby - Introdução

●   Desenvolvida por Yukishiro Matsumoto;
●   Lançada em 1995;
●   Baseado nas linguagens Perl, SmallTalk e
    Python;
●   Escrita em C;
●   Famosa por causa do framework Rails;
●   Multiplataforma;
●   Versão 1.8
Ruby - Características

●   Interpretada;
Ruby - Características

Uma Linguagem Interpretada
●   Não há compilação do código;
●   A analise sintática acontece em tempo de
    execução;
Ruby - Características

●   Interpretada;
●   Tipagem dinâmica e forte;
Ruby - Características

Tipagem
●   Não é necessário a declaração das variáveis;

    Exemplo em Pascal        Exemplo em Ruby

    var                      i=5
       i:integer
    begin                    i = “Inteiro”
       i:= 5;
    end.


●   Tipagem forte;
●   Objeto tem como limite a memória;
Ruby - Características

●   Interpretada;
●   Tipagem dinâmica e forte;
●   Obedece ao paradigma da orientação a
    objeto;
Ruby - Características

Orientação a Objetos
●   Considerada totalmente orientadas a objetos;
●   Tipos primitivos são classes;
●   Mixin's, uma alternativa a herança múltipla;
Ruby - Características

●   Interpretada;
●   Tipagem dinâmica e forte;
●   Obedece ao paradigma da orientação a
    objeto;
●   Linguagem de propósito geral;
Ruby - Características

Linguagem de Propósito Geral
●   Scripts
●   Aplicativos Desktop
●   Aplicativos Web
●   Serviços Web
Ruby - Características

●   Interpretada;
●   Tipagem dinâmica e forte;
●   Obedece ao paradigma da orientação a
    objeto;
●   Linguagem de propósito geral;
●   E...
Ruby - Características



           É Livre
Instalando o Interpretador

No Linux:

Nas principais distros ele já vem instalado, se não vier e só
usar o gerenciador de pacotes deles.
Tarball

$ tar -zxvf ruby-1.8.x.tar.gz
$ cd ruby-1.8.x
$ ./configure && make
$ su
# make install




No Windows:

Baixar o instalador no site oficial do ruby.
Depois NNF.
Ferramentas - IRB

Especie de “prompt de comando”.
Muito útil para teste de código.

 Instalação:

 Em ambos os sistemas operacionais o IRB já é
 instalado com o interpretador,
Ferramentas - GEM

Gerenciador de bibliotecas do Ruby.
Possui funcionamento semelhante ao apt, yum, yast, etc...
Possui mais de 3000 gems no repositório.

Instalação:

Como no caso do IRB, o gem já vem instalado com o interpretador.
RubyForge




Repositório de projetos.
Os principais projetos em Ruby são hospedados nele.
Grande fonte de documentação.
Sintaxe

●   Variáveis
●   Blocos de Códigos
●   Definição de Métodos
●   IF – ELSE
●   CASE
●   WHILE
●   FOR
●   UNTIL
●   Operadores Lógicos
●   ARRAYS
●   HASHES
●   REQUIRE
Sintaxe - Variáveis
→ Variáveis Globais
   As variáveis globais devem começar com “$”.
   Exemplo:$i = “global”
               def teste
                   $i = “teste”
               end

→ Variareis de Instancia
   As variáveis de instancia devem começar com “@”.
   Exemplo: class Pessoa
                   def set_nome(nome)
                       @nome = nome
                   end
                   def get_nome
                       return @nome
                   end
               end
→ Constantes
   Por padrão, constantes devem possuir todas as letras
maiúsculas.
   Exemplo: ARGV
Métodos/Funções
def nome_da_funcao(parametro1, parametro2, ...)
   <bloco de comandos>
end
Exemplo:
def alo(nome)
   puts “Oi #{nome}.”
end

Parâmetro Variável:
def alo(*args)
   args.each {|a| puts “Oi #{a}”}
end

O Comando return:

def soma(a,b)           def dict(a,b)
   a+b                     return a
end                        puts b
                        end
Sintaxe – Blocos
do
   <comandos>           Com Parâmetros:
end                     def metodo(n)
                           yield(n)
     Ou                 end

{                       Utilização:
     <comandos>
                        metodo(2) {|i| i + 3}
}


Implementação:
def metodo
   yield
end

Utilização:

metodo { <comandos> }
Sintaxe – IF

   if (booleano)
      comandos
   end


Exemplo

if (i == 5)   ou
   puts(i)         puts(i) if (i == 5)
end
Sintaxe – IF - ELSE

 if ( teste logico)
    comandos
 else
    comandos
 end
Exemplo

if ( i.nil?)
    puts(“Valor de i é nil”)
else
    puts(i)
end
Sintaxe – Operadores Lógicos




     Operadores      Função
  &&      and        E
  ||      or         OU
  !       not        NÃO
        ==           IGUAL
         !=          DIFERENTE
1º Exemplo : Fatorial


  def fatorial(n)
    if(n > 1)
       n * fatorial(n-1)
    else
       1
    end
  end
  puts fatorial(ARGV[0].to_i)
Sintaxe – Case

 case ( variavel)
 when valor
    comandos
 when valor2
    comandos
 else
    comandos
 end
Exemplo1                      Exemplo2

case (i)                      case (i)
when 1..6                     when 1..6
   puts(“esta entre 1 e 6”)      puts(“esta entre 1 e 6”)
when 8                        when “string”
   puts (“i igual a 8”)          puts (“i não e inteiro”)
else                          else
   puts (“nao sei”)              puts (“nao sei”)
end                           end
Sintaxe – WHILE

 while (teste logico)
   comandos
 end




Exemplo

while (i < 10)
   puts i
   i = i +1
end
Sintaxe – UNTIL

 begin
   comandos
 end until (teste logico)




Exemplo

i = 10
begin
    puts i
    i=i–1
end until ( i == 0)
Sintaxe – FOR

 for variavel in intervalo
    comandos
 end




Exemplo

for i in 0..10
   puts i
end
Sintaxe – ARRAYS

Construtor:
nome_array = []

Atribuindo Valores:

nome_array[0] = 5
nome_array[1] = “String”
nome_array[2] = Pessoa.new



Exemplo 1:                   Exemplo 2:

for i in 0..3                nome_array.each { |i| puts i}
     puts nome_array[i]
end
Sintaxe – HASHES

Construtor:
nome_hash = {}

Atribuindo Valores:

nome_hash= {1 => 2, “a” => “b” }
nome_hash[“palavra”] = “word”
nome_hash[“classe pessa”] = Pessoa.new



Exemplo:

Saída do exemplo acima no irb.

irb(main):014:0> nome_hash
=> {5=>10, "pessoa"=>#<Pessoa:0xb7c853f4>, "a"=>"b", 1=>5}
Módulos
module Nome_do_modulo
   comandos
end



Exemplo:
module Lobo
   def self.uivar
       “ahuuu”
   end
end


 Saída:

 irb(main):036:0> Lobo.uivar
 => "ahuuu"
Classes - Construção
class Nome_da_classe
    comandos
end
                                Exemplo 2:
                                class Pessoa
Exemplo 1:                          def initialize(nome)
class Pessoa                            @nome = nome
    def set_nome(nome)              end
       @nome = nome                 def set_nome(nome)
    end                                 @nome = nome
    def get_nome                    end
       @nome                        def get_nome
    end                                 @nome
end                                 end
                                end
Instanciando 1:                 Instanciando 2:
pessoa = Pessoa.new             pessoa = Pessoa.new(“Exemplo”)
Observação:
O nome das classes devem começar com uma letra maiúscula
Classes - Herança
class Nome_da_classe < Nome_da_classe_pai
    comandos                 Exemplo 2:
end                          class Estudante < Pessoa
                                 def initialize(nome,ra)
Exemplo 1:                           @nome = nome
class Estudante < Pessoa             @ra = ra
    def set_ra(ra)               end
       @ra = ra                  def set_ra(ra)
    end                              @ra = ra
    def get_ra                   end
       @ra                       def get_ra
    end                              @ra
end                              end
                             end
Instanciando 1:               Instanciando 2:
estudante = Estudante.new     estudante=Estudante.new(“Exemplo”, 001)

super
Classes – Método Singleton

Consiste em definir um metodo para uma instancia que a classe pai
não possui.

Exemplo:
class Mamifero
    def produz_leite
       puts “usa como alimento para seus filhotes”
    end
    def possui_pelos
       puts “possui pelos”
    end
end

morcego = Mamifero.new
def morcego.voa
   puts “um mamifero que voa”
end
Classes – Attribute Readers e Writers

 Gera, em tempo de execução, os métodos setters e getters dos
 atributos.

 Exemplo:

 class Pessoa
     attr_accessor :nome
 end




 → Para gerar somente os setters
    attr_writer :nome
 → Para gerar somente os getters
    attr_reader :nome
Classes – Mixin's

Alternativa a herança múltipla


class Nome_da_classe < Nome_da_classe_pai
    include nome_do_modulo
end




Exemplo:

class Lobisomen < Pessoa
    include Lobo
end
Sintaxe – REQUIRE

Importa arquivos de código.
Equivalente ao “uses” do Pascal.

Exemplo:

require “arquivo_de_classes.rb”
require “libmysql”
require “rexml/document”
2º Exemplo - Ordenar


arq_novo = File.open("lista_ordenada.txt", "w")
File.open("lista.txt").sort.each do |nome|
 arq_novo.puts nome
end
Link`s
 Meu blog:
 Http://diegorubin.github.com

 Repositório do Minicurso no GitHub
 http://github.com/diegorubin/Minicurso-Asser/


 Site Oficial, onde pode ser baixado o interpretador:
 http://www.ruby-lang.org/

 RubyForge:
 http://www.rubyforge.org/

 Site Oficial do Binding do Gtk para o Ruby:
 http://ruby-gnome2.sourceforge.jp

Introdução a Linguagem de Programação Ruby

  • 1.
    Linguagem de Programação- Ruby Diego Rubin - rubin.diego@gmail.com
  • 2.
    Ruby - Introdução ● Desenvolvida por Yukishiro Matsumoto; ● Lançada em 1995; ● Baseado nas linguagens Perl, SmallTalk e Python; ● Escrita em C; ● Famosa por causa do framework Rails; ● Multiplataforma; ● Versão 1.8
  • 3.
  • 4.
    Ruby - Características UmaLinguagem Interpretada ● Não há compilação do código; ● A analise sintática acontece em tempo de execução;
  • 5.
    Ruby - Características ● Interpretada; ● Tipagem dinâmica e forte;
  • 6.
    Ruby - Características Tipagem ● Não é necessário a declaração das variáveis; Exemplo em Pascal Exemplo em Ruby var i=5 i:integer begin i = “Inteiro” i:= 5; end. ● Tipagem forte; ● Objeto tem como limite a memória;
  • 7.
    Ruby - Características ● Interpretada; ● Tipagem dinâmica e forte; ● Obedece ao paradigma da orientação a objeto;
  • 8.
    Ruby - Características Orientaçãoa Objetos ● Considerada totalmente orientadas a objetos; ● Tipos primitivos são classes; ● Mixin's, uma alternativa a herança múltipla;
  • 9.
    Ruby - Características ● Interpretada; ● Tipagem dinâmica e forte; ● Obedece ao paradigma da orientação a objeto; ● Linguagem de propósito geral;
  • 10.
    Ruby - Características Linguagemde Propósito Geral ● Scripts ● Aplicativos Desktop ● Aplicativos Web ● Serviços Web
  • 11.
    Ruby - Características ● Interpretada; ● Tipagem dinâmica e forte; ● Obedece ao paradigma da orientação a objeto; ● Linguagem de propósito geral; ● E...
  • 12.
  • 13.
    Instalando o Interpretador NoLinux: Nas principais distros ele já vem instalado, se não vier e só usar o gerenciador de pacotes deles. Tarball $ tar -zxvf ruby-1.8.x.tar.gz $ cd ruby-1.8.x $ ./configure && make $ su # make install No Windows: Baixar o instalador no site oficial do ruby. Depois NNF.
  • 14.
    Ferramentas - IRB Especiede “prompt de comando”. Muito útil para teste de código. Instalação: Em ambos os sistemas operacionais o IRB já é instalado com o interpretador,
  • 15.
    Ferramentas - GEM Gerenciadorde bibliotecas do Ruby. Possui funcionamento semelhante ao apt, yum, yast, etc... Possui mais de 3000 gems no repositório. Instalação: Como no caso do IRB, o gem já vem instalado com o interpretador.
  • 16.
    RubyForge Repositório de projetos. Osprincipais projetos em Ruby são hospedados nele. Grande fonte de documentação.
  • 17.
    Sintaxe ● Variáveis ● Blocos de Códigos ● Definição de Métodos ● IF – ELSE ● CASE ● WHILE ● FOR ● UNTIL ● Operadores Lógicos ● ARRAYS ● HASHES ● REQUIRE
  • 18.
    Sintaxe - Variáveis →Variáveis Globais As variáveis globais devem começar com “$”. Exemplo:$i = “global” def teste $i = “teste” end → Variareis de Instancia As variáveis de instancia devem começar com “@”. Exemplo: class Pessoa def set_nome(nome) @nome = nome end def get_nome return @nome end end → Constantes Por padrão, constantes devem possuir todas as letras maiúsculas. Exemplo: ARGV
  • 19.
    Métodos/Funções def nome_da_funcao(parametro1, parametro2,...) <bloco de comandos> end Exemplo: def alo(nome) puts “Oi #{nome}.” end Parâmetro Variável: def alo(*args) args.each {|a| puts “Oi #{a}”} end O Comando return: def soma(a,b) def dict(a,b) a+b return a end puts b end
  • 20.
    Sintaxe – Blocos do <comandos> Com Parâmetros: end def metodo(n) yield(n) Ou end { Utilização: <comandos> metodo(2) {|i| i + 3} } Implementação: def metodo yield end Utilização: metodo { <comandos> }
  • 21.
    Sintaxe – IF if (booleano) comandos end Exemplo if (i == 5) ou puts(i) puts(i) if (i == 5) end
  • 22.
    Sintaxe – IF- ELSE if ( teste logico) comandos else comandos end Exemplo if ( i.nil?) puts(“Valor de i é nil”) else puts(i) end
  • 23.
    Sintaxe – OperadoresLógicos Operadores Função && and E || or OU ! not NÃO == IGUAL != DIFERENTE
  • 24.
    1º Exemplo :Fatorial def fatorial(n) if(n > 1) n * fatorial(n-1) else 1 end end puts fatorial(ARGV[0].to_i)
  • 25.
    Sintaxe – Case case ( variavel) when valor comandos when valor2 comandos else comandos end Exemplo1 Exemplo2 case (i) case (i) when 1..6 when 1..6 puts(“esta entre 1 e 6”) puts(“esta entre 1 e 6”) when 8 when “string” puts (“i igual a 8”) puts (“i não e inteiro”) else else puts (“nao sei”) puts (“nao sei”) end end
  • 26.
    Sintaxe – WHILE while (teste logico) comandos end Exemplo while (i < 10) puts i i = i +1 end
  • 27.
    Sintaxe – UNTIL begin comandos end until (teste logico) Exemplo i = 10 begin puts i i=i–1 end until ( i == 0)
  • 28.
    Sintaxe – FOR for variavel in intervalo comandos end Exemplo for i in 0..10 puts i end
  • 29.
    Sintaxe – ARRAYS Construtor: nome_array= [] Atribuindo Valores: nome_array[0] = 5 nome_array[1] = “String” nome_array[2] = Pessoa.new Exemplo 1: Exemplo 2: for i in 0..3 nome_array.each { |i| puts i} puts nome_array[i] end
  • 30.
    Sintaxe – HASHES Construtor: nome_hash= {} Atribuindo Valores: nome_hash= {1 => 2, “a” => “b” } nome_hash[“palavra”] = “word” nome_hash[“classe pessa”] = Pessoa.new Exemplo: Saída do exemplo acima no irb. irb(main):014:0> nome_hash => {5=>10, "pessoa"=>#<Pessoa:0xb7c853f4>, "a"=>"b", 1=>5}
  • 31.
    Módulos module Nome_do_modulo comandos end Exemplo: module Lobo def self.uivar “ahuuu” end end Saída: irb(main):036:0> Lobo.uivar => "ahuuu"
  • 32.
    Classes - Construção classNome_da_classe comandos end Exemplo 2: class Pessoa Exemplo 1: def initialize(nome) class Pessoa @nome = nome def set_nome(nome) end @nome = nome def set_nome(nome) end @nome = nome def get_nome end @nome def get_nome end @nome end end end Instanciando 1: Instanciando 2: pessoa = Pessoa.new pessoa = Pessoa.new(“Exemplo”) Observação: O nome das classes devem começar com uma letra maiúscula
  • 33.
    Classes - Herança classNome_da_classe < Nome_da_classe_pai comandos Exemplo 2: end class Estudante < Pessoa def initialize(nome,ra) Exemplo 1: @nome = nome class Estudante < Pessoa @ra = ra def set_ra(ra) end @ra = ra def set_ra(ra) end @ra = ra def get_ra end @ra def get_ra end @ra end end end Instanciando 1: Instanciando 2: estudante = Estudante.new estudante=Estudante.new(“Exemplo”, 001) super
  • 34.
    Classes – MétodoSingleton Consiste em definir um metodo para uma instancia que a classe pai não possui. Exemplo: class Mamifero def produz_leite puts “usa como alimento para seus filhotes” end def possui_pelos puts “possui pelos” end end morcego = Mamifero.new def morcego.voa puts “um mamifero que voa” end
  • 35.
    Classes – AttributeReaders e Writers Gera, em tempo de execução, os métodos setters e getters dos atributos. Exemplo: class Pessoa attr_accessor :nome end → Para gerar somente os setters attr_writer :nome → Para gerar somente os getters attr_reader :nome
  • 36.
    Classes – Mixin's Alternativaa herança múltipla class Nome_da_classe < Nome_da_classe_pai include nome_do_modulo end Exemplo: class Lobisomen < Pessoa include Lobo end
  • 37.
    Sintaxe – REQUIRE Importaarquivos de código. Equivalente ao “uses” do Pascal. Exemplo: require “arquivo_de_classes.rb” require “libmysql” require “rexml/document”
  • 38.
    2º Exemplo -Ordenar arq_novo = File.open("lista_ordenada.txt", "w") File.open("lista.txt").sort.each do |nome| arq_novo.puts nome end
  • 39.
    Link`s Meu blog: Http://diegorubin.github.com Repositório do Minicurso no GitHub http://github.com/diegorubin/Minicurso-Asser/ Site Oficial, onde pode ser baixado o interpretador: http://www.ruby-lang.org/ RubyForge: http://www.rubyforge.org/ Site Oficial do Binding do Gtk para o Ruby: http://ruby-gnome2.sourceforge.jp