Primeiramente quero homenagear Ruby pelos seus 20 anos. Essa linguagem vem acolhendo a cada dia mais profissionais querendo aprender essa poderosa linguagem, ganhando mérito pela sua forma simplificada de programar para WEB.
Variáveis
Todas as variáveis em Ruby são objetos, e vale lembrar que Ruby possui tipagem dinâmica e tipagem forte. Os nomes das variáveis são compostas de letras, números e sublinhados. A grande sacada disso é, por exemplo, usar caracteres especiais para defini-las.
- Atribuição simples:
variavel = 10 =>10
- Caracter especial:
ação = "funciona" =>funciona
- Atribuição paralela:
assim, também, funciona = "nota 10", 777, [:diga=>'oi'] =>["nota 10",777, [{:diga=>"oi"}]]
- Variavel global:
$global = ''global" =>"global"
- Variavel constante. Toda constante deve ser definida caracteres CAIXA ALTA:
CONCRETO = "ninguém meche aqui" =>"ninguém meche aqui"
- Variavel de instância (usada em Classes onde veremos em próximos artigos):
@instancia = 123 =>123
- Variavel da classe:
@@classe = nil =>nil
- Descobrindo uma variável. Como Ruby tem tipagem dinâmica, é possível visualizar qual a tipagem que ele definiu a aquela determinada variável, para isso usamos a função class:
var = 'teste' =>teste var.class =>String
- Exibindo erro, (Ruby tem sua tipagem forte, isso é, resulta em um erro caso algo for forçado)
a = 1 =>1 b = 'teste' =>'teste' a+b =>TypeError: String can't be coerced into Fixnum
Ranges tem como objetivo trabalhar com valores em intervalos, declarando um valor inicial e um valor final, assim percorrendo de forma sequencial.
- Exemplo básico:
range = 1..10 =>1..10 range.each {|x| puts x } => 1,2,3,4,5,6,7,8,9,10
- Todos menos o ultimo, (note que usei um ponto a mais, assim limita o ultimo elemento a ser anulado):
range = 1...10 =>1..10 range.each {|x| puts x } => 1,2,3,4,5,6,7,8,9
- Evoluindo com palavras:
nomes = ('a'..'z') =>'a'..'z' nomes.each {|n| puts n } => a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
- Verificando existencia de algo, (note que usei a função include para verificar a existencia de um elemento incluso no range):
var = 1..10 =>1..10 if var.include?(6) p 'tem' else p 'nao tem' end => "tem"
De forma parecida com Array, seu diferencial é um indice de Array mais completo com chaves e valores.
- Atribuição de Hash comum, (estou usando Symbol, String, Fixnum para determinar uma chave):
hash = {:cao=>'late',:leao=>'ruge','papagaio'=>'fala',1=>'um'} =>{:cao=>'late',:leao=>'ruge','papagaio'=>'fala',1=>'um'}
- Retornando Hash determinado:
hash = {:gato=>'mia',:cao=>'late',:leao=>'ruge'} =>{:gato=>'mia',:cao=>'late',:leao=>'ruge'} puts hash[:leao] =>'ruge'
- Retornando Chaves, (aconselho usar somente Symbol para determinar as chaves, por questão de desempenho):
hash = {:gato=>'mia',:cao=>'late',:leao=>'ruge'} =>{:gato=>'mia',:cao=>'late',:leao=>'ruge'} puts hash.keys =>[:gato, :cao, :leao]
- Retornando Valores:
hash = {:gato=>'mia',:cao=>'late',:leao=>'ruge'} =>{:gato=>'mia',:cao=>'late',:leao=>'ruge'} puts hash.values =>["mia", "late", "ruge"]
- Atribuindo novo elemento:
hash = {:gato=>'mia',:cao=>'late',:leao=>'ruge'} =>{:gato=>'mia',:cao=>'late',:leao=>'ruge'} hash[:bode] = 'berra' =>"berra"
- Retornando tamanho:
hash = {:gato=>'mia',:cao=>'late',:leao=>'ruge'} =>{:gato=>'mia',:cao=>'late',:leao=>'ruge'} puts hash.size =>3