sinais: passo a passo com TDD

Aqui você pode acompanhar o desenvolvimento passo a passo do exemplo sinais: um utilitário em linguagem Go para localizar caracteres Unicode pelo nome.

Você não precisa saber nada de Go para acompanhar, basta instalar. Assumimos que você sabe programar. Os recursos específicos de Go são explicados linha a linha, à medida que aparecem no código.

Seguiremos o princípio do TDD (Test-Driven Development): primeiro escrevemos um teste, depois o código mais simples que faz o teste passar.

Conteúdo

  1. Iniciando o TDD
  2. Primeira função completa
  3. Gerar a lista de caracteres
  4. MVP 1, o mínimo que é útil
  5. Busca por palavras inteiras
  6. Exercício: hífens e nomes antigos
  7. Bônus: download automático da UCD

Nosso objetivo

Ao final desse tutorial, teremos um utilitário de linha de comando que faz isso:

$ sinais face eyes
U+1F601	😁	GRINNING FACE WITH SMILING EYES
U+1F604	😄	SMILING FACE WITH OPEN MOUTH AND SMILING EYES
U+1F606	😆	SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES
U+1F60A	😊	SMILING FACE WITH SMILING EYES
U+1F60D	😍	SMILING FACE WITH HEART-SHAPED EYES
U+1F619	😙	KISSING FACE WITH SMILING EYES
U+1F61A	😚	KISSING FACE WITH CLOSED EYES
U+1F61D	😝	FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES
U+1F638	😸	GRINNING CAT FACE WITH SMILING EYES
U+1F63B	😻	SMILING CAT FACE WITH HEART-SHAPED EYES
U+1F63D	😽	KISSING CAT FACE WITH CLOSED EYES
U+1F644	🙄	FACE WITH ROLLING EYES

Você passa uma ou mais palavras como argumento, e o programa devolve uma lista ordenada de caracteres Unicode cujas descrições contém todas as palavras que você passou.

Sobre o banco de dados Unicode

O projeto Unicode mantém um banco de dados chamado Unicode Character Database (UCD), com nomes descritivos e outros metadados sobre os mais de 128.000 caracteres que fazem parte da versão atual do padrão. A tabela mais interessante do UCD é um arquivo ASCII de 1.6MB cuja versão mais atual pode ser obtida neste URL: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.

O UnicodeData.txt traz informações sobre os caracteres de praticamente todos os idiomas, incluindo também símbolos, ícones e emojis. São 30.592 linhas na versão 9.0 do padrão Unicode. Isso corresponde a cerca de 24% do total de caracteres do UCD (a maior parte dos ideogramas CJK — Chinês/Japonês/Coreano — é documentada em outras tabelas).

Eis uma pequena amostra do UnicodeData.txt:

003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;

Os campos que nos interessam são o primeiro e o segundo: o código Unicode em hexadecimal e o nome oficial do caractere.

Nosso programa sinais vai usar o UnicodeData.txt para localizar caracteres pelo nome. Então, mãos à obra!

Para iniciar o desenvolvimento, vá para o Passo 1. O código está no diretório sinais01 do repositório https://github.com/ThoughtWorksInc/sinais, mas eu recomendo que você copie o código em seu próprio espaço de trabalho, porque os códigos nos diretórios sinaisNN são o estado final de cada passo, porém existem passos intermediários que vale a pena você acompanhar escrevendo os testes, rodando os testes, e fazendo as mudanças necessárias para os testes passarem.