コンセプトとは、あるプログラミング言語を使いこなすためにプログラマーが理解しておくべき事柄です。 コンセプトはコンセプト演習で教えられ、コンセプト演習とプラクティス演習の前提条件として使われます。 コンセプトは、学習者に表示されるときにコンセプトマップ上に配置されます。
コンセプトのメタデータは、config.jsonファイルのconceptsキーで定義します。このメタデータには、コンセプトのUUIDやスラッグなどが定義されます。
{
"concepts": [
{
"uuid": "b9a421b2-c5ff-4213-bd6d-b886da31ea0d",
"slug": "numbers",
"name": "Numbers"
}
]
}
各コンセプトは、トラックのconceptsディレクトリの中にそれぞれ専用のディレクトリを持ちます。コンセプトのディレクトリ名は、config.jsonファイルで定義されているコンセプトのslugプロパティと一致していなければなりません。
コンセプトには2種類のファイルがあります。
これらのファイルは、コンセプトの理解を助けるために学習者に提示されます。
about.md: 対応するコンセプト演習を完了した学習者が、そこから学び直したり参照したりできるように、コンセプトに関する情報を提供します(必須)introduction.md: 対応するコンセプト演習をまだ完了していない学習者に、コンセプトの簡単な導入を提供します(必須)links.json: コンセプトについてさらに読んだり調べたりするための役立つリンクを提供します(必須)これらのファイルは学習者には_提示されず_、コンセプトのメタデータを定義するために使われます。
.meta/config.json: コンセプトに関するメタ情報が含まれます(必須)
concepts
└── numbers
├── .meta
| └── config.json
├── about.md
├── introduction.md
└── links.json
目的: 対応するコンセプト演習を完了した学習者が、そこから学び直したり参照したりできるように、コンセプトについてより詳しい情報を提供すること。
要否: 必須
対応するコンセプト演習を完了すると(これをコンセプトを「学習した」状態と呼びます)、コンセプトページにはintroduction.mdファイルの代わりにabout.mdファイルの内容が表示されます。about.mdファイルでは、そのコンセプトを使いこなすために知っておくべきことを、学習者に網羅的に提供する必要があります。最低限、このファイルには、コンセプトのintroduction.mdドキュメントで紹介されるすべての情報が含まれている必要があります。
コンセプトで新しい構文を紹介する場合は、構文の例を含める必要があります。学習者が、このファイルで伝えようとしている知識を得るために、多くのリンクをたどらなければならないようではいけません。むしろ、about.mdは、その文脈の中で理解できるだけの情報を含んでいるべきです。
about.mdファイルは、対応するコンセプト演習の範囲に限定されません。内容が、あとで紹介されるほかのコンセプトの知識を必要とすることもあります。ほかのコンセプトに言及する場合は、それぞれの導入ドキュメントにリンクを張ってください(詳しくは内部リンクを参照)。
ここでは、扱える内容の例をいくつか挙げます。
about.mdファイルの目的は、コンセプトに関する完全な情報を提供することではありません。たとえば、経験豊富なプログラマー(さらには公式ドキュメントや仕様)がもう使うべきではないと勧めているような古い機能を持つ言語を想像してみてください。そうした機能の詳細を提供することは、流暢さを得るためには関係がないため、about.mdファイルの範囲外です。ただし、学習者がそうした古い標準に実際の現場でよく出くわす可能性があるなら、メンテナーがその標準に触れる短いブロックを追加してもかまいません。ただし、そのブロックはそのようなものだとわかるように明示する必要があります。
about.mdファイルは、とくに情報量が多いときには、明確に構造化しなければなりません。将来的には、一部を「高度なトピック」としてマークし、ほかの学習者に負担をかけずに関心のある学習者に示せるようになる予定です。
# 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.
目的: 対応するコンセプト演習をまだ完了していない学習者に、簡単な導入を提供すること。
要否: 必須
このファイルは、学習者が対応するコンセプト演習をまだ完了していない場合に表示されます。コンセプトについて簡単に導入する内容にしてください。
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;
```
目的: コンセプトについてさらに読んだり調べたりするための役立つリンクを提供すること。
要否: 必須
公式ドキュメントや優れたチュートリアルなどが考えられます。これらのリンクは、コンセプトのabout.mdファイル内にある、より文脈に沿ったリンクの代わりになるものでは_ありません_が、学習者にとって手早く参照できる大まかな手がかりを提供します。
各リンクには、次のフィールドを含める必要があります。
url: リンク先のURL。description: リンクの説明。リンクテキストとして表示されます。リンクには任意でicon_urlフィールドを付けることもできます。これは、リンクを表示するときに使うアイコンをカスタマイズするためのものです。指定しない場合、アイコンはデフォルトでファビコンになります。
[
{
"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
目的: コンセプトに関するメタ情報が含まれます。
要否: 必須
このファイルには、コンセプトに関するメタ情報が含まれます。
authors: コンセプトの作者のGitHubユーザー名(必須)
contributors: コンセプトの貢献者のGitHubユーザー名(任意)
blurb: このコンセプトの短い説明。長さは350以下でなければなりません。Markdownは_サポートされていません_(必須)ある人が作者_かつ_貢献者である場合は、その人を作者としてのみ記載してください。
{
"authors": ["FSharpForever"],
"contributors": ["IWantToHelp"],
"blurb": "F# has two types of numbers: integers and floating-point numbers."
}
次の点に注意してください。