Expressões e atribuição
A maioria dos comandos dá (retorna) um objeto como resultado, por isso
comandos são também chamados de expressões. Não é necessário usar o comando
return para retornar um valor. O objeto retornado pelo método será
o resultado da última expressão avaliada.
def teste
if true
"aie"
else
"erro"
end
end
puts teste # >> aie
O comando return pode ser usado para fazer o "retorno
imediato".
Comentários são iniciados pelo caractere '#' e se estendem até o
fim da linha. Há também a documentação inserida em código, que inicia com a
palavra =begin no inicio de uma linha, e termina com a palavra
=end no inicio de uma linha posterior. Tudo que estiver entre elas
será ignorado para fins de execução do programa. Além disso, texto entre estas
palavras é "oficialmente" usado para gerar a documentação do código. Atualmente,
o programa rdtool é usado para este fim, e utiliza uma formatação
específica.
O Rdoc é outro programa para gerar documentação em vários formatos, tentando ser mais amigável ao programador. É muito elogiado e está ganhando a preferência dos desenvolvedores, sendo, portanto, mais recomendável seu uso. Além disso, há planos para fazer com que a documentação oficial das classes padrão seja feita com o Rdoc.
O fim da linha marca o fim de uma expressão, a não ser em alguns casos em que
é óbvia (para o interpretador) a continuação da expressão, ou se o caractere
'\' estiver no fim da linha. Também pode ser "forçado" o fim de uma
expressão antes do fim da linha, com o uso de ';'. Assim é possível
especificar várias expressões/comandos em uma única linha.
a = 1; b = 2; puts a+b # >> 3
Em geral, qualquer lugar onde seja esperado um objeto pode ter, ao invés de diretamente o objeto, uma expressão que resulte no objeto adequado.
Atribuição múltipla
Atribuição múltipla é feita quando o lado esquerdo de uma atribuição tem uma
vírgula (',') após o primeiro elemento, seguida de 0 ou mais
elementos também separados por ',', e é feita de acordo com as
seguintes regras:
- se o último elemento à direita é um
Arrayprefixado por '*', ele será "expandido"; - se houver apenas um elemento à direita, ele é convertido em um
Arraye expandido; - os elementos extras à direita são descartados;
- aos elementos extras à esquerda, é atribuído o valor
nil; - assim como em argumentos de métodos, se o último elemento à esquerda for
prefixado por '
*', ele recebe umArraycontendo seu valor correspondente seguido dos extras à direita (que, obviamente, não são descartados); - se um elemento à esquerda for uma lista de elementos entre parênteses, é tratado como uma "sub-atribuição múltipla", relativa ao seu elemento correspondente à direita, que é feita seguindo estas mesmas regras;
A atribuição acontece efetivamente em paralelo (i.e. instantaneamente).
a = 1, 2, 3 # >> a=[1, 2, 3] a, = 1, 2, 3 # >> a=1 a, b, c = 1, 2 # >> a=1, b=2, c=nil a, b = b, a, 3 # >> a=2, b=1 a, *b = 1, 2, 3 # >> a=1, b=[2, 3]