এটিকে সহজভাবে বলতে গেলে, বিধিনিষেধের অর্থ জিনিসগুলিকে একত্রে রাখার জন্য আরও কম সঠিক উপায় রয়েছে এবং প্রথম শ্রেণির ক্রিয়াকলাপগুলি লুপ স্ট্রাকচারের মতো জিনিসগুলি তৈরি করা সহজ করে তোলে। এই উত্তরটি থেকে লুপটি নিন , উদাহরণস্বরূপ:
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
String string = iterator.next();
if (string.isEmpty()) {
iterator.remove();
}
}
জাভাতে এটি অন্যতম নিরাপদ আবশ্যক উপায় যখন আপনি যখন এটির মাধ্যমে পুনরাবৃত্তি করছিলেন তখন কোনও সংগ্রহ থেকে কোনও উপাদান সরান। অনেকগুলি উপায় রয়েছে যা দেখতে খুব কাছাকাছি দেখায় তবে ভুল। এই পদ্ধতি সম্পর্কে অজানা লোকেরা সমস্যাটি এড়াতে কখনও কখনও সংশ্লেষযুক্ত উপায়গুলির মধ্য দিয়ে যায়, পরিবর্তে অনুলিপিটির মাধ্যমে পুনরাবৃত্তি করার মতো।
এই জেনেরিকটি তৈরি করা মারাত্মকভাবে কঠিন নয়, সুতরাং এটি কেবল সংগ্রহের চেয়ে বেশি কাজ করবে Strings, তবে প্রথম শ্রেণির ফাংশন ব্যতীত আপনি প্রাকটিকটি (অভ্যন্তরের শর্তটি if) প্রতিস্থাপন করতে পারবেন না , সুতরাং এই কোডটি অনুলিপি করা এবং আটকানো হবে s এবং সামান্য পরিবর্তিত।
প্রথম শ্রেণীর ফাংশনগুলিকে একত্রিত করুন যা আপনাকে প্যারামিটার হিসাবে প্রিডিকেট পাস করার ক্ষমতা দেয়, অপরিবর্তনীয়তা সীমাবদ্ধতার সাথে এটি যদি আপনি না করেন তবে এটি খুব বিরক্তিকর করে তোলে এবং আপনি filterএই স্কেল কোডের মতো সাধারণ বিল্ডিং ব্লকগুলির সাথে উপস্থিত হন like এটি একই কাজ করে:
list filter (!_.isEmpty)
এখন স্ক্যালার ক্ষেত্রে সংকলন করার সময় টাইপ সিস্টেমটি আপনার জন্য কী পরীক্ষা করে তা ভেবে দেখুন, তবে এই চেকগুলি প্রথমবার আপনি এটি চালনার সময় গতিশীল টাইপ সিস্টেমগুলি দ্বারা সম্পন্ন করা হয়:
listfilterপদ্ধতিটি যেমন কোনও সংকলনকে সমর্থন করে এমন কোনও ধরণের হতে হবে ।
- উপাদানগুলির
listঅবশ্যই একটি isEmptyপদ্ধতি থাকতে হবে যা বুলিয়ান দেয়।
- আউটপুট একই ধরণের উপাদানগুলির সাথে একটি (সম্ভাব্য) ছোট সংগ্রহ হবে।
একবার এই জিনিসগুলি যাচাই করা হয়ে গেলে, প্রোগ্রামারটিকে স্ক্রু আপ করার জন্য আর কোন উপায় ছেড়ে যায়? আমি দুর্ঘটনাক্রমে ভুলে গেছি !, যা একটি অত্যন্ত সুস্পষ্ট পরীক্ষার কেস ব্যর্থতার কারণ হয়েছিল। এটি তৈরির জন্য কেবলমাত্র একমাত্র ভুল উপলভ্য এবং আমি কেবল এটি তৈরি করেছি কারণ আমি বিপরীত অবস্থার জন্য পরীক্ষিত কোড থেকে সরাসরি অনুবাদ করছি।
এই প্যাটার্নটি বারবার পুনরাবৃত্তি হয়। প্রথম শ্রেণীর ক্রিয়াকলাপগুলি আপনাকে সুনির্দিষ্ট শব্দার্থবিজ্ঞান সহ ছোট ছোট পুনরায় ব্যবহারযোগ্য ইউটিলিটিগুলিতে জিনিসগুলি রিফ্যাক্টর করতে দেয়, অপরিবর্তনীয়তার মতো সীমাবদ্ধতা আপনাকে এটি করার প্রেরণা দেয় এবং those ইউটিলিটিগুলির পরামিতিগুলি পরীক্ষা করে টাইপ করার জন্য এগুলি কমিয়ে দেয়।
অবশ্যই, এটি সমস্ত প্রোগ্রামারের উপর নির্ভরশীল যে জেনে রেখেছি যে সরলকরণের ফাংশনটি filterইতিমধ্যে বিদ্যমান, এবং এটি সন্ধানে সক্ষম হচ্ছেন, বা নিজেকে তৈরি করার সুবিধাটি স্বীকৃতি দিয়েছেন। কেবলমাত্র লেজ পুনরাবৃত্তি ব্যবহার করে এটিকে নিজেই সর্বত্র প্রয়োগ করার চেষ্টা করুন এবং আপনি ঠিক অতীতের সংস্করণ হিসাবে একই জটিলতায় নৌকায় ফিরে এসেছেন, আরও খারাপ। আপনি এটিকে খুব সহজভাবে লিখতে পারেন বলে এর সহজ সংস্করণটি সুস্পষ্ট নয়।