মৌলিক অ্যারে অপারেশন ইমপ্লিমেন্ট করুন।
ফাংশনাল ভাষায় 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" ফাংশন, যেটি ফাংশনাল প্রোগ্রামিং জগতে বেশ পরিচিত একটি ধারণা, কিন্তু অবজেক্ট-ওরিয়েন্টেড জগতে ততটা নয়। ফোল্ডিং নিয়ে উইকিপিডিয়ার পৃষ্ঠায় সাধারণ ধারণা এবং সিগনেচার ও ইমপ্লিমেন্টেশনের ইঙ্গিত দেখুন।
Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।
রিকারশনের একটি ব্যবহারিক পরিচিতি উপভোগ করুন, অ্যারে অপারেশনের ইম্পারেটিভ ও ফাংশনাল বিকল্পগুলো ঘেঁটে দেখুন, আর টেল-কল রিকারশন ও অ্যাকুমুলেটর ফাংশনের গভীরে ডুব দিন।