প্রথম অনুশীলনী যোগ করুন


প্রতিটি ট্র্যাকে প্রথম অনুশীলনীটি খুবই সরল একটি "Hello, World!" অনুশীলনী।

এই অনুশীলনীর উদ্দেশ্য হলো দ্রুত নিশ্চিত করা যে সবকিছু ঠিকভাবে সংযুক্ত আছে। এটি নিশ্চিত করবে যে ব্যবহারকারী প্রোগ্রামিং এনভায়রনমেন্টটি সঠিকভাবে ইনস্টল করেছেন, টেস্ট কীভাবে চালাতে হয় তা জানেন, এবং সেগুলো পাস করাতে সক্ষম। এর বাইরে, Exercism কমান্ড-লাইন ক্লায়েন্ট (CLI)-এর ক্ষেত্রে এটি এটিও নিশ্চিত করে যে ব্যবহারকারী CLI সঠিকভাবে ইনস্টল ও কনফিগার করেছেন, এবং সাইটটি অনুশীলনীর জন্য সঠিক ফাইলগুলো সরবরাহ করে, কোনো অপ্রয়োজনীয় আর্টিফ্যাক্ট ছাড়াই। সবশেষে এটি নিশ্চিত করে যে ব্যবহারকারী CLI দিয়ে অনুশীলনী ডাউনলোড করা, নিজের লোকাল ডেভেলপমেন্ট এনভায়রনমেন্টে সমস্যা সমাধান করা, এবং সমাধান আবার সাইটে সাবমিট করার চক্রটির সাথে পরিচিত।

অন্যভাবে বললে, এটি এখনো ভাষাটি সম্পর্কে কিছু শেখার ব্যাপার নয়। আমাদের লক্ষ্য খুবই সরল কিছু।

ট্র্যাক রিপোজিটরি সঠিকভাবে সেটআপ করার সবচেয়ে কঠিন অংশও সম্ভবত এটি, কারণ একটি অনুশীলনী ইমপ্লিমেন্ট করতে অনেকগুলো চলমান অংশ থাকে।

অনুশীলনীটি ইমপ্লিমেন্ট করা

"Hello, World!" অনুশীলনীর ক্ষেত্রে কিছু বিশেষ নিয়ম প্রযোজ্য:

  • এটি সবসময় একটি ট্র্যাকে প্রথম অনুশীলনী
  • প্রতিটি ট্র্যাককে এটি ইমপ্লিমেন্ট করতেই হবে
  • টেস্ট ফাইলে মাত্র একটি টেস্ট থাকে
  • স্টাব ফাইলে প্রায়-কাজ-করা একটি ইমপ্লিমেন্টেশন থাকে, তবে "Hello, World!"-এর বদলে এটি "Goodbye, Mars!" ব্যবহার করে
  • এতে কোনো prerequisites নেই
  • এতে কোনো practices নেই

ফাইল পাথ নির্ধারণ করা

"Hello, World!" অনুশীলনীর (আসলে Exercism-এর সব অনুশীলনীর) নির্দিষ্ট কিছু ফাইল প্রয়োজন:

  • ডকুমেন্টেশন: শিক্ষার্থীকে কী করতে হবে তা ব্যাখ্যা করে (স্বয়ংক্রিয়ভাবে তৈরি করা যায়)।
  • মেটাডেটা: অনুশীলনী সম্পর্কে Exercism-কে কিছু মেটাডেটা দেয় (বেশিরভাগই স্বয়ংক্রিয়ভাবে তৈরি করা যায়)।
  • টেস্ট স্যুট: একটি সমাধানের সঠিকতা যাচাই করে (ট্র্যাক-নির্দিষ্ট)।
  • স্টাব ইমপ্লিমেন্টেশন: শিক্ষার্থীদের জন্য একটি শুরুর বিন্দু দেয় (ট্র্যাক-নির্দিষ্ট)।
  • উদাহরণ ইমপ্লিমেন্টেশন: একটি উদাহরণ ইমপ্লিমেন্টেশন দেয় যা সব টেস্ট পাস করে (ট্র্যাক-নির্দিষ্ট)।
  • অতিরিক্ত ফাইল: টেস্টগুলো চালানো যায় তা নিশ্চিত করে (ট্র্যাক-নির্দিষ্ট, ঐচ্ছিক)।

