একটি প্র্যাকটিস অনুশীলনী যোগ করুন


এই ডকুমেন্টে ব্যাখ্যা করা হবে কীভাবে একটি নতুন প্র্যাকটিস অনুশীলনী যোগ করতে হয়।

অনুশীলনী নির্বাচন করা

কোন প্র্যাকটিস অনুশীলনীগুলো এখনও ইমপ্লিমেন্ট করা হয়নি তা দেখার সবচেয়ে সহজ উপায় হলো ট্র্যাকের বিল্ড পেজে (যেমন https://exercism.org/tracks/csharp/build) গিয়ে "Practice Exercises" বিভাগটি দেখে নেওয়া।

Caution

বিল্ড পেজের ডেটা দিনে একবার আপডেট হয়।

অনুশীলনী স্ক্যাফোল্ড করা

ট্র্যাকের রুট ডিরেক্টরি থেকে bin/add-practice-exercise স্ক্রিপ্ট (সোর্স) রান করে আপনি দ্রুত একটি নতুন প্র্যাকটিস অনুশীলনী স্ক্যাফোল্ড করতে পারেন:

bin/add-practice-exercise <exercise-slug>

চাইলে আপনি অনুশীলনীর ডিফিকাল্টি (-d দিয়ে) এবং/অথবা লেখকের GitHub ইউজারনেম (-a দিয়ে) উল্লেখ করতে পারেন:

bin/add-practice-exercise -d 3 -a foobar <exercise-slug>
Note

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

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

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

  • টেস্ট ফাইলে টেস্ট যোগ করুন
  • একটি উদাহরণ ইমপ্লিমেন্টেশন যোগ করুন
  • স্টাব ফাইলের কনটেন্ট নির্ধারণ করুন
  • অনুশীলনীর .meta/config.json ফাইলে:
    • authors কী (key)-তে অনুশীলনীর লেখকদের GitHub ইউজারনেম যোগ করুন
  • ট্র্যাকের config.json ফাইলে:
    • অনুশীলনীর ডিফিকাল্টি যাচাই/আপডেট করুন
    • practices কী (key)-তে কনসেপ্ট যোগ করুন (কেবল যখন ট্র্যাকে কনসেপ্ট অনুশীলনী থাকে তখনই প্রয়োজন)
    • prerequisites কী (key)-তে কনসেপ্ট যোগ করুন (কেবল যখন ট্র্যাকে কনসেপ্ট অনুশীলনী থাকে তখনই প্রয়োজন)

টেস্ট যোগ করা

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

  1. problem-specifications রিপোজিটরি-তে থাকা অনুশীলনীর canonical-data.json ফাইলের টেস্ট কেস ব্যবহার করে শুরু থেকে টেস্টগুলো ইমপ্লিমেন্ট করুন।
  2. অন্য কোনো ট্র্যাকের ইমপ্লিমেন্টেশন থেকে টেস্টগুলো পোর্ট করুন (টিপ: কোন কোন ট্র্যাকে একটি নির্দিষ্ট অনুশীলনী ইমপ্লিমেন্ট করা হয়েছে তা এক নজরে দেখতে https://exercism.org/exercises/<slug>-এ যান)।

দ্বিতীয় বিকল্পটি বিশেষভাবে আকর্ষণীয় হতে পারে, কারণ এটি দ্রুত ফলাফল দিতে পারে। তবে মনে রাখবেন, আপনার ট্র্যাকের সাথে সবচেয়ে ভালো মানায় এমনভাবে ইমপ্লিমেন্টেশনটি একটু বদলে নেওয়া উচিত। উদাহরণস্বরূপ, কিছু ট্র্যাক ক্লাস ব্যবহার করে না, শুধু ফাংশন নিয়ে কাজ করে। আবার আপনার ট্র্যাক যদি সাধারণত অবজেক্ট নিয়ে কাজ করে, তাহলে আপনার ট্র্যাকের সাথে সবচেয়ে ভালো মানায় এমনভাবে ইমপ্লিমেন্টেশনটি বদলে নেওয়া উচিত।

Note

কিছু ট্র্যাক একটি টেস্ট জেনারেটর ব্যবহার করে স্বয়ংক্রিয়ভাবে অনুশীলনীর টেস্ট ফাইল (পুনরায়) তৈরি করে। ট্র্যাকে টেস্ট জেনারেটর আছে কি না এবং থাকলে কীভাবে ব্যবহার করতে হয় তা জানতে ট্র্যাকের ডকুমেন্টেশন দেখে নিন।

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

টেস্ট পাস করে এমন কোড লেখা সম্ভব কি না তা নিশ্চিত করার জন্য একটি উদাহরণ ইমপ্লিমেন্টেশন যোগ করতে হয়।

Note

কোডটি ইডিওম্যাটিক হতে হবে না, শুধু টেস্ট পাস করলেই হবে।

ট্র্যাকের রুট ডিরেক্টরি থেকে bin/verify-exercises স্ক্রিপ্ট (সোর্স) রান করে উদাহরণ ইমপ্লিমেন্টেশনটি সব টেস্ট পাস করে কি না তা যাচাই করতে পারেন:

bin/verify-exercises <exercise-slug>

আউটপুটটি ব্যবহার করে যাচাই করুন যে উদাহরণ ইমপ্লিমেন্টেশনটি সব টেস্ট পাস করছে।

Note

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

Advanced

ভেতরে ভেতরে bin/verify-exercises স্ক্রিপ্টটি কয়েকটি কাজ করে:

  • অনুশীলনীটি একটি সাময়িক ডিরেক্টরিতে কপি করে
  • স্টাব ফাইলের জায়গায় উদাহরণ ইমপ্লিমেন্টেশন ফাইল বসিয়ে দেয়
  • টেস্ট ফাইলে স্কিপ করা টেস্ট থাকলে সেগুলো "unskipped" করা হয়
  • টেস্টগুলো রান করে

স্টাব ফাইল যোগ করা

স্টাব ইমপ্লিমেন্টেশন ফাইলগুলো শিক্ষার্থীদের জন্য একটি সূচনা বিন্দু তৈরি করে।

আমরা সুপারিশ করি স্টাব ফাইলে ন্যূনতম পরিমাণ কোড থাকুক, যাতে:

  • শিক্ষার্থী সঙ্গে সঙ্গে টেস্ট পাস করার লজিক ইমপ্লিমেন্ট করা শুরু করতে পারে
  • শিক্ষার্থীর সামনে "অদ্ভুত" সিনট্যাক্স এরর হাজির না হয়

বাস্তবে এর অর্থ হলো টেস্ট স্যুটে যে ফাংশন/মেথডগুলো টেস্ট করা হয় সেগুলো নির্ধারণ করা। এই কোড কীভাবে সাজাবে তা নিয়ে ট্র্যাকগুলো স্বাধীন, যতক্ষণ তারা নিশ্চিত করে যে স্টাব কোডটি শুরুতে সব টেস্ট ফেল করে।

উদাহরণ

Python:

def two_fer(name):
    pass

Kotlin:

fun twofer(name: String): String {
    TODO("Implement the function to complete the task")
}

অনুশীলনী লিন্ট করা

শেষ ধাপ হলো ট্র্যাকের (কনফিগারেশন) ফাইলগুলো সঠিকভাবে সাজানো আছে কি না, সিনট্যাক্স ও সিমান্টিক্স দুটো দিক থেকেই, তা যাচাই করতে লিন্টারটি রান করা।

প্রথমে নিচের কমান্ডটি রান করে নিশ্চিত করুন যে আপনার কাছে configlet-এর সর্বশেষ সংস্করণ আছে:

bin/fetch-configlet

এরপর নিচের কমান্ডটি রান করে লিন্টারটি চালান:

bin/configlet lint

আউটপুটটি ব্যবহার করে যাচাই করুন যে সবকিছু ঠিকঠাক আছে।

পুল রিকোয়েস্ট সাবমিট করা

সবকিছু ঠিকঠাক হয়ে গেলে এরপর আপনি ট্র্যাকের রিপোজিটরিতে একটি পুল রিকোয়েস্ট সাবমিট করতে পারেন।

সাবমিট করার আগে কনট্রিবিউটরদের জন্য পুল রিকোয়েস্ট গাইড এবং পুল রিকোয়েস্ট গাইড পড়ে নিন।

নিশ্চিত করুন যে PR-এর বর্ণনায় যোগ করা অনুশীলনীটির কথা লেখা আছে।