Resumo para iniciantes em Ruby

*`“Amanda”.reverse # “adnamA”

LAÇOS

1) IF

if algo?
    
    puts "foi!"

else

    puts "não foi"

end

OU

if algo?

    puts "vai"

elsif outro_algo?
      
    puts " vai agora.."

end

2) FOR

for valor in 1..3

    puts valor  # codigo a ser executado

end

3) CASE

case ano

when 2016

    puts "ano atual"

when 2015

    puts "ano passado"

when 2014

    puts "ano retrasado"

else 

    puts " num deu.."

end

4) WHILE

while existir_amor
    
    toca_o_som  deejay  #função recebendo parâmetro

end

5) LOOP DO

loop do
    
    toca_o_som  deejay

    break if nao_eh_amor?

end

def nao_eh_amor?

    puts "good vibes? (S/N)"

    ta_bom = gets.strip
    
    nao_ta_bom = ta_bom.upcase == "N"

end

ARRAYS

Adicionando itens

valores = []  ou valores = Array.new 

valores[0] = 4  
      #valores = [4]

valores.at (0) 
        # retorna item da posição 0 => 4

valores.empty?  
        #informa se o array está vazio (false nesse caso)

valores.include? 4  
         #true

valores.push 5  
         # valores = [4, 5] add o item 5 no final do array

qtd = valores.size  
        #informa quantidade de itens/  qtd=2

valores<< 6   
        #valores = [4, 5, 6]  add o item 6 no final do array

valores.unshift 2  
        #valores = [2, 4, 5, 6]  add o item 2 no inicio

valores.insert 1,3  
        #add na posicao de index 1 o item 3/ valores = [2, 3, 4, 5, 6]

Removendo itens

valores = [1, 2, 3, 4, 5, 6]

ultimo_elemnt = valores.pop   
        #deleta sempre o último elemento
        #ultimo_elemnt = 6 e  valores = [1,2,3,4,5]

primeiro_elemnt  = valores.shift 
        #deleta sempre o primeiro elemento
        #primeiro_elemnt = 1 e valores =  [ 2, 3, 4, 5]

elemnt_delet = valores.delete 5 
        #deleta o elemento especificado
        #elemnt_delet =5  e valores =  [ 2, 3, 4]

elemnt_del_no_index  = valores.delete_at (2)  
        #deleta sempre em um determinado index
       #elemnt_del_no_index = 4 e valores = [2, 3]

Selecionando itens do array - Não destrutiva

valores = ["Nara", "Linus", "Coisa"]
 
var = valores.select { |item| item  == "Nara" } 
        #var =  ["Nara"]  e valores = ["Nara", "Linus", "Coisa"] 
        # retorna os itens que batem com a validação

var = valores.reject { |item| item  == "Coisa" }
#var = ["Nara", "Linus"] e valores = ["Nara", "Linus", "Coisa"] 
#retorna todos os itens que  não batem com a validação
   
valores = [1, 2, 3, 4]

var = valores.drop_while {|item| item <=3}
#var = [4]  e valores = [1, 2, 3, 4]

Selecionando itens do array - Destrutiva

valores = ["Coisa1",  "Coisa2", "Coisa3"]
 
var = valores.delete_if { |item| item  == "Coisa1" } 
        #var =  ["Coisa2", "Coisa3"]  e valores = ["Coisa2, Coisa3"] 
        # retorna o array sem os itens que batem com a validação
        #causa alterações no array matriz

valores = ["Coisa1",  "Coisa2", "Coisa3"]

var = valores.keep_if{ |item| item  == "Coisa3" }
        #var =  [ "Coisa3"]  e valores = ["Coisa3"] 
        # retorna o array apenas com itens que batem com a validação
        #causa alterações no array matriz

UTILIZANDO FILA NO ARRAY

   numeros = [ ]
  
   numeros.push 1  #numeros = [ 1 ]

   numeros.push 2  #numeros = [ 1,  2 ]
  
   numeros.push 3  #numeros = [ 1, 2, 3 ]
  
   numeros.shift   #numeros = [ 2, 3]

   numeros.shift   #numeros = [ 3 ]

UTILIZANDO PILHA NO ARRAY

   numeros = [ ]
  
   numeros.push 1  #numeros = [ 1 ]

   numeros.push 2  #numeros = [ 1,  2 ]
  
   numeros.push 3  #numeros = [ 1, 2, 3 ]
  
   numeros.pop  #numeros = [ 1, 2 ]

   numeros.pop   #numeros = [ 1 ]

INTERPOLAÇÃO DE STRINGS

valor = "Linus"

puts " O filho mais amado do mundo eh #{valor}"

ARRAY ASSOCIATIVO

parentes = { 1 => [ "Nara", "pequena" ], 2 => ["Marido", "grande"], 3 => [ "Linus", "miúdo"] }

puts parentes [ 1 ] # imprime o texto "Nara" e "pequena"

puts parentes [ 1 ] [ 0 ]   #imprime o texto "Nara"

puts parentes [ 1 ] [ 1 ]   #imprime o texto "pequena""

INTERATOR

amores = ["Nara", "Marido", "Linus", "Amanda"]

Vamos imprimir todos os itens dessa lista, um por linha:

amores.each  do |nome|
     
    puts "(#{nome})"
   
end

Imprimiu:

	(Nara)
	(Marido)
	(Linus)
	(Amanda)

Porém ficaria muito mais bonitinho se fosse impresso contendo o index do nome no array, assim:

    amores.each_with_index do |item, index| 

	puts "(#{index},  #{nome})"

end

Imprimindo portanto:

    (0, Nara)
    (1, Marido)
    (2, Linus)
    (3, Amanda)

FUNÇÕES

def uma_funcao

    valor =15

    verifica_algo algo  #função com seu parâmetro

    valor # a última linha é um return

end

IMPORTANDO ARQUIVOS

require_relative 'ui'   #importando de arquivos relativos

require       # importando do ruby

LENDO DE ARQUIVOS

Dado um arquivo (hello_adele.txt) contendo o texto:

Hello

Can you hear me?

o_arquivo_de_adele  =  File.new("hello_adele.txt", "r")

pegando_linha_incrementalmente =  o_arquivo_de_adele.gets   

            #pegando_linha_incrementalmente = "Hello\n" 

pegando_linha_incrementalmente =  o_arquivo_de_adele.gets   

            #pegando_linha_incrementalmente = "Can you hear me?"

arquivo.close

OU

texto_adele = File.read("hello_adele.txt")

puts texto_adele # vai imprimir "Hello\nCan you hear me?"

E como eu gosto muito dessa música quero quebrar o texto em uma array de Strings cujo separador seja a quebra de linhas.

frases_belas = texto.split "\n"
  
puts frases_belas         #Vai imprimir  ["Hello", "Can you hear me?"]

Mas faltou colocar na música aquela parte que dá pra cantar a plenos pulmões:

testando_pulmoes = "\nSo hello from the other side\n
                 I must've called a thousand times\n
                 To tell you I'm sorry\n
                 For everything that I've done\n
                 But when I call you never\n
                 Seem to be home\n"

File.open('hello_adele.txt', 'a') { |o_arquivo_de_adele| o_arquivo_de_adele.write(testando_pulmoes) }

Texto completo:

	Hello
	Can you hear me?
	I'm in California dreaming about who we used to be

	So hello from the other side
	I must've called a thousand times
	To tell you I'm sorry
	For everything that I've done
	But when I call you never
	Seem to be home

CLASSE

Vamos definir a classe Pessoa que possue 3 atributos:

 class Pessoa

    def initialize(nome)
        @nome = nome
        set_posicao "em casa"
    end
    def set_posicao new_posicao
        if new_posicao.downcase == "em casa"
            @posicao = "em casa"
            @humor = "muito feliz"
        else
            @posicao = new_posicao
            @humor = "bla."
        end
    end
    def to_s
        "#{@nome} está #{@posicao} e #{@humor}."
    end
  end

meu_marido = Pessoa.new("James")
puts meu_marido.to_s   #James está em casa e muito feliz.