"Hello, World!" অনুশীলনী তৈরি করার আগে, ট্র্যাক-নির্দিষ্ট ফাইলনেম ও ফাইল পাথ (টেস্ট স্যুট, স্টাব ইমপ্লিমেন্টেশন, উদাহরণ ইমপ্লিমেন্টেশন এবং যেকোনো অতিরিক্ত ফাইল) নিয়ে আপনাকে কিছু সিদ্ধান্ত নিতে হবে।

সাধারণ নিয়ম হলো ভাষার জন্য স্বাভাবিক এমন নাম ব্যবহার করা। যেখানে জোরালো কোনো পছন্দ নেই, সেখানে অগভীর ডিরেক্টরি কাঠামো পছন্দ করুন। CI স্ক্রিপ্ট যাতে উদাহরণ ইমপ্লিমেন্টেশনটি শনাক্ত করতে পারে, তাই সব অনুশীলনী ব্যবহার করতে পারে এমন একটি সাধারণ বেসনেম বেছে নেওয়া বাঞ্ছনীয়, যেমন example, sample, বা reference-solution.

ফাইল পাথ কনফিগার করা

ট্র্যাক-নির্দিষ্ট ফাইল পাথ বেছে নেওয়ার পর, সেগুলো রুট config.json ফাইলের files কী (key)-তে কনফিগার করা উচিত। files কী (key) সব অনুশীলনীর জন্য টেমপ্লেট হিসেবে কাজ করবে, যা যেকোনো টুলিংকে (যার কিছু আমরা একটু পরেই ব্যবহার করব) ফাইল কোথায় খুঁজতে হবে তা জানার সুযোগ দেয়। অনুশীলনীর স্লাগ (এই ক্ষেত্রে hello-world) সহজে কনফিগার করার জন্য আপনি বিভিন্ন প্লেসহোল্ডার ব্যবহার করতে পারেন।

উদাহরণ

আপনার ট্র্যাক যদি ফাইলের জন্য PascalCase ব্যবহার করে, তাহলে files কী (key) দেখতে এমন হতে পারে:

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

উদাহরণ ফাইলটি/ফাইলগুলো .meta ডিরেক্টরির ভেতরে রাখা উচিত।

আরও তথ্যের জন্য files কী (key) ডকুমেন্টেশন দেখুন।

ফাইল তৈরি করা

ফাইল পাথ টেমপ্লেট নির্দিষ্ট করার পর, ট্র্যাকের রুট ডিরেক্টরি থেকে নিচের কমান্ডগুলো চালিয়ে আপনি দ্রুত "Hello, World!" অনুশীলনীর ফাইলগুলো স্ক্যাফোল্ড করতে পারেন:

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

লেখক নির্ধারণ করা

ওয়েবসাইটে আপনাকে অনুশীলনীর লেখক হিসেবে দেখাতে, এই ধাপগুলো অনুসরণ করুন:

অনুশীলনীর .meta/config.json ফাইলে:

  • authors কী (key)-তে আপনার GitHub ইউজারনেম যোগ করুন

এটি কাজ করতে হলে, আপনাকে আপনার Exercism অ্যাকাউন্ট GitHub-এর সাথে লিংক করতে হবে। ওয়েবসাইটের Settings পেজের Integrations সেকশনে এটি করতে পারেন।

Note

অনুশীলনীর লেখকদের reputation-ও দেওয়া হয়

স্ক্রিপ্ট ব্যবহার করা

নতুন ট্র্যাক রিপোজিটরিগুলো নতুন অনুশীলনী যোগ করতে bin/add-practice-exercise স্ক্রিপ্টটি (সোর্স) ব্যবহার করতে পারে:

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

আপনি যদি এমন একটি ট্র্যাক রিপোতে কাজ করেন যেখানে এই ফাইলটি নেই, তাহলে উপরের সোর্স লিংক ব্যবহার করে অবাধে সেগুলো আপনার রিপোতে কপি করতে পারেন।

অনুশীলনী ইমপ্লিমেন্ট করা

