কনসেপ্ট হলো সেসব বিষয়, যা একটি ভাষায় সাবলীল হতে হলে একজন প্রোগ্রামারকে বুঝতে হয়। কনসেপ্ট শেখানো হয় কনসেপ্ট অনুশীলনীর মাধ্যমে, এবং এগুলো কনসেপ্ট এবং প্র্যাকটিস অনুশীলনীর পূর্বশর্ত হিসেবে ব্যবহৃত হয়। কনসেপ্ট শিক্ষার্থীর কাছে প্রদর্শনের সময় একটি কনসেপ্ট ম্যাপে বসানো হয়।
কনসেপ্টের মেটাডেটা নির্ধারিত হয় config.json ফাইলের concepts কী-তে। মেটাডেটা কনসেপ্টের UUID, স্লাগ এবং আরও অনেক কিছু নির্ধারণ করে।
{
"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: যে 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."
}
লক্ষ্য করুন: