Tipagem
Por não ser necessária a declaração do tipo, muitos pensam que a linguagem Ruby é fracamente tipada
e com isso o tipo não importaria para o interpretador.
No Ruby os tipos são importantes sim para a linguagem, tornando-a fortemente tipada, além disso,
o Ruby também é implicitamente e dinamicamente tipada, implicitamente tipada pois os tipos são inferidos pelo interpretador,
não precisam ser declarados e dinamicamente tipada porque o Ruby permite que o tipo da variável possa ser alterado
durante a execução do programa
Strings Mutáveis
A principal característica das Strings em Ruby é que são mutáveis, diferente do Java
O operador << é utilizado para a operação append de Strings, ou seja, para a concatenação de Strings em uma mesma instância.
Já o operador + também concatena Strings mas não na mesma instância, isso quer dizer que o + gera novas Strings.
Símbolos
Símbolos também são texto, como as Strings. Só que devem ser precedidos do carácter ':', ao invés de aspas e pertencem à classe Symbol
Símbolos são análogos às Strings do Java. As Strings do Ruby estão mais para o StringBuilder do Java. Por serem imutáveis e compartilhados, objetos Symbol geralmente são usados como identificadores e para nomenclatura (labels).
Em Ruby tudo é objeto
Os únicos objetos de valor booleano false são o próprio false e o nil.
Portanto, qualquer valor pode ser usado como argumento do if
O operador ||= atribui um valor apenas a variável esteja vazia. é muito utilizado para carregar valores de maneira "lazy". nome ||= "anonimo" Nesse caso, se nome é nulo, ele será preenchido com "anonimo".
to_s() é um método comum "transforma" um objeto em uma String, geralmente usado para log.
métodos (class, object_id) todo objeto possui.
objeto = Object.new()
def é uma palavra chave do Ruby para a definição (criação) de métodos
Mas, e o retorno de um método? Como funciona? Para diminuir o excesso de código que as linguagens costumam introduzir (chamado de ruído sintático), o Ruby optou por retornar o resultado da execução da última instrução executada no método
Seguindo a ideia de envio de mensagens, uma maneira alternativa de chamar um método é usar o método send(), que todo objeto em Ruby possui. pessoa.send(:fala)
Qualquer classe em Ruby pode ser reaberta e qualquer método redefinido. Inclusive classes e métodos da biblioteca padrão, como Object e Fixnum.
imos que todo método é sempre chamado em um objeto. Quando não especificamos o objeto em que o método está sendo chamado, Ruby sempre assume que seja em self.
self é similar ao this de outras linguagens.
Como tudo em Ruby é um objeto, todas as operações devem ser métodos.
Repare que a variável nome é uma variável de instância de Restaurante. Em ruby, o "@" definiu esse comportamento.
class Restaurante
def initialize(nome)
puts "criando um novo restaurante: #{nome}"
@nome = nome
end
# altere o método qualifica
def qualifica(msg="Obrigado")
puts "A nota do #{@nome} foi #{@nota}. #{msg}"
end
# propriedades
def nota=(nota)
@nota = nota
end
def nota
@nota
end
endSeria muito trabalhoso definir todas as propriedades de acesso a nossa variáveis. Refatore a classe Restaurante para utilizar o attr_accessor :nota Seu arquivo final deve ficar assim:
class Restaurante
attr_accessor :nota
def initialize(nome)
puts "criando um novo restaurante: #{nome}"
@nome = nome
end
def qualifica(msg="Obrigado")
puts "A nota do #{@nome} foi #{@nota}. #{msg}"
end
end
restaurante_um = Restaurante.new("Fasano")
restaurante_dois = Restaurante.new("Fogo de Chao")
restaurante_um.nota = 10
restaurante_dois.nota = 1
restaurante_um.qualifica
restaurante_dois.qualifica("Comida ruim.")Arrays em Ruby são instâncias da classe Array, não sendo simplesmente uma estrutura de dados, mas possuindo diversos métodos auxiliares que nos ajudam no dia-a-dia.
O Ruby possui arrays, que são listas que podem guardar qualquer tipo de objeto e não precisam ser criadas com tamanho determinado; novos ítens podem ser adicionados a qualquer momento
Arrays só podem ter índices numéricos. Os índices começam em 0 e também podem ser acessados de forma negativa
Um outro tipo de estrutura de dados do Ruby é o Hash. Hashes são como arrays, com a diferença que o índice de um hash pode ser qualquer objeto.
O Ruby define o tipo nulo através do objeto nil, que é uma instância da classe NilClass.
Para definir uma classe use a palavrachave class. Classes são constantes e, por este motivo, devem começar com uma letra maiúscula.
Esta criação de getters e setters em classes é tão comum que o próprio Ruby fornece uma maneira de automatizar esta definição. Basta usar os métodos Module#attr_reader e Module#attr_writer.
Para os casos onde você sempre define tanto o getter quanto o setter, é possível usar o método Module#attr_accessor, que fará isso de uma vez só!
Um exemplo que demonstra uma aparição de arrays é a chamada ao método methods, que retorna uma array com os nomes de todos os métodos que o objeto sabe responder naquele instante. Esse método é definido na classe Object então todos os objetos o possuem: cliente = "Petrobras"
puts cliente.methods
Ruby não possui tipagem explícita