Fuentes Vinícius Baggio - Ruby on Rails: coloque sua aplicação web nos trilhos стр 5.

Шрифт
Фон

locado adiante de cada trecho de código, usando um comentário da se-

guinte maneira:

# => Saída

2.3

Tipos e estrutura de dados

A primeira característica que vemos nessas linhas em Ruby é que a linguagem é de

tipagem dinâmica, ou seja, não precisamos declarar nenhum tipo para criar uma

variável. Dessa forma, é possível fazer o seguinte:

a = "string"

# => "string"

a = 100

# => 100

11

2.3. Tipos e estrutura de dados

Casa do Código

Strings

Strings, tal como outras linguagens de script, são fáceis de serem criadas, com

uma notação literal usando aspas duplas ou simples. Porém, como tudo em Ruby é

um objeto, é possível chamar métodos diretamente à notação literal:

"this is sparta".upcase

# => "THIS IS SPARTA"

É também possível compor strings maiores fazendo algumas operações:

"hello" + " " + "world"

# => "hello world"

O interessante também é que Strings reagem à multiplicação. A multiplicação

espera um inteiro como segundo parâmetro:

"." * 10

# => ".........."

É possível também acumular strings usando <<:

greetings = "Hello"

greetings << " "

greetings << "World"

puts greetings # Hello World

Interpolação de strings

Outro fato importante de strings é a interpolação, ou a combinação de código

para a composição de strings. É importante ressaltar que este tipo de interpolação

de strings só funciona com aspas duplas:

name = "Pedro"

"Tudo certo, #{name}?" # Tudo certo, Pedro?

'Tudo certo, #{name}?' # "Tudo certo, \#{name}?"

A interpolação vai ser avaliada apenas uma vez antes de qualquer outra operação

com a string resultante:

12

Casa do Código

Capítulo 2. Conhecendo Ruby

i = 0

"#{i = i + 1} " * 3 # "1 1 1 " e não "1 2 3 "

Há outra maneira mais complexa de fazer interpolação de Strings. Leitores que

conhecem C e Java vão se lembrar da função sprintf ao fazer interpolação com o

operador %. Neste caso, é possível usar aspas simples:

'Custo total: $%.2f' % 100 # Custo total: $100.00

Para a relação completa de como a formatação deste operador funciona,

veja a documentação online:

http://www.ruby-doc.org/core-1.9.3/Kernel.html#

method-i-sprintf .

Acessando caracteres e substrings

Strings, no final das contas, são cadeias de caracteres, como se fossem Arrays.

Portanto, é possível acessar caracteres via método [] com o índice:

a = "hello world"

a[0] # 'h'

a[6] # 'w'

a[-1] # "d" - Valores negativos contam do fim ao começo

a[-2] # "l"

Este acessor leva em conta o encoding atual, portanto, em encodings multibyte,

ou seja, encodings que podem usar mais de um byte para representar um caractere,

o acessor irá retornar o caractere em si e não o byte naquela posição:

# encoding: utf-8

a = "Olá, tudo bom com você?"

puts a[2]

# á

puts a.bytesize

# 25

puts a.length

# 23

Para acessar substrings, usamos um outro tipo de variável, o Range, ou 2 índices

indicando o começo e o fim:

a = "Hello world"

a[6, 10] # => "world"

a[6..10] # => "world"

a[-5..-1] # => "world"

a[-1..-5] # => "" - quando não é possível, o método retorna string vazia.

13

2.3. Tipos e estrutura de dados

Casa do Código

Inteiros e Floats

Inteiros e floats possuem representações literais como em qualquer linguagem:

a = 100

a = 100000000

# Fica difícil ler com muitos zeros

a = 100_000_000 # Pode usar _ para separar e possui o mesmo efeito

a = 100.0

100.0.to_i

# 100 - Conversão de float para inteiro

100.to_f

# 100.0 - Conversão de inteiro para float

Quando se faz operações entre os dois tipos, especialmente divisões, acontece a

coerção de tipos, ou seja, um inteiro é automaticamente convertido para float quando

há um float envolvido na conta.

Quando dividimos um inteiro com outro, o resultado será um inteiro truncado,

removendo-se a parte quebrada, ou seja, remove-se os decimais, e converte-se a um

inteiro. Por exemplo:

100 / 3 # => 33

Para obter um valor real/float, é necessário convertê-lo antes para float:

100.to_f / 3 # => 33.3333333...336

Cuidado com floats!

A representação de números reais usada é o IEEE-754, a forma padrão

de representar números reais em binários, usada não só por Ruby, mas

também por C, Java e JavaScript. Porém, este padrão possui um problema

perigoso de arredondamento:

0.0004 - 0.0003 == 0.0001 #=> false

Este é um problema sério, pois muitas pessoas não conhecem ou não

sabem deste problema e usam floats para valores financeiros, o que é er-

rado. Para isso, usa-se a classe BigDecimal, do conjunto de bibliotecas

padrão do Ruby. Apesar de ser muito mais lenta que floats, eles são pre-

cisos e se tratando de cálculos financeiros, performance geralmente não

é um problema, se comparado com aplicações científicas.

14

Casa do Código

Capítulo 2. Conhecendo Ruby

Constantes

Constantes em Ruby são todas as variáveis que começam com uma letra maiús-

cula, independente do restante. Veja o seguinte exemplo:

Pi = 3.14159

Porém, a comunidade Ruby adota um padrão de nomenclatura. Como classes

e módulos também usam constantes para identificá-los, adotamos CamelCase para

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке