কাজ করে কাজী, ফাঁকি দেয় পাঁজি
অনেক অনেক কাজ করতে করতেই কাজী হয়। আর নিজের সাথে ফাঁকিবাজি করলে নিজের ফিউচার নিজেই নষ্ট করে। তাই অনেকগুলা কাজের জন্য একটা সিম্পল এপ্লিকেশন বানাবি। সেটার জন্য একটা ফাইলে সব কোড রাখবি। সেজন্য একটা ফাইল তৈরি কর, নাম হতে পারে Todo.js। পুরো কোড এই এক ফাইলের মধ্যেই থাকবে। প্রজেক্টটিতে আমরা একটি TodoApp ক্লাস ব্যবহার করব, যেখানে সব কোড লিখে ফেলবি।
নিচে টাস্কগুলো ধাপে ধাপে দেয়া হলো:
১. সবার প্রথমে TodoApp ক্লাস তৈরি কর। এই ক্লাসের মধ্যে todos নামে একটি প্রোপার্টি (যেখানে কাজগুলো স্টোর হবে)। আরও কিছু প্রয়োজনীয় প্রোপার্টি থাকবে। প্রয়োজনীয় মেথড যেমন add, remove, complete, display ইত্যাদি থাকবে। সব একবারে লিখে ফেলা লাগবে না; বরং ধাপে ধাপে করবি।
২. নতুন কাজ যোগ করার জন্য addTodo নামে মেথড বানাবি। এই মেথড তিনটা প্যারামিটার নিবে। একটা হচ্ছে টাস্কের নাম, আরেকটা হচ্ছে এই কাজ করতে কত সময় লাগবে। আর থার্ডটা হচ্ছে, কোন ক্যাটাগরির টাস্ক। ক্যাটাগরি নামের মধ্যে Study, Entertainment, Personal, Health, Learning এই রকম যেকোনো কিছু হতে পারে।
এই মেথডের মধ্যে টাস্কের জন্য একটা অবজেক্ট বানাবি। যেখানে অবজেক্টের আইডি থাকবে। আইডির মান হবে, এই ক্লাসের todos-এর মধ্যে যতগুলা উপাদান আছে, তার সংখ্যার সাথে 1 যোগ করে তারপর task-এর নাম, টাস্কের ক্যাটাগরি, এই টাস্ক করতে কত সময় লাগবে এবং completed নামে একটা প্রোপার্টি থাকবে। প্রাথমিকভাবে completed-এর মান হবে false, তারপর এই টাস্ক অবজেক্টকে todos প্রোপার্টির মধ্যে যোগ করে দিবি।
৩. completeTodo নামে একটা মেথড তৈরি কর। এইটার মধ্যে প্যারামিটার হিসেবে কোনো একটা টাস্কের নাম নিবি। তারপর todos প্রোপার্টি থেকে সেই টাস্ককে কীভাবে খুঁজে বের করবি, সেটা আমি কিন্তু বলব না। তুই নিজে নিজে চিন্তা কর। তারপর টাস্কটি খুঁজে পেলে তার completed প্রোপার্টি true সেট করবি এবং টাস্ক কমপ্লিট হয়েছে, সেই হিসেবে রিটার্ন true পাঠিয়ে দিবি। আর যদি টাস্ক খুঁজে না পাস, তাহলে false রিটার্ন করবি।
৪. removeTodo নামে একটা মেথড তৈরি কর। সেখানে এই মেথড একটি প্যারামিটার নেবে টাস্কের নাম। আর মেথডের ভিতরে তোর কাজ হবে, এই টাস্কের পজিশন বা ইনডেক্স খোঁজ করা। তারপর todos থেকে সেটাকে রিমুভ করা। কেমনে করবি, তুই চিন্তা কর।
৫. displayTodoList মেথড তৈরি কর। এইখানে প্যারামিটার হিসেবে কোনো কিছু দিতে পারে, আবার নাও দিতে পারে। যদি প্যারামিটার হিসেবে কিছু না দেয়, তাহলে সব টাস্কের নাম, ক্যাটাগরি, সময়, আইডি— এইসব কনসোল লগ করবি। আর যদি প্যারামিটার হিসেবে কিছু দেয়, তাহলে সেটা হবে ক্যাটাগরির নাম। অর্থাৎ যদি প্যারামিটার হিসেবে ক্যাটাগরির নাম দেয়, তাহলে সেই ক্যাটাগরির সব টাস্ককে কনসোলে আউটপুট হিসেবে দেখাবি।
৭. hoursWorked নামে একটা মেথড তৈরি কর। এইটার কাজ হচ্ছে, এখন পর্যন্ত যতগুলা কাজ সম্পন্ন হয়েছে, সবগুলা কাজের জন্য টোটাল কত সময় লাগছে, সেটার যোগফল রিটার্ন করবে। চেষ্টা করবি, এইটা Array.reduce দিয়ে করতে। একান্তই না পারলে অন্য কোনো সিস্টেমে করতে পারস।
৮. timeNeeded নামে একটা মেথড তৈরি কর। এইটার কাজ হচ্ছে, এখন পর্যন্ত যে টাস্কগুলা করা হয়নি, সেগুলা করার জন্য টোটাল কত সময় লাগবে, সেটার যোগফল রিটার্ন করবে। চেষ্টা করবি এইটাও Array.reduce দিয়ে করতে। একান্তই না পারলে অন্য কোনো সিস্টেমে করতে পারস।
৯. editTodo নামে একটা মেথড যোগ কর। এই মেথডের কাজ হলো নির্দিষ্ট টাস্কের তথ্য আপডেট করা। মেথডটি দুইটি প্যারামিটার নেবে। প্রথম প্যারামিটার হচ্ছে টাস্কের নাম (যেটা আপডেট করতে চাচ্ছিস)। আর সেকেন্ড প্যারামিটার হচ্ছে একটা অবজেক্ট (যেখানে টাস্কের নাম, ক্যাটাগরি বা সময় থাকতে পারে, আবার নাও থাকতে পারে। যদি সেকেন্ড প্যারামিটার নাম থাকে, তাহলে ঐ টাস্কের নাম আপডেট করবি। যদি না থাকে, তাহলে আপডেট করবি না। একইভাবে যদি সেকেন্ড প্যারামিটারে ওই টাস্কের ক্যাটাগরি থাকে, তাহলে ক্যাটাগরি আপডেট করবি, না হয় করবি না। একইভাবে সেকেন্ড প্যারামিটার অবজেক্টে যদি সময় থাকে, তাহলে সেটা আপডেট করবি, না হয় করবি না। আর ফাইনালি যদি টাস্ক খুঁজে পাস এবং মিনিমাম একটা ডাটা আপডেট করিস, তাহলে true রিটার্ন করবি। আর যদি টাস্ক খুঁজে না পাস বা একটাও ডাটা আপডেট না করস, তাহলে false রিটার্ন করবি।
১০. getTodo নামে মেথড তৈরি কর। এই মেথডটি একটি প্যারামিটার নেবে। সেটা টাস্কের নাম বা ক্যাটাগরির নাম হতে পারে। তোর কাজ হবে, প্রত্যেকটা টাস্কের নাম অথবা ক্যাটেগরি চেক করবি। প্রথম একটা টাস্ক পেয়ে গেলে সেটাকে রিটার্ন করে দিবি। আর যদি কোনো টাস্ক না পাস, তাহলে undefined রিটার্ন করবি।
১১. largestTodo নামে মেথড যোগ কর। এই মেথড কোনো প্যারামিটার নিবে না। তবে যেসব কাজ এখনও কমপ্লিট হয়নি, তাদের মধ্যে যে কাজটার সময় সবচেয়ে বেশি, সেই টাস্কটা রিটার্ন করে দিবে।
১২. smallestTodo নামে মেথড যোগ কর। এই মেথড কোনো প্যারামিটার নিবে না। তবে যেসব কাজ এখনও কমপ্লিট হয়নি, তাদের মধ্যে যে কাজটার সময় সবচেয়ে কম, সেই টাস্কটা রিটার্ন করে দিবে।
১৩. sortTodos নামে মেথড যোগ কর। এই মেথড কোনো প্যারামিটার নিবে না। তবে যেসব কাজ এখনও কমপ্লিট হয়নি, সেগুলাকে সময় অনুসারে বেশি থেকে কম সময়, এই ক্রমানুসারে সাজিয়ে দিবে।
১৪. undoTodo নামে মেথড বানাবি। যদি কোনো টাস্ক ভুলবশত completed করা হয়ে যায়, তাহলে এই মেথড দিয়ে তা undo করতে পারবি। অর্থাৎ যদি টাস্কে completed যদি true থাকে, তাহলে সেটাকে false বানাবি। তারপর টাস্কের স্ট্যাটাস যদি চেঞ্জ হয়, তাহলে true রিটার্ন করবি, না হয় false রিটার্ন করবি।
১৫. completedPercentage নামে মেথড তৈরি কর। এই মেথড রিটার্ন করবে, টোটাল টাস্কের মধ্যে কত শতাংশ টাস্ক কমপ্লিট হয়েছে। ফলাফল পার্সেন্টেজ আকারে রিটার্ন করবি। যেটার মান ০-১০০%-এর মধ্যে হবে।
১৬. importTodos নামে মেথড যোগ কর। এই মেথডকে একটি JSON স্ট্রিং দেয়া হবে। সেই স্ট্রিংয়ের মধ্যে এক বা একাধিক টাস্ক থাকতে পরে। যদি টাস্ক থাকে, তাহলে সে JSON-কে কনভার্ট করে ধরে ধরে প্রত্যেকটা টাস্ক todos লিস্টে যোগ করবে।
১৭. clearAllTodos নামে একটি মেথড বানাবি, যা পুরো todos লিস্টকে একবারে ক্লিয়ার করে দেবে। অর্থাৎ আর কোনো todo থাকবে না।
একসাথে অনেকগুলা জিনিস প্র্যাকটিস কিন্তু তোর হয়ে গেল। কী মজা। এখন থেকে তুই নিজে নিজেই এইরকম কিছু প্রজেক্ট চিন্তা করে করে বের করবি। তারপর বসে বসে কোড করে ফেলবি।