quarta-feira, 9 de janeiro de 2013

Exercitando com Ruby Parte 4 (Tipos de dados, Conversão de tipos, Tratamento de exceções)

Tipos de dados
Todas as variáveis são objetos (abstratos), todos tipos são classes. (nesse exemplo irei trabalhar com o IRB):
  • Object: é a classe principal
    • Numeric: classe de números;
      • Integer: classe de números inteiros;
        • Fixnum: números inteiros de precisão fixa, contém  31 bits de comprimento;
        1. Exemplo básico:
          1+1
          =>2
        2. Descobrindo o tipo de dado usando class
          (2*6).class
          =>Fixnum
          
        • Bignum: números inteiros de precisão infinita;
        1. Exemplo básico:
          (1234567890).class
          =>Bignum
      • Float: classe de números reais;
      1. Exemplo básico:
        6.66
        =>6.66
      2. Convertendo uma string em Float
        "7.123".to_f
        =>7.123
    • String: um conjunto de caracteres. Onde pode ser delimitado por apóstrofes ( ' ) ou aspas ( " );
    1. Exemplo básico:
      "String normal"
      =>"String normal"
    2. Bloco de texto:
      texto = <<TEXTO
       aqui escrevo
       o texto que eu
       quiser
      TEXTO
      =>"aqui escrevo \no texto que eu\n quiser"
    3. Substrings usando ranges:
      texto = "Dieterich"
      =>"Dieterich"
      texto[0..2]
      =>"Die"
      
    • Symbol: Symbol é o objeto mais básico que pode ser criado, seria o nome de variáveis de instância, nomes de métodos, nomes de classes. Semelhante a uma String, é usado como um nome consistente no código, então o objetivo do Symbol, é ter uma performance maior em relação a String, onde  símbolos compartilham o mesmo objeto, mas como Símbolos não liberam o espaço em memória diferentemente das Strings, futuramente pode ocorrer um esgotamento de memória. Cada vez que referenciar um mesmo Symbol, é usado o mesmo espaço alocado na memória. Ele é definido como dois pontos ( : );
    1. Exemplo:
      nome = :darlan
      =>:darlan
      nome.class
      =>Symbol
      
    • Array: pode ser vetor ou matriz. É delimitado por colchetes ( [ ] );
    1. Exemplo:
      vetor = [1,"dois"]
      =>[1,"dois"]
    2. Inserindo mais elementos: 
      vetor.push "mais um"
      =>[1,"vetor","mais um"]
      
    • Hash: vetor associativo (estrutura de dados), é usado para valores com índices, também conhecido como mapa, dicionário. É delimitado por ( { } );
    1. Exemplo:
      
      vetor = {"um"=>"elemento 1",:dois=>"elemento dois"}
      =>{"um"=>"elemento 1",:dois=>"elemento dois"}
      vetor['um']
      =>"elemento 1"
      
      
    • Regexp: expressões regulares, usadas para processamento de textos, e casamento de informações. É delimitado por ( // );
    1. Exemplo:
      er = /^[0-9]/
      =>/^[0-9]/
      puts "casou" if er =~ '321'
      =>casou
      
Conversão de tipos
Conversão de tipos, é uma técnica na qual você 'força' a conversão de algum tipo de dado, transformando por exemplo, um inteiro em uma string.

Método
De
Para
Exemplo
to_i
String
Inteiro
"777".to_i => 777
to_f
String
Flutuante
"777".to_f => 777.0
to_s
Inteiro
String
1.to_s => "1"
to_a
Range
Array
(1..4).to_a => [1,2,3,4]
to_sym
String
Simbolo
"nome".to_sym => :nome
join
Array
String
["vetor",1,"dois"].join(",") => "vetor",1,"dois"









Tratamento de exceções

Erros ocorrem as vezes de forma inesperada. Para retornar um erro mais 'limpo' ao usuário final, de forma simplificada, para que entenda o que esta ocorrendo, assim evitando disparar informações sigilosas na tela, e também entender o que esta acontecendo, então precisamos tratar esse código usando tratamentos de exceções.

  1. Especificando o tipo de exceção. Note que usei um operador matemático (*) para forçar o erro, o rescue é responsável por retornar o erro. 
    begin
     string1 = "eu nao sou"
     string2 = "cauteloso"
     
     string1*string2
    
    rescue StandardError => excecao
     puts "Houve um erro: #{excecao}"
    end
    =>Houve um erro: can't convert String into Integer
autor: Darlan Dieterich