ট্র্যাক
/
Java
Java
/
অনুশীলনী
/
অ্যারে অপারেশন
অ্যারে অপারেশন

অ্যারে অপারেশন

কঠিন

নির্দেশনা

মৌলিক অ্যারে অপারেশন ইমপ্লিমেন্ট করুন।

ফাংশনাল ভাষায় length, map, ও reduce-এর মতো অ্যারে অপারেশন খুবই কমন। বিদ্যমান ফাংশন ব্যবহার না করেই একগুচ্ছ মৌলিক অ্যারে অপারেশন ইমপ্লিমেন্ট করুন।

বিদ্যমান নামের সঙ্গে সংঘর্ষ এড়াতে যে অপারেশনগুলো ইমপ্লিমেন্ট করা হবে তার সঠিক সংখ্যা ও নাম track-এর উপর নির্ভর করবে, তবে আপনি যে সাধারণ অপারেশনগুলো ইমপ্লিমেন্ট করবেন সেগুলো হলো:

  • append (দুটি অ্যারে দেওয়া হলে, দ্বিতীয় অ্যারের সব এলিমেন্ট প্রথম অ্যারের শেষে যোগ করুন);
  • concatenate (একগুচ্ছ অ্যারে দেওয়া হলে, সব অ্যারের সব এলিমেন্ট একত্র করে একটি সমতল অ্যারে বানান);
  • filter (একটি প্রেডিকেট ও একটি অ্যারে দেওয়া হলে, যেসব এলিমেন্টের জন্য predicate(item) ট্রু হয় সেসব এলিমেন্টের অ্যারে রিটার্ন করুন);
  • length (একটি অ্যারে দেওয়া হলে, তার ভেতরে থাকা এলিমেন্টের মোট সংখ্যা রিটার্ন করুন);
  • map (একটি ফাংশন ও একটি অ্যারে দেওয়া হলে, সব এলিমেন্টে function(item) প্রয়োগ করার ফলাফলগুলোর অ্যারে রিটার্ন করুন);
  • foldl (একটি ফাংশন, একটি অ্যারে এবং একটি প্রাথমিক অ্যাকুমুলেটর দেওয়া হলে, বাম দিক থেকে প্রতিটি এলিমেন্ট অ্যাকুমুলেটরে ফোল্ড (রিডিউস) করুন);
  • foldr (একটি ফাংশন, একটি অ্যারে এবং একটি প্রাথমিক অ্যাকুমুলেটর দেওয়া হলে, ডান দিক থেকে প্রতিটি এলিমেন্ট অ্যাকুমুলেটরে ফোল্ড (রিডিউস) করুন);
  • reverse (একটি অ্যারে দেওয়া হলে, মূল সব এলিমেন্ট নিয়ে একটি অ্যারে রিটার্ন করুন, তবে উল্টো ক্রমে)।

লক্ষ্য করুন, ফোল্ড ফাংশনগুলোতে (foldl, foldr) আর্গুমেন্ট যে ক্রমে পাঠানো হয় সেটি গুরুত্বপূর্ণ।

ইঙ্গিত

Java-তে ক্লাস মেথডের বদলে ইনস্ট্যান্স মেথড ব্যবহার করাকে ভালো প্র্যাকটিস হিসেবে ধরা হয়। তবে এমন কিছু পরিস্থিতি আছে যেখানে একটি ফাংশনের static হওয়াই একেবারে যথাযথ। যেহেতু Java-এর ক্লাসগুলো পরিবর্তনের জন্য বন্ধ (অর্থাৎ Ruby বা JavaScript-এর মতো অন্য ভাষায় যেমন ক্লাসের সংজ্ঞার বাইরে থেকেও ক্লাসে সদস্য যোগ করা যায়, Java-তে তা যায় না), তাই সরাসরি ক্লাসে নতুন আচরণ যোগ করা যায় না। তাহলে একটি নির্দিষ্ট টাইপের জন্য আচরণ ডিফাইন করতে চাইলে কী করবেন? এ ক্ষেত্রে প্রচলিত সমাধান হলো একটি ইউটিলিটি মেথড লেখা। এ ধরনের মেথডের সমষ্টিকে প্রায়ই "ইউটিলিটি ক্লাস" বলা হয়। JRE-এর ভেতরে এমন ক্লাসের উদাহরণ হলো Arrays এবং Collections। এই অনুশীলনীতে আমরা চাই একটি List-এ map(), reduce(), filter() ইত্যাদি মেথড থাকুক। List-এ এগুলো নেই, তাই আমরা static মেথড ব্যবহার করছি।

foldLeft এবং foldRight মেথড দুটি "fold" ফাংশন, যেটি ফাংশনাল প্রোগ্রামিং জগতে বেশ পরিচিত একটি ধারণা, কিন্তু অবজেক্ট-ওরিয়েন্টেড জগতে ততটা নয়। ফোল্ডিং নিয়ে উইকিপিডিয়ার পৃষ্ঠায় সাধারণ ধারণা এবং সিগনেচার ও ইমপ্লিমেন্টেশনের ইঙ্গিত দেখুন।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Java Exercism

অ্যারে অপারেশন শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।

ডিপ ডাইভ: অ্যারে অপারেশন!

রিকারশনের একটি ব্যবহারিক পরিচিতি উপভোগ করুন, অ্যারে অপারেশনের ইম্পারেটিভ ও ফাংশনাল বিকল্পগুলো ঘেঁটে দেখুন, আর টেল-কল রিকারশন ও অ্যাকুমুলেটর ফাংশনের গভীরে ডুব দিন।