Percursos
/
Pharo
Pharo
/
Exercícios
/
String invertida
String invertida

String invertida

Fácil

Introdução

Inverter strings (lê-las da direita para a esquerda, em vez de as ler da esquerda para a direita) é uma tarefa surpreendentemente comum em programação.

Por exemplo, em bioinformática, inverter a sequência de strings de ADN ou ARN é muitas vezes importante para várias análises, como encontrar cadeias complementares ou identificar sequências palindrómicas com relevância biológica.

Instruções

A tua tarefa é inverter uma determinada string.

Alguns exemplos:

  • Transforma "stressed" em "desserts".
  • Transforma "strops" em "sports".
  • Transforma "racecar" em "racecar".

Embora existam os métodos #reversed e #reverseDo: para strings, consegues descobrir como fazer isto sozinho recorrendo a iteração de carateres de mais baixo nível e a streams?

Para te ajudar a explorar o código, o Pharo tem uma ferramenta engenhosa de pesquisa de código. Carrega em Shift-Enter para a ativar.

NOTA: Seguimos a convenção do Exercism de chamar à solução ReverseString, mas um nome mais ao estilo de Smalltalk seria StringReverser.

Smalltalk e strings

Quanto às strings, há alguns pequenos detalhes óbvios, como as aspas duplas para comentários, as aspas simples para strings e a sintaxe especial para carateres (por exemplo, $x para o caráter «x»), que te podem confundir à primeira leitura, já que as convenções são diferentes das usadas noutras linguagens.

Há também a noção de símbolo, que é uma string única em toda a memória; ou seja, quando é construído (normalmente em tempo de compilação), é feita uma pesquisa na memória para determinar se já existe outro igual; e só o original é usado. A razão não é apenas poupar memória, mas também um aumento significativo de velocidade ao comparar símbolos.

"this is a comment"
'this is a string'
#'this is a symbol'
#thisIsASymbolToo

Também há muito poucas vírgulas nos programas em Smalltalk, porque não desempenham nenhum papel sintático. É por isso que os literais de array, por exemplo, não têm vírgulas; por exemplo, #(1 2 3 4 5) No entanto, a vírgula é um operador por direito próprio e vais repará-la quando concatenas duas strings; por exemplo, 'string1', 'string2'

Por fim, vale a pena saber que strings e carateres são classes distintas. Uma string é uma coleção de carateres. Isto pode apanhar-te desprevenido quando iteras sobre strings, pois podes acabar por passar carateres a um método que espera strings. Repara em...

(('hello' at: 2) = $e) inspect.
(('hello' at: 2) = 'e') inspect.

Smalltalk e streams

As streams são úteis para leitura e escrita sequenciais. Tornam o código mais limpo ao evitar a necessidade de incrementar um índice. As streams funcionam com qualquer coleção.

stream := WriteStream on: String new.
stream nextPut: $h ; nextPutAll: 'ell' ; nextPut: $o.
stream contents inspect
Editar via GitHub A ligação abre numa nova janela ou separador
Pharo Exercism

Estás pronto para começar String invertida?

Inscreve-te no Exercism para aprenderes e dominares Pharo com 50 exercícios, e mentoria humana real, tudo grátis.

Mergulha a fundo em String invertida!

Explora 14 formas diferentes de inverter uma string, abordando vários temas, incluindo pontos de código Unicode, grafemas, alocações na pilha versus no heap e apontadores. Relaxa e aproveita 45 minutos de aprendizagem com o Jeremy e o Erik.