Ruby – Números e Math Basico

Na maioria das linguagens os números são um tipo primitivo usados por outros objectos, em Ruby tudo ou quase tudo é um objecto até mesmo os números. Vejamos alguns exemplos quem em outras linguagens são considerados primitivos mas quem em Ruby são objectos, vejamos a que classes pertencem.

5.class
5.0.class
5_000_000_000.class

O primeiro exemplo retorna a classe Fixnum, o segundo Float e o terceiro Bignum.
Como se pode ver Ruby transforma quase tudo em um objecto, os underscore no ultimo exemplo são facultativos podem ser ou não usados no momento da execução o interpretador simplesmente ignora-os.

Ruby tem por isso algumas classes e modules dedicados a números, vamos ver os mais importantes.

Numeric – A classe base para todos os numeros.

Integer – A classe base para números inteiros e a base da classe Fixnum.

Float – A classe para números reais e de ponto flutuante.

Fixnum – A classe principal para números inteiros.

Bignum – A classe para números inteiros com tamanho superior ao suportado pela classe Fixnum.

Math – Modulo com contém as principais funções matemáticas.

Precision – Modulo para aproximas a precisão de números reais.

Rational – Uma classe que representa os números fraccionários.

Complex – Classe que representa os números complexos.

Matrix – Classe para criar matrizes matemáticas.
Converter Números

Ruby permite a conversão de números de outros formato para inteiro de forma simples com o método Integer.

Integer(1.4)

Integer("256")

Integer("0b11110010")

Integer(0177)

Integer(0x20)

Integer(?z)

Por ordem o que acontece é o seguinte o primeiro exemplo converte um numero float para inteiro, o segundo converte uma String para inteiro, o terceiro converte um numero binario contido em uma String para inteiro, o quarto exemplo converte um numero octal para inteiro, o quinto converte um hexadecimal para inteiro e o ultimo converte um carácter para inteiro que corresponde ao código do carácter.

Ruby permite ainda converter números para float para evitar casos em que a conversão para inteiro origina a perda de precisão.

Float(167)

Float("77")

Float(?a)

Novamente por ordem o primeiro exemplo converte o inteiro para float, o segundo converte a String para float e o ultimo exemplo converte o carácter para float.
Operações Matemáticas

Operações matemáticas são extremamente simples, vamos ver alguns exemplos básicos.

Soma
7 + 5

=> 12
Subtracção
20 - 8

=> 12
Multiplicação
6 * 2

=> 12
Dividir
144 / 12

=> 12
Exponente
2 ** 4

=> 16
Modulo
12 % 5

=> 2

Ruby permite ainda à semelhança da maioria das linguagens a utilização de operadores unitários de positivo e negativo (+) e (-).

7 + -5
=> 2

-20 + -32
=> -52

20 * -2
=> -40

E como tudo é um objecto podes ainda utilizar métodos para fazer algumas operações como div, modulo, divmod, quo e remainder.

Divisão
24.div 2
=> 12

(25.0).div(2.0)
=> 12

Modulo
12.modulo 5
=> 2

12.modulo(5.0)
=> 2.0

Retorna um array com o quociente e o resto da divisão.
12.divmod 5
=> [2, 2]

12.0.divmod 5.0
=> [2, 2.0]

Retorna o valor total da divisão.
12.quo 5
=> 2.4

Retorna o resto da divisão
12.remainder 5
=> 2

Divisão

A divisão de números contém um pequeno problem, quantdo o resultado da divisão contem uma parte fraccionaria, essa parte é descartada, vejamos alguns exemplos e como os resolver.

24 / 2
=> 12
Não há problema.

25 / 2
=> 12
Problema com o resultado.

25.0 / 2
=> 12.5
Resolve-se usado um ou mais dos números como float.

Igual, Maior que, Menor que

Podemos também fazer comparação de números, para isso dispomos os operadores de igualdade (==), (eql?) ou (<=>).

12 == 24/2
=> true
Verifica se dois números tem o mesmo valor.

24.eql?(12*2)
=> true
Tal como o exemplo anterior compara os dois valores.

12 != 14
=> true
Verifica se dois números tem valor diferente.

12 <=> 12
=> 0
Verifica se dois números tem o mesmo valor e retorna 0 no caso afirmativo.

12 <=> 10
=> 1
Verifica se dois números tem o mesmo valor e retorna 1 caso o primeiro valor seja maior que o segundo.

12 <=> 14
=> -1
Verifica se dois números tem o mesmo valor e retorna -1 caso o primeiro valor seja menor que o segundo.

Para além dos operadores de igualdade estão também disponíveis operadores de comparação
mais flexíveis e simples que o (<=>) visto anteriormente, estes operadores são (<),(>),(<=) e (>=).

12 < 14
=> true
Verifica se o primeiro número é menor que o segundo.

12 < 12
=> false

12 <= 12
=> true
Verifica se o primeiro número é menor ou igual ao segundo.
12.0 > 11.9
=> true
Verifica se o primeiro número é maior que o segundo.

12.0 >= 12
=> true
Verifica se o primeiro número é maior ou igual ao segundo.

Abreviatura de operações

É ainda possível abreviar operaçõe, ou seja reduzir o tamanho de uma expressão. Por exemplo

x = x +1

Esta expressão pode ser reduzida a um simples

x += 1

Ambas as operações fazem exactamente o mesmo, estas simplificações podem ser feitas para todas as operações anteriormente, (+),(-),(*),(/),(**) e (%).
Ao contrario de linguagens Java e C que permitem expressões tipo i++ ou i– em Ruby temos de utilizar expressões tipo x += 1 e x -= 1.
Por Fábio Correia (White Magician)

Anúncios

2 thoughts on “Ruby – Números e Math Basico

  1. Pingback: Ruby - Dicas de Funções « Java & Ruby

  2. Hum… naum tem nada a ver do que eu estou procurando…
    entaum naum gostei me desculpe…
    Mas para quem esta procurando isso é uma maravilha!!!
    Bjaum;*

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s