sinais, passo 06: hífens e nomes antigos

Veja esta parte da tabela UnicodeData.txt:

0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
002A;ASTERISK;Po;0;ON;;;;;N;;;;;
002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;
002C;COMMA;Po;0;CS;;;;;N;;;;;
002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;
002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;

Duas coisas me chamaram atenção aqui:

Nesta parte do tutorial a proposta é que você implemente as mudanças para exercitar os conceitos vistos até agora.

No final do exercício, o programa deverá se comportar assim:

$ ./sinais quote
U+0027	'	APOSTROPHE (APOSTROPHE-QUOTE)
U+2358	⍘	APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
U+235E	⍞	APL FUNCTIONAL SYMBOL QUOTE QUAD
$ ./sinais minus hyphen
U+002D	-	HYPHEN-MINUS
U+207B	⁻	SUPERSCRIPT MINUS (SUPERSCRIPT HYPHEN-MINUS)
U+208B	₋	SUBSCRIPT MINUS (SUBSCRIPT HYPHEN-MINUS)
U+FE63	﹣	SMALL HYPHEN-MINUS
U+FF0D	-	FULLWIDTH HYPHEN-MINUS
U+E002D		TAG HYPHEN-MINUS

Comportamentos a observar:

U+0027	'	APOSTROPHE (APOSTROPHE-QUOTE)

Mãos à obra! Se precisar de ajuda, veja dicas a seguir.

Independente de usar dicas ou não, depois me conte quanto tempo você levou para fazer este exercício.

Dicas

1. Mudanças em AnalisarLinha

Para atender os requisitos do exercício, a função AnalisarLinha precisa devolver uma fatia de palavras que inclua as partes de cada termo com hífen, e também as palavras do campo índice 10. Além disso, havendo conteúdo no campo 10, esse texto deverá ser concatenado ao nome, entre parêntesis.

Tente resolver o exercício com a dica acima, antes de ler a próxima dica.

2. Casos de teste para AnalisarLinha

Crie outra função de teste, em vez de apagar ou mudar o TestAnalisarLinha que já existe. O comportamento que já verificamos em TestAnalisarLinha continua valendo.

Agora teremos pelo menos três casos de teste:

Para testar isso sem duplicar muito código de TestAnalisarLinha, sugiro fazer um teste em tabela. Use a estrutura de TestContém como inspiração.

Tente resolver o exercício com a dica acima, antes de ler a próxima dica.

3. Testando com o “baby steps”

A metodologia TDD recomenda “baby steps” - passos bem simples. Ao criar um teste em tabela, coloque inicialmente apenas um caso na tabela. Faça este caso passar antes de colocar outro caso. No final, sua tabela pode ter vários casos, mas você só deve incluir e fazer passar um caso de cada vez.

Tente resolver o exercício com a dica acima, antes de ler a próxima dica.

4. Resolva primeiro o tratamento dos hífens

Há várias formas de transformar "SMALL HYPHEN-MINUS" em uma lista de três palavras: []string {"SMALL", "HYPHEN", "MINUS"}. Você pode passar o texto original por strings.Replace para substituir "-" por " " antes de usar strings.Fields para separar as palavras. Ou então você pode usar strings.FieldsFunc para fazer as duas operações de uma vez só.

Seja como for, recomendo criar uma função auxiliar para fazer essa separação por espaços ou hífens. E não esqueça de fazer TDD: escreva o teste antes de implementar a funcionalidade!

Tente resolver o exercício com a dica acima, antes de ler a próxima dica.

5. Lembre-se de reflect.DeepEqual

Para testar a função que transforma "SMALL HYPHEN-MINUS" em []string {"SMALL", "HYPHEN", "MINUS"}, você vai precisar comparar a fatia produzida com a fatia esperada, mas Go só permite comparar uma fatia com nil. Para comparar uma fatia com outra, lembre-se de usar a função reflect.DeepEqual como fizemos em TestAnalisarLinha.

Tente resolver o exercício com a dica acima, antes de ler a próxima dica.

6. Atenção para palavras duplicadas nos campos 1 e 10

Observe este caso:

0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;

Queremos que AnalisarLinha devolva como lista de palavras apenas isto: []string{"APOSTROPHE", "QUOTE"} e não []string{"APOSTROPHE", "APOSTROPHE", "QUOTE"}. Você pode usar função auxilar contém que criamos no passo-05 para resolver este problema.

Fim do exercício

Quando tiver terminado, anote o tempo que levou para fazer o exercício e conte para o instrutor. Isso ajuda a melhorar o tutorial.

O Passo 7 é uma seção bônus, onde faremos o download automático do arquivo UnicodeData.txt. Siga em frente se tiver feito o exercício. A solução deste exercício e o código que faz download estão no diretório raiz do repositório sinais (não há um diretório sinais07).