Os conceitos são aquilo que um programador precisa de compreender para ser fluente numa linguagem. Os conceitos são ensinados nos Exercícios de Conceito e servem de pré-requisitos para Exercícios de Conceito e de Prática. Os conceitos são colocados num mapa de conceitos quando são apresentados ao estudante.
Os metadados de um conceito são definidos na chave concepts do ficheiro config.json. Os metadados definem o UUID, o slug e muito mais do conceito.
{
"concepts": [
{
"uuid": "b9a421b2-c5ff-4213-bd6d-b886da31ea0d",
"slug": "numbers",
"name": "Numbers"
}
]
}
Cada conceito tem o seu próprio diretório dentro do diretório concepts da track. O nome do diretório do conceito tem de corresponder à propriedade slug do conceito, tal como definida no ficheiro config.json.
Um conceito tem dois tipos de ficheiros:
Estes ficheiros são apresentados ao estudante para ajudar a explicar o conceito.
about.md: fornece informações sobre o conceito a um estudante que já concluiu o exercício de conceito correspondente, para aprender e consultar mais tarde (obrigatório)introduction.md: fornece uma breve introdução a um estudante que ainda não concluiu o exercício de conceito correspondente (obrigatório)links.json: fornece ligações úteis com mais leitura ou informação sobre um conceito (obrigatório)Estes ficheiros não são apresentados ao estudante; servem para definir os metadados do conceito.
.meta/config.json: contém informações de metadados sobre o conceito (obrigatório)
concepts
└── numbers
├── .meta
| └── config.json
├── about.md
├── introduction.md
└── links.json
Objetivo: fornecer informações mais detalhadas sobre o conceito a um estudante que já concluiu o exercício de conceito correspondente, para aprender e consultar mais tarde.
Presença: obrigatório
Depois de concluir o exercício de conceito correspondente (ou seja, de "aprender" um conceito), a página do conceito passa a mostrar o conteúdo do ficheiro about.md em vez do ficheiro introduction.md. O ficheiro about.md deve fornecer aos estudantes informações abrangentes sobre o que precisam de saber para serem fluentes no conceito. No mínimo, este ficheiro deve conter toda a informação introduzida no documento introduction.md dos conceitos.
Se o conceito introduzir sintaxe nova, deve incluir exemplos dessa sintaxe. O estudante não deve ter de seguir muitas ligações para adquirir o conhecimento que o ficheiro procura transmitir. Em vez disso, o about.md deve conter informação suficiente para ser compreensível no seu contexto.
O ficheiro about.md não se limita ao âmbito do exercício de conceito correspondente. O conteúdo pode exigir conhecimentos de outros conceitos que serão introduzidos mais tarde. Se forem mencionados outros conceitos, deve ligar-se às respetivas introduções (ver ligações internas para mais detalhes).
Eis alguns exemplos do que pode ser abordado.
Não é objetivo do ficheiro about.md fornecer um conjunto completo de informação sobre o conceito. A título de exemplo, imagina uma linguagem que tem funcionalidades antigas que os programadores experientes (e talvez até a documentação ou as especificações oficiais) recomendam que já não sejam usadas. Fornecer detalhes sobre essas funcionalidades estaria fora do âmbito do ficheiro about.md, porque não são relevantes para atingir fluência. No entanto, os maintainers podem optar por acrescentar um pequeno bloco para reconhecer os padrões antigos, caso um estudante os possa encontrar com frequência no mundo real. Ainda assim, esse bloco deve ser assinalado como tal.
O ficheiro about.md DEVE ter uma estrutura clara, sobretudo quando contém muita informação. No futuro, haverá também suporte para marcar partes como "tópicos avançados", de modo a destacá-las para os estudantes interessados sem sobrecarregar os restantes.
# About
There are two different kinds of numbers in Elixir - integers and floats.
Floats are numbers with one or more digits behind the decimal separator. They use the 64-bit double precision floating-point format.
```elixir
float = 3.45
# => 3.45
```
Elixir also supports the scientific notation for floats.
```elixir
1.25e-2
# => 0.0125
```
## Rounding errors
Floats are infamous for their rounding errors.
```elixir
0.1 + 0.2
# => 0.30000000000000004
```
However, those kind of errors are not specific to Elixir. They happen in all programming languages. This is because all data on our computers is stored and processed as binary code. In binary, only fractions whose denominator can be expressed as `2^n` (e.g. `1/4`, `3/8`, `5/16`) can be expressed exactly. Other fractions are expressed as estimations.
```elixir
# 3/4
Float.ratio(0.75)
# => {3, 4}
# 3/5
Float.ratio(0.6)
# => {5404319552844595, 9007199254740992}
```
You can learn more about this problem at [0.30000000000000004.com][0.30000000000000004.com]. The [Float Toy page][evanw.github.io-float-toy] has a nice, graphical explanation how a floating-point number's bits are converted to an actual floating-point value.
Objetivo: fornecer uma breve introdução a um estudante que ainda não concluiu o exercício de conceito correspondente.
Presença: obrigatório
Este ficheiro é mostrado se o estudante ainda não tiver concluído o exercício de conceito correspondente. Deve fornecer uma breve introdução ao conceito.
about.md.# Introduction
One of the key aspects of working with numbers in C# is the distinction between integers and floating-point numbers (numbers with zero or more digits after the decimal separator).
The two most commonly used numeric types in C# are `int` (a 32-bit integer) and `double` (a 64-bit floating-point number).
```csharp
int i = 123;
double d = 54.29;
```
Objetivo: fornecer ligações úteis com mais leitura ou informação sobre um conceito.
Presença: obrigatório
Podem ser documentação oficial, um bom tutorial, etc. Estas ligações não substituem as ligações mais contextuais dentro do ficheiro about.md de um conceito; servem antes para dar ao estudante um conjunto rápido de pontos de referência gerais.
Cada ligação tem de conter os seguintes campos:
url: o URL para onde aponta.description: uma descrição da ligação, que é mostrada como texto da ligação.As ligações podem também ter, opcionalmente, um campo icon_url, que serve para personalizar o ícone mostrado quando a ligação é apresentada. Se não for especificado, o ícone é, por omissão, o favicon.
[
{
"url": "https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/intro-to-csharp/numbers-in-csharp-local",
"description": "Numbers in C#"
},
{
"url": "https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/integral-numeric-types",
"description": "Integral numeric types",
"icon_url": "http://test.org/icon.png"
}
]
.meta/config.json
Objetivo: conter informações de metadados sobre o conceito.
Presença: obrigatório
Este ficheiro contém informações de metadados sobre o conceito:
authors: o(s) nome(s) de utilizador do GitHub do(s) autor(es) do conceito (obrigatório)
contributors: o(s) nome(s) de utilizador do GitHub do(s) contribuidor(es) do conceito (opcional)
blurb: uma descrição breve deste conceito. O comprimento tem de ser <= 350. Não é suportado Markdown (obrigatório)Se alguém for ao mesmo tempo autor e contribuidor, indica essa pessoa apenas como autor.
{
"authors": ["FSharpForever"],
"contributors": ["IWantToHelp"],
"blurb": "F# has two types of numbers: integers and floating-point numbers."
}
Tem em atenção que: