Adicione o primeiro exercício


O primeiro exercício de cada trilha é um exercício "Hello, World!" bem simples.

O objetivo deste exercício é verificar rapidamente se tudo está conectado corretamente. Isso confirma que a pessoa instalou o ambiente de programação corretamente, que sabe como rodar os testes e que consegue fazê-los passar. Além disso, no caso do cliente de linha de comando (CLI) do Exercism, também garante que a CLI está instalada e configurada corretamente e que o site entrega os arquivos certos para o exercício, sem enviar artefatos desnecessários. Por último, garante que a pessoa está familiarizada com o ciclo de baixar um exercício usando a CLI, resolver um problema no seu ambiente de desenvolvimento local e enviar a solução de volta para o site.

Ou seja, ainda não se trata realmente de aprender algo sobre a linguagem em si. A meta aqui é algo o mais simples possível.

Provavelmente esta também será a parte mais difícil de configurar corretamente o repositório da trilha, porque implementar um exercício envolve muitas partes que precisam se encaixar.

Implementando o exercício

O exercício "Hello, World!" segue algumas regras especiais:

  • Ele é sempre o primeiro exercício de uma trilha
  • Toda trilha precisa implementá-lo
  • O arquivo de testes tem apenas um teste
  • O arquivo stub contém uma implementação quase funcional, mas em vez de "Hello, World!" ele usa "Goodbye, Mars!"
  • Ele não tem prerequisites
  • Ele não tem practices

Determine os caminhos dos arquivos

O exercício "Hello, World!" (e, na verdade, todos os exercícios do Exercism) exige um conjunto específico de arquivos:

  • Documentação: explica ao estudante o que precisa ser feito (pode ser gerada automaticamente).
  • Metadados: fornece ao Exercism alguns metadados sobre o exercício (pode, em grande parte, ser gerado automaticamente).
  • Suíte de testes: verifica se uma solução está correta (específica da trilha).
  • Implementação stub: fornece um ponto de partida para os estudantes (específica da trilha).
  • Implementação de exemplo: fornece uma implementação de exemplo que passa em todos os testes (específica da trilha).
  • Arquivos adicionais: garantem que os testes possam rodar (específicos da trilha, opcionais).

Antes de criar o exercício "Hello, World!", você precisa tomar algumas decisões sobre os nomes e os caminhos dos arquivos específicos da trilha (suíte de testes, implementação stub, implementação de exemplo e quaisquer arquivos adicionais).

A regra geral é usar nomes idiomáticos para a linguagem. Quando não houver preferências fortes, prefira estruturas de diretório menos profundas. A implementação de exemplo precisa ser identificável pelo script de CI, então é aconselhável escolher um nome base genérico que todos os exercícios possam usar, por exemplo example, sample ou reference-solution.

Configurando os caminhos dos arquivos

Depois de escolher os caminhos de arquivo específicos da trilha, configure-os na chave files do arquivo config.json da raiz. A chave files serve como modelo para todos os exercícios, o que permite que qualquer ferramenta (algumas das quais usaremos já já) saiba onde procurar os arquivos. Você pode usar vários placeholders para configurar facilmente o slug do exercício (hello-world, neste caso).

Exemplo

Se sua trilha usa PascalCase nos nomes dos arquivos, a chave files pode ficar assim:

"files": {
  "solution": [
    "%{pascal_slug}.cs"
  ],
  "test": [
    "%{pascal_slug}Tests.cs"
  ],
  "example": [
    ".meta/Example.cs"
  ]
}
Note

Os arquivos de exemplo devem ficar dentro do diretório .meta.

Para mais informações, consulte a documentação da chave files.

Criando os arquivos

Depois de especificar os modelos de caminho dos arquivos, você pode gerar rapidamente os arquivos do exercício "Hello, World!" rodando os comandos a seguir a partir do diretório raiz da trilha:

bin/fetch-configlet
bin/configlet create --practice-exercise hello-world

Defina o autor

Para que o site liste você como autor do exercício, siga estes passos:

No arquivo .meta/config.json do exercício:

  • Adicione seu nome de usuário do GitHub à chave authors

Para que isso funcione, você precisa vincular sua conta do Exercism ao GitHub. Você pode fazer isso no site, na seção Integrações da página de Configurações.

Note

Autores de exercícios também recebem reputação

Use o script

Repositórios de trilha mais recentes podem usar o script bin/add-practice-exercise (código-fonte) para adicionar novos exercícios:

bin/add-exercise -a <github_username> two-fer
Note

Se você estiver trabalhando em um repositório de trilha que não tem esse arquivo, fique à vontade para copiá-lo para o seu repositório usando o link do código-fonte acima.

Implemente o exercício

Depois que os arquivos gerados forem criados, você vai precisar:

  • Adicionar testes ao arquivo de testes
  • Adicionar uma implementação de exemplo
  • Definir o conteúdo do arquivo stub

Adicione os testes

Uma parte essencial de adicionar um exercício é escrever os testes. De modo geral, há duas opções ao implementar um dos exercícios acima:

  1. Implementar os testes do zero, usando os casos de teste do canonical-data.json do exercício
  2. Portar os testes a partir da implementação de outra trilha (dica: acesse https://exercism.org/exercises/hello-world para ver quais trilhas já implementaram um determinado exercício).

Para o exercício "Hello, World!", haverá apenas um caso de teste, então qualquer uma das opções serve.

Adicione a implementação de exemplo

O arquivo de implementação de exemplo deve conter o código necessário para resolver os testes.

Defina o stub

O arquivo stub deve ter uma solução quase funcional para os testes, mas com o texto "Hello, World!" substituído por "Goodbye, Mars!". Dica: é só copiar, colar e modificar a solução de exemplo.

Atualize o(s) autor(es) do exercício

Quando terminar o exercício, adicione seu nome de usuário do GitHub ao array "authors" no arquivo .meta/config.json do exercício. Assim garantimos que você receba o crédito por ter criado o exercício.

Linting

Para verificar se o exercício está configurado corretamente, você pode usar a funcionalidade de lint integrada da ferramenta configlet.

O primeiro passo é baixar a ferramenta configlet, para a qual criamos dois scripts:

  • bin/fetch-configlet: rode este quando estiver usando *nix ou macOS
  • bin/fetch-configlet.ps1: rode este quando estiver usando Windows

Rodar um desses scripts a partir do diretório raiz do repositório da trilha baixa o binário bin/configlet ou bin/configlet.exe, respectivamente.

Depois, você pode verificar se o exercício está correto rodando bin/configlet lint.

Note

É provável que o configlet reporte o seguinte erro:

The `tags` array is empty:
/path/to/track/config.json

Este erro será corrigido na etapa Preparação para o lançamento, então você pode:

  • ignorar o erro (por enquanto), ou
  • corrigir o erro adicionando tags
Note

O fluxo de trabalho do configlet roda configlet lint automaticamente sempre que algo é enviado para a main ou para um pull request.