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

Шрифт
Фон

classes e MAIÚSCULAS para valores, de forma a distingui-los facilmente.

EULER = 2.718 # Constante da forma correta

Pi

# Classe?

Cuidado! Constantes não são constantes!

Infelizmente é possível alterar valores de constantes no Ruby. Ao ten-

tarmos fazer isso, porém, o interpretador irá exibir uma mensagem de

alerta:

PHI = 1.618

PHI = 999

# (irb):9: warning: already initialized constant Pi

# => 999

PHI

# => 999

Arrays

Arrays em Ruby possuem representação literal, parecido com Python e Perl e

também podem conter qualquer tipo de objetos:

a = [1, 2, 1+2]

# [1, 2, 3]

a << 4

# [1, 2, 3, 4]

a << "string!"

# [1, 2, 3, 4, "string"]

15

2.3. Tipos e estrutura de dados

Casa do Código

O comportamento de Arrays é bem parecido com strings, ou seja, é possível usar

Ranges e o método [] para acessar elementos diretamente:

a = ["a", "b", "c", "d", "e"]

a[0]

# 'a'

a[0..2]

# ["a", "b", "c"]

a[0, 2]

# ["a", "b"] - Atenção a este exemplo!

É possível fazer atribuição de elementos de Array de uma forma bastante conve-

niente:

list = ["a", "b", "c"]

first, second = list

first # => "a"

second # => "b"

Usando o splat

operator, é possível obter o restante de toda a lista:

list = ["a", "b", "c"]

first, *tail = list

first # => "a"

tail # => ["b", "c"]

Array de strings são chatas de digitar, portanto o Ruby tem uma maneira para

facilitar isso:

a = %w{a b c d e}

a # ["a", "b", "c", "d", "e"]

# Porém, palavras com espaços são problemáticas

b = %w{"long words" small tiny}

# ["\"long", "words\"", "small", "tiny"]

# Palavras com espaços devem ser "escapadas"

c = %w{long\ words small tiny}

# ["long words", "small", "tiny"]

Arrays também fazem operações matemáticas:

a = ["a", "b", "c"]

b = ["a", 2, 3]

16

Casa do Código

Capítulo 2. Conhecendo Ruby

a + b # ["a", "b", "c", "a", 2, 3]

a - b # ["b", "c"]

b - a # [2, 3]

c = [1, 2]

c * 3 # [1, 2, 1, 2, 1, 2]

Além dessas operações mais canônicas, Arrays ainda suportam interseção e

união de conjuntos:

a = [1, 2, 3]

b = [3, 4, 5]

a + b

# [1, 2, 3, 3, 4, 5]

a | b

# [1, 2, 3, 4, 5] - Na união, elementos duplicados são removidos

a & b

# [3] - Na interseção, apenas os repetidos ficam

Arrays não deixam de ser objetos em Ruby, portanto possuem vários métodos

interessantes. No exemplo abaixo vemos o uso dos métodos mais comuns:

[1, 2, 3].reverse

# [3, 2, 1] - inverte o array

['acerola', 'laranja'].join(' e ')

# "acerola e laranja" - concatena strings com o parâmetro passado

[10, 20, nil, '', false, true].compact

# [10, 20, '', false, true] - remove nils

[6, 3, 9].sort # [3, 6, 9] - ordena os resultados

[3, 3, 9].uniq # [3, 9] - apenas os elementos únicos

[[3], 2, 1].flatten # [3, 2, 1] - achata listas internas

a = [1, 2, 3]

a.pop

# 3 - sai o último elemento

a

# [1,2]

a.shift # 1 - sai o primeiro elemento

a

# [2]

17

2.3. Tipos e estrutura de dados

Casa do Código

Note que a maioria desses métodos possui a versão bang, ou seja, terminada em

exclamação, que modifica o conteúdo da própria variável, ao invés de retornar uma

cópia modificada:

a = [[3], 2, 1]

b = a.flatten

a

# => [[3], 2, 1]

b

# => [3, 2, 1]

b = a.flatten!

a

# => [3, 2, 1],

b

# => [3, 2, 1]

18

Casa do Código

Capítulo 2. Conhecendo Ruby

Métodos bang (!)

Em Ruby, é possível criar métodos que terminam em ! e são usados em

principalmente dois casos:

1) Métodos que modificam estado interno do objeto, como vimos no

exemplo anterior;

2) Métodos que, ao falharem, disparam uma exceção.

No uso de métodos do Rails é possível observar o caso em que a versão

bang do método resulta em uma exceção:

Post.find_by_title 'Unexistent post' # => nil

Post.find_by_title! 'Unexistent post'

# ActiveError::RecordNotFound

Hashes

Ruby também possui representação literal para Hashes, tal como Python (apesar

de serem conhecidos naquelas terras por dicts ou dicionários). Hashes são estrutu-

ras de dados similares a Array, porém ao invés de acessarmos valores com índices

numéricos, podemos usar qualquer objeto:

frequency = Hash.new

frequency["hello"] = 1

frequency["world"] = 2

frequency[1] = 10

É possível criar hashes também com uma sintaxe mais cômoda:

# equivalente ao exemplo anterior

frequency = { "hello" => 1, "world" => 2, 1 => 10 }

19

2.3. Tipos e estrutura de dados

Casa do Código

Ainda é possível usar uma terceira sintaxe, usada para criar hashes contendo

símbolos como chaves (veremos mais detalhes sobre símbolos ainda nesta seção).

Veja o exemplo a seguir:

# Sintaxe clássica para hashes tendo símbolos como chaves

frequency = { :hello => 1, :world => 2 }

# Nova sintaxe

frequency = { hello: 1, world: 2 }

Uso de sintaxe de Hash

Não há nenhuma diferença entre as duas sintaxes de hashes com símbo-

los, ou seja, elas são puramente estéticas. Neste livro, vamos nos ater à

sintaxe clássica apenas para manter consistência com outras hashes, fi-

cando à critério do leitor escolher qual prefere usar. Lembre-se apenas

de ser consistente.

Hashes possuem métodos bem úteis. Alguns dos mais

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

0
Шрифт
Фон

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