কমান্ড লাইনে কাজ করা

Exercism CLI-এর মাধ্যমে স্থানীয়ভাবে Unison নিয়ে কাজ করার টিপস।


Unison কোড লেখা ও মূল্যায়ন করা

আপনি .u ফাইল সাফিক্সযুক্ত ফাইলে Unison কোড লেখেন। আমরা এগুলোকে "স্ক্র্যাচ" ফাইল বলি, কারণ আপনি এগুলোতে Unison কোড লেখেন, তবে শেষ পর্যন্ত ওই ফাইলগুলোর কনটেন্ট সংরক্ষণ ও সেভ করে Unison কোডবেস ম্যানেজার (UCM)। আপনি এখনও Exercism CLI-এর মাধ্যমে এই ফাইলগুলো সাবমিট করবেন, তবে Unison কোডের "সোর্স অফ ট্রুথ" হিসেবে UCM-কে ধরা যেতে পারে।

Unison-এ REPL বলে কিছু নেই (Read, Evaluate, Print, Loop, অর্থাৎ পড়া, মূল্যায়ন, ছাপানো আর লুপ), তবে আপনি "ওয়াচ এক্সপ্রেশন"-এ দ্রুত Unison এক্সপ্রেশন মূল্যায়ন করতে পারেন। আপনার .u সাফিক্সযুক্ত ফাইলে একটি লাইন > দিয়ে শুরু করুন এবং তার ডান দিকে একটি এক্সপ্রেশন লিখুন।

> myFunction 42 "hi"

ফাইলটি সেভ করলেই এক্সপ্রেশনটি মূল্যায়নের ফলাফল UCM দেখাবে। আপনার অনুশীলনীর ইমপ্লিমেন্টেশন নিয়ে সমস্যা সমাধানের সময় এটি কাজে লাগতে পারে।

Exercism-এর আরও বিস্তারিত ওয়ার্কফ্লো জানতে, একটি Exercism সমস্যা ইমপ্লিমেন্ট ও টেস্ট করার ওয়াকথ্রু ভিডিও এখানে দেখুন।

Caution

ওয়াকথ্রু ভিডিওটি Unison-এর পুরোনো ভার্সনের ওয়ার্কফ্লো দেখায়। নতুন প্রজেক্ট ওয়ার্কফ্লো নিয়ে নতুন ওয়ার্কফ্লো এখানে দেখুন।

কোডবেসের সংগঠন

একটি Unison কোডবেস "নেমস্পেস"-এ সাজানো থাকে। নেমস্পেসগুলো অনেকটা ফাইল সিস্টেমের ডিরেক্টরির মতো কাজ করে, শুধু ফাইলের বদলে এগুলোতে থাকে আপনার Unison টাইপ ও ফাংশন। নেমস্পেস পাথগুলো ডট . দিয়ে আলাদা করা হয়। উদাহরণস্বরূপ, base নেমস্পেসের Text নেমস্পেসকে আমরা base.Text দিয়ে বোঝাতে পারি।

আপনি যে অনুশীলনীগুলো করছেন, সেগুলোর প্রতিটির জন্য একটি নেমস্পেস তৈরি করার বা সেখানে cd করার পরামর্শ দিচ্ছি।

ইমপোর্ট

ইমপোর্ট ব্যবস্থাপনা ও নির্দিষ্ট করার জন্য Unison-এর সিনট্যাক্স হলো use সিনট্যাক্স। উদাহরণস্বরূপ, use base.data.List লিখলে base.data.List নেমস্পেসের সব ফাংশন স্কোপে চলে আসবে। এটি এমন পরিস্থিতিতে কাজে লাগে যেখানে আপনি List-এর উপর map-এর মতো কোনো ফাংশন ব্যবহার করছেন, যাকে Optional.map-এর মতো অন্য map ফাংশন থেকে আলাদা করে চিহ্নিত করা দরকার। নেমস্পেসের পরে স্কোপে আনার জন্য স্পেস দিয়ে আলাদা করা ফাংশনের তালিকা বসিয়েও আপনি নির্দিষ্ট ফাংশন ইমপোর্ট করতে পারেন, যেমন: use base.data.List tails head flatMap।

