Números em Ruby

Vamos brincar com núemros. Em Ruby, núemros sem ponto decimal são chamados inteiros (integers), e números com ponto decimal são geralmente chamdos de números de ponto flutuante, ou, simplesmente, floats (você deve colocar pelo menso um dígito depois do ponto decimal). Uma literal inteira é simplesmente uma sequência de dígitos, como 0, 123, 123456789. Caracteres de underscore (_) podem ser inseridos dentro de literais inteiras (desde que não estejam no início ou no final), como em 1_000_000. Aqui está o programa p002rubynumbers.rb:

# p002rubynumbers.rb
=begin
Números em Ruby
operadores usuais:
+ adição
- subtração
* multiplicação
/ divisão
=end
puts 1 + 2
puts 2 * 3
# Divisão de inteiros
# Quandoe você faz operações com inteiros, irá ter resultados inteiros
puts 3 / 2
puts 10 - 11
puts 1.5 / 2.6

Inteiros em Ruby são objetos da classe Fixnum ou Bignum. As classes Fixnum e Bignum representam inteiros de tamanhos diferentes. Ambas as classes descendem de Integer (portanto, de Numeric). Os números de ponto flutuante são objetos da classe Float, que corresponde ao tipo de dados double da arquitetura nativa. As classes Complex, BigDecimal e Rational não são incorporadas ao Ruby, mas são distribuídas com ruby como parte da biblioteca padrão. Falaremos sobre classes mais detalhadamente em breve.

Operadores e precedências

Vamos dar uma olhada nos principais operadores de Ruby. Eles estão dispostos em ordem decrescente de precedência:

:: Escopo
[] Índices
** Potência
! ~ + – Negação, complemento, mais e menos unários
* / % Multiplicação, divisão e módulo
+ – Adição e subtração
<< >> Shifts lógicos
& e (and) bit-a-bit
| ^ ou (or) ou exclusivo (xor) bit-a-bit
> >= < <= comparação
== === <=> != =~ !~ operadores de igualdade e comparação de padrões
&& e (and) booleano
|| ou (or) booleano
.. … operadores de intervalo
= += -= *= /= %= |= &= >>= <<= &&= ||= **= atribuições
?: operador ternário
not negação booleana
and or e, ou booleanos

a. os operadores de incremento e decremento (++ e –) não estão disponíveis em Ruby, nem na forma “pré”, nem na forma “pós”
b. os parênteses funcionam de forma semelhante à aritmética regular. Qualquer coisa entre parênteses ganha maior precedência.

O operador módulo (%) em Ruby tem o seguinte comportamento:

puts (5 % 3) #escreve 2
puts (-5 % 3) #escreve 1
puts (5 % -3) #escreve -1
puts (-5 % -3) #escreve -2

A definição de módulo em Ruby é diferente da definição em C e Java. Em Ruby, -7%3 é 2. Em C e Java, é -1. Em Ruby, o sinal do resultado (da operação %) é sempre o mesmo sinal que o do segundo operando.

Diferença entre os operadores or e ||

Tanto or quanto || retornam o primeiro argumento, a não ser que este seja falso, caso em que eles avaliam e retornam o segundo argumento. O exemplo a seguir mostra isso:

puts nil || 2008 #saída: 2008
puts false || 2008 #saída: 2008
puts "ruby || 2008 #saída: ruby

A única diferença entre or e || é sua precedência. || tem uma precedência mais alta que or.
Um idioma comum é usar || para atribuir valor a uma variável apenas se ela ainda não foi atribuída. Isso pode ser escrito como:

@varivael = @variavel || "valor padrao"

Ou, de forma mais idiomática:

@varivael ||= "valor padrao"

Uma razão para essas versões alternativas de operadores booleanos é o fato de que elas têm menor precedência que o operador de atribuição. Isso significa que você pode escrever uma expressão booleana como a seguinte, que atribui valores a variáveis até que encontre um valor falso:

if a = f(x) and b = f(y) and c = f(z) then d = g(a,b,c) end

Essa expressão não funcionaria se fosse escrita com && em vez de and.

Características | TOC | Strings divertidas

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s