জাভা 8.. কার্যকরী প্রোগ্রামিংয়ের প্রতিবন্ধকতা দূর করার জন্য জাভা দল প্রচুর কাজ করেছে particular বিশেষত, java.util সংগ্রহগুলিতে পরিবর্তনগুলি খুব দ্রুত প্রবাহিত ক্রিয়াকলাপে শৃঙ্খলাবদ্ধকরণের দুর্দান্ত কাজ করে। সংগ্রহের ক্ষেত্রে তারা প্রথম শ্রেণির ফাংশন এবং কার্যকরী পদ্ধতি যুক্ত করে কতটা ভাল কাজ করে তা বিবেচনা করে কেন তারা স্থাবরীন সংগ্রহ বা এমনকি অপরিবর্তনীয় সংগ্রহ ইন্টারফেস সরবরাহ করতে পুরোপুরি ব্যর্থ হয়েছে?
কোনও বিদ্যমান কোড পরিবর্তন না করে, জাভা দলটি যে কোনও সময় পরিবর্তনযোগ্য ইন্টারফেসগুলি যোগ করতে পারে যা পরিবর্তনীয়গুলির মতো একই, "সেট" পদ্ধতিগুলি বিয়োগ করে এবং বিদ্যমান ইন্টারফেসগুলি এগুলি থেকে প্রসারিত করতে পারে:
ImmutableIterable
____________/ |
/ |
Iterable ImmutableCollection
| _______/ / \ \___________
| / / \ \
Collection ImmutableList ImmutableSet ImmutableMap ...
\ \ \_________|______________|__________ |
\ \___________|____________ | \ |
\___________ | \ | \ |
List Set Map ...
অবশ্যই, তালিকা.এডিডি () এবং ম্যাপ.পুট () এর মতো ক্রিয়াকলাপগুলি বর্তমানে অপারেশন সফল হয়েছে বা ব্যর্থ হয়েছে কিনা তা নির্দেশ করার জন্য প্রদত্ত কীটির জন্য একটি বুলিয়ান বা পূর্ববর্তী মান প্রদান করে। অপ্রয়োজনীয় সংগ্রহগুলিকে কারখানার মতো পদ্ধতিগুলির চিকিত্সা করতে হবে এবং যুক্ত উপাদানযুক্ত একটি নতুন সংগ্রহ ফিরিয়ে দিতে হবে - যা বর্তমান স্বাক্ষরের সাথে অসঙ্গত। তবে এটি ইমট্যুটেবললিস্ট.অপেন্ড () বা। অ্যাডএটিএটি () এবং ইমিউটেবলম্যাপ.পুটএন্ট্রি () এর মতো আলাদা পদ্ধতির নাম ব্যবহার করে কাজ করা যায়। অপরিবর্তনীয় সংগ্রহের সাথে কাজ করার সুবিধাগুলি দ্বারা ফলস্বরূপ ভার্বোসটি বেশি বেড়ে যায় এবং টাইপ সিস্টেমটি ভুল পদ্ধতিতে কল করার ত্রুটিগুলি রোধ করে। সময়ের সাথে সাথে, পুরানো পদ্ধতিগুলি হ্রাস করা যেতে পারে।
অপরিবর্তনীয় সংগ্রহের জয়:
- সরলতা - অন্তর্নিহিত ডেটা পরিবর্তন না হলে কোড সম্পর্কে যুক্তি সহজ হয় is
- ডকুমেন্টেশন - যদি কোনও পদ্ধতি একটি অপরিবর্তনীয় সংগ্রহ ইন্টারফেস নেয়, আপনি জানেন যে এটি সংগ্রহটি সংশোধন করবে না। যদি কোনও পদ্ধতি অপরিবর্তনীয় সংগ্রহ ফিরিয়ে দেয় তবে আপনি জানেন যে আপনি এটি সংশোধন করতে পারবেন না।
- সংমেয় - অপরিবর্তনীয় সংগ্রহগুলি থ্রেডগুলি জুড়ে নিরাপদে ভাগ করা যায়।
যেহেতু কেউ এমন ভাষা স্বাদ গ্রহণ করেছে যা অনির্বচনীয়তা ধরে নিয়েছে, প্রচন্ড উত্তেজনার ওয়াইল্ড ওয়েস্টে ফিরে যাওয়া খুব কঠিন। ক্লোজারের সংগ্রহগুলি (ক্রম বিমূর্তি) ইতিমধ্যে জাভা 8 সংগ্রহগুলি সরবরাহ করে এমন সমস্ত কিছু রয়েছে, সাথে সাথে অপরিবর্তনীয়তা (যদিও স্রোতের পরিবর্তে সংযোগযুক্ত লিঙ্ক-তালিকার কারণে অতিরিক্ত মেমরি এবং সময় ব্যবহার করা যেতে পারে)। অপারেশনগুলির পুরো সেট সহ স্কালার দুটি পরিবর্তনীয় এবং অপরিবর্তনীয় সংগ্রহ রয়েছে, এবং যদিও এই অপারেশনগুলি আগ্রহী, .iterator কল করে একটি অলস দৃষ্টিভঙ্গি দেয় (এবং অলসভাবে তাদের মূল্যায়নের অন্যান্য উপায়ও রয়েছে)। আমি দেখতে পাচ্ছি না জাভা কীভাবে অপরিবর্তনীয় সংগ্রহ ছাড়াই প্রতিযোগিতা চালিয়ে যেতে পারে।
কেউ আমাকে এই সম্পর্কে ইতিহাস বা আলোচনার দিকে নির্দেশ করতে পারে? অবশ্যই এটি কোথাও সর্বজনীন।
const
সংগ্রহ রয়েছে
Collections.unmodifiable*()
জন্য রক্ষণাত্মক অনুলিপি এবং সেগুলি। তবে তারা যখন তা না হয় তখন এগুলিকে অপরিবর্তনীয় হিসাবে গণ্য করবেন না
ImmutableList
সেই চিত্রটিতে লাগে তবে লোকেরা পরিবর্তন করতে পারে List
? না এটি এলএসপির খুব খারাপ লঙ্ঘন।