ফাইলের টপ-লেভেলে এবং ফাংশনের ভেতরে, দুই জায়গাতেই ইমপোর্ট নির্দিষ্ট করতে আপনি use সিনট্যাক্স ব্যবহার করতে পারেন। use ক্লজগুলো লেক্সিকাল স্কোপিংয়ের নিয়ম মেনে চলে, তাই বেশি নেস্টেড ইমপোর্ট কম নেস্টেড ইমপোর্টের উপর প্রাধান্য পায়।

স্ট্যান্ডার্ড লাইব্রেরি

Unison-এর স্ট্যান্ডার্ড লাইব্রেরির নাম base। ডিফল্টভাবে এটি নতুন Unison কোডবেসে ডাউনলোড হয়ে যায়। Unison কোডের অনলাইন রিপোজিটরি Unison share-এর মাধ্যমে, বা লোকাল কোডবেস UI-এর মাধ্যমে, বা Unison কোডবেস ম্যানেজার (UCM)-এ সার্চ করে আপনার ইমপ্লিমেন্টেশনে কোন ফাংশনগুলো পাওয়া যায় তা দেখতে পারেন। সেটি নিয়েই এরপর আলোচনা করব।

Unison কোডবেস ম্যানেজার (UCM) নেভিগেট করা

UCM-এ help লিখলে UCM কমান্ডের সম্পূর্ণ তালিকা পাওয়া যায়, তবে এখানে কয়েকটি টিপস ও রীতি দেওয়া হলো।

UCM-এ find কমান্ড দিয়ে নাম বা নেমস্পেস প্রিফিক্স অনুযায়ী টার্ম খোঁজা যায়, তবে find কোডবেসে টাইপ-ভিত্তিক সার্চও সমর্থন করে। টাইপ সিগনেচার দিয়ে কোনো ফাংশন খুঁজতে find-এর পরে একটি স্পেস ও কোলন লিখুন, যেমন find : [a] -> [[a]]।

ls কমান্ড দিয়ে নেমস্পেসের কনটেন্টের তালিকা দেখা যায়, যেমন ls base.data.List বা ls .exercism.helloWorld। UCM-এর অনেক কমান্ডই রিলেটিভ নেমস্পেস পাথ আর্গুমেন্ট বা ফুলি কোয়ালিফাইড নেমস্পেস আর্গুমেন্ট, দুটোর যেকোনোটি নিতে পারে। ফুলি কোয়ালিফাইড পাথ শুরু হয় একটি . দিয়ে, যা আপনার কোডবেসের "রুট" বোঝায়।

CLI-তে cd কমান্ড দিয়ে UCM-এ চলাচল করুন। কোনো নেমস্পেস না থাকলে, আপনি সেখানে গেলে cd একটি নেমস্পেস তৈরি করবে। এক ধাপ উপরের নেমস্পেসে যেতে cd .. ব্যবহার করতে পারেন।

সমস্যা সমাধান

আমি টেস্ট লোড করলে UCM আমার অনুশীলনীর ইমপ্লিমেন্টেশন খুঁজে পায় না।

টেস্ট লোড করার আগে আপনার টেক্সট এডিটরে স্টাব ফাইলটি সেভ করেছেন এবং কোডবেসের টার্মগুলো update করেছেন, তা নিশ্চিত করুন।

আমি নেমিং কনফ্লিক্টে পড়ছি। tests নামে দুটি টার্ম থাকতে পারে না।

ভিন্ন নেমস্পেসে একই নামের দুটি টার্ম থাকতে পারে। আপনি যদি Exercism-এর অনুশীলনীগুলো করছেন, তবে প্রতিটি অনুশীলনীর জন্য আলাদা নেমস্পেস তৈরি করার পরামর্শ দেওয়া হয়, যাতে টেস্ট ও স্টাবগুলো অন্যগুলো থেকে আলাদা থাকে।

আমার টেস্ট লোকালি পাস করে, কিন্তু টেস্ট রানারে পাস করে না।

দুঃখিত! প্রথমে দেখুন আপনার ইমপোর্ট স্ট্যান্ডার্ড লাইব্রেরি base এবং টেস্টের অধীনে থাকা scratch ফাইলে ডিফাইন করা ফাংশন ছাড়া আর কোনো কিছু রেফার করছে না কি না। যদি তা-ই হয়, তবে #track-unison Exercism স্ল্যাক চ্যানেলে আমাদের জানান, অথবা Unison ট্র্যাক রিপো-তে একটি ইস্যু ফাইল করুন।

কোনো সমস্যা হলে আমাদের জানান! 🙂