Runas, 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 mudadanças para exercitar os conceitos vistos atĂ© agora.

No final do exercĂ­cio, o programa deverĂĄ se comportar assim:

$ ./runas quote
U+0027	'	APOSTROPHE (APOSTROPHE-QUOTE)
U+2358	⍘	APL FUNCTIONAL SYMBOL QUOTE UNDERBAR
U+235E	⍞	APL FUNCTIONAL SYMBOL QUOTE QUAD
$ ./runas 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 runas (não hå um diretório runas07).