مفاهیم همان مواردی هستند که یک برنامهنویس برای تسلط بر یک زبان باید آنها را درک کند. مفاهیم از طریق تمرینهای مفهومی آموزش داده میشوند و بهعنوان پیشنیاز برای تمرینهای مفهومی و عملی به کار میروند. مفاهیم هنگام نمایش به دانشآموز، روی نقشهی مفاهیم قرار میگیرند.
فرادادهی مفهوم در کلید concepts در پروندهی config.json تعریف میشود. این فراداده UUID، slug و موارد بیشترِ مفهوم را تعیین میکند.
{
"concepts": [
{
"uuid": "b9a421b2-c5ff-4213-bd6d-b886da31ea0d",
"slug": "numbers",
"name": "Numbers"
}
]
}
هر مفهوم پوشهی مخصوص به خود را درون پوشهی concepts مسیر دارد. اسم پوشهی مفهوم باید با ویژگی slug آن مفهوم، همانطور که در پروندهی config.json تعریف شده است، یکسان باشد.
هر مفهوم دو نوع پرونده دارد:
این پروندهها برای کمک به توضیح مفهوم به دانشآموز نمایش داده میشوند.
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: نشانی که پیوند به آن داده میشود.description: توضیحی از پیوند که بهعنوان متن پیوند نمایش داده میشود.پیوندها میتوانند بهصورت اختیاری فیلد icon_url هم داشته باشند که میتوان از آن برای سفارشیسازی نمادی که هنگام نمایش پیوند نشان داده میشود استفاده کرد. اگر مشخص نشود، نماد بهطور پیشفرض 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
هدف: شامل اطلاعات فراداده دربارهی مفهوم است.
وجود: الزامی
این پرونده اطلاعات فرادادهی مفهوم را در خود دارد:
authors: شناسهی کاربری GitHub نویسنده(های) مفهوم (الزامی)
contributors: شناسهی کاربری GitHub مشارکتکننده(های) مفهوم (اختیاری)
blurb: توضیحی کوتاه از این مفهوم. طول آن باید حداکثر ۳۵۰ باشد. از Markdown پشتیبانی نمیشود (الزامی)اگر کسی هم نویسنده و هم مشارکتکننده است، اسم آن شخص را فقط بهعنوان نویسنده فهرست کنید.
{
"authors": ["FSharpForever"],
"contributors": ["IWantToHelp"],
"blurb": "F# has two types of numbers: integers and floating-point numbers."
}
توجه کنید: