Trilhas
/
Ruby
Ruby
/
Exercícios
/
Porto de Palermo
Porto de Palermo

Porto de Palermo

Exercício de aprendizagem

Introdução

Símbolos são identificadores nomeados que podem ser usados para se referir a um valor. Os símbolos são criados por meio de um literal de símbolo, que consiste em prefixar um nome com o caractere :, por exemplo, :foo. Eles também podem ser escritos com aspas, por exemplo, :"foo", o que permite, por exemplo, espaços no nome.

:foo # => :foo
:"foo boo" # => :"foo boo"

Os símbolos são usados em muitos lugares da linguagem, inclusive como chaves em hashes, para representar nomes de métodos e nomes de variáveis.

Identificador

O que diferencia os símbolos das strings é que eles são identificadores e não representam dados nem texto. Isso significa que dois símbolos com o mesmo nome são sempre o mesmo objeto.

"foo".object_id # => 60
"foo".object_id # => 80
:foo.object_id # => 1086748
:foo.object_id # => 1086748

Modificando símbolos

Os símbolos são imutáveis, o que significa que não podem ser modificados. Isso significa que, quando você "modifica" um símbolo, na verdade está criando um novo símbolo. Existem alguns métodos que podem ser usados para manipular símbolos. Todos eles retornam novos símbolos. Todos os métodos podem ser encontrados na API do Symbol.

:foo.upcase # => :FOO

:foo.object_id # => 1086748
:foo.upcase.object_id # => 60

A vantagem de os símbolos serem imutáveis é que eles são mais eficientes em termos de memória do que as strings, além de serem mais seguros para usar como identificadores.

Conversão

Os símbolos podem ser convertidos em strings e vice-versa. Isso pode ser útil quando você quer modificar um símbolo ou quando quer usar um símbolo como string. Para apresentar uma string como um símbolo, você pode usar o método String#to_sym e, para fazer o contrário, o método Symbol#to_s. Como os símbolos têm um conjunto limitado de métodos, pode ser útil converter um símbolo em string para usar métodos de string nele, caso você precise de um novo símbolo.

:foo.to_s # => "foo"
"foo".to_sym # => :foo

Instruções

O porto de Palermo é um movimentado ancoradouro, com muitos navios chegando e partindo. Há muito tempo ele tem um sistema manual para acompanhar os navios que estão atualmente no porto. Esse sistema é muito propenso a erros, e o chefe do porto decidiu substituí-lo por um sistema informatizado.

O chefe do porto contratou você para implementar o novo sistema. O sistema precisa lidar com identificadores de navios, mas também de destinos.

1. Crie o identificador dos portos

A primeira coisa que você precisa fazer é criar o identificador do porto de Palermo. O identificador são as quatro primeiras letras do nome do porto, em maiúsculas.

Defina a constante Port::IDENTIFIER como um símbolo com o valor :PALE.

Port::IDENTIFIER 
# => :PALE

2. Obtenha identificadores para outros portos

O programa também terá que lidar com outros portos, então você precisa criar identificadores para eles também. O porto gostaria que o sistema fosse automatizado e, como os portos usam convenções de nomenclatura diferentes, os identificadores devem ser gerados a partir do nome do porto. O identificador são as quatro primeiras letras do nome do porto, em maiúsculas.

Defina o método Port.get_identifier para receber uma string como argumento e retornar o identificador como símbolo para aquele porto.

Port.get_identifier("Hamburg") 
# => :HAMB

3. Determine em qual terminal um navio deve atracar

O porto tem dois terminais, e o sistema precisa determinar em qual terminal um navio deve atracar. O terminal é determinado pelo identificador do navio.

O identificador é formado por 2 partes: a primeira é composta por 3 letras maiúsculas que indicam qual carga o navio está transportando, e depois 3 números, que são o identificador único do navio.

Se o identificador do navio indicar que ele carrega OIL ou GAS, o navio deve atracar no terminal A. Caso contrário, o navio deve atracar no terminal B.

Defina o método Port.get_terminal para receber como argumento um símbolo que é o identificador do navio. O método deve retornar o terminal como um símbolo.

Port.get_terminal(:OIL123)
# => :A
Editar via GitHub O link abre em uma nova janela ou aba
Ruby Exercism

Tudo pronto para começar Porto de Palermo?

Crie sua conta no Exercism para aprender e dominar Ruby com 21 conceitos121 exercícios e mentoria humana de verdade, tudo de graça.