স্ক্যাফোল্ড করা ফাইলগুলো তৈরি হয়ে গেলে, এরপর আপনাকে করতে হবে:

  • টেস্ট ফাইলে টেস্ট যোগ করা
  • একটি উদাহরণ ইমপ্লিমেন্টেশন যোগ করা
  • স্টাব ফাইলের বিষয়বস্তু নির্ধারণ করা

টেস্ট যোগ করা

একটি অনুশীলনী যোগ করার একটি মূল অংশ হলো টেস্ট যোগ করা। মোটামুটিভাবে বলতে গেলে, উপরের অনুশীলনীগুলোর একটি ইমপ্লিমেন্ট করার সময় দুটি বিকল্প আছে:

  1. শূন্য থেকে টেস্টগুলো ইমপ্লিমেন্ট করা, অনুশীলনীর canonical-data.json থেকে টেস্ট কেস ব্যবহার করে
  2. অন্য কোনো ট্র্যাকের ইমপ্লিমেন্টেশন থেকে টেস্টগুলো পোর্ট করা (টিপ: কোন কোন ট্র্যাক একটি নির্দিষ্ট অনুশীলনী ইমপ্লিমেন্ট করেছে তার একটি ধারণা পেতে https://exercism.org/exercises/hello-world-এ যান)।

"Hello, World!" অনুশীলনীর জন্য মাত্র একটি টেস্ট কেস থাকবে, তাই যেকোনো একটি বিকল্পই ঠিক আছে।

উদাহরণ ইমপ্লিমেন্টেশন যোগ করা

উদাহরণ ইমপ্লিমেন্টেশন ফাইলে টেস্টগুলো সমাধান করার জন্য প্রয়োজনীয় কোড থাকা উচিত।

স্টাব নির্ধারণ করা

স্টাব ফাইলে টেস্টগুলোর একটি প্রায় কাজ-করা সমাধান থাকা উচিত, তবে "Hello, World!" লেখাটি "Goodbye, Mars!" দিয়ে প্রতিস্থাপিত। টিপ: শুধু উদাহরণ সমাধানটি কপি-পেস্ট করে পরিবর্তন করে নিতে পারেন।

অনুশীলনীর লেখক(দের) আপডেট করা

অনুশীলনী শেষ হয়ে গেলে, অনুশীলনীর .meta/config.json ফাইলের "authors" অ্যারে-তে আপনার GitHub ইউজারনেম যোগ করুন। এটি নিশ্চিত করবে যে অনুশীলনীটি তৈরি করার কৃতিত্ব আপনাকে সঠিকভাবে দেওয়া হয়।

লিন্টিং

অনুশীলনীটি সঠিকভাবে সেটআপ হয়েছে কিনা যাচাই করতে, আপনি configlet টুল-এর অন্তর্নির্মিত লিন্টিং কার্যকারিতা ব্যবহার করতে পারেন।

প্রথম ধাপ হলো configlet টুলটি আনা, যার জন্য আমরা দুটি স্ক্রিপ্ট তৈরি করেছি:

  • bin/fetch-configlet: *nix বা macOS ব্যবহার করলে এটি চালান
  • bin/fetch-configlet.ps1: Windows ব্যবহার করলে এটি চালান

ট্র্যাকের রিপোর রুট ডিরেক্টরি থেকে এই স্ক্রিপ্টগুলোর একটি চালালে bin/configlet বা bin/configlet.exe বাইনারিটি ডাউনলোড হবে।

এরপর bin/configlet lint চালিয়ে অনুশীলনীটি সঠিক কিনা যাচাই করতে পারেন।

Note

সম্ভবত configlet নিচের এররটি রিপোর্ট করবে:

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

এই এররটি লঞ্চের জন্য প্রস্তুতি ধাপে ঠিক করা হবে, তাই হয়:

  • এররটি উপেক্ষা করুন (আপাতত), অথবা
  • ট্যাগ যোগ করে এররটি ঠিক করুন
Note

main-এ বা কোনো পুল রিকোয়েস্টে কিছু পুশ করা হলে configlet ওয়ার্কফ্লো স্বয়ংক্রিয়ভাবে configlet lint চালাবে।