জাভা 8 ফাংশনাল ইন্টারফেসের ধারণা যুক্ত করেছে , পাশাপাশি কার্যকরী ইন্টারফেস গ্রহণের জন্য ডিজাইন করা অসংখ্য নতুন পদ্ধতি। এই ইন্টারফেসগুলির উদাহরণগুলি পদ্ধতি রেফারেন্স এক্সপ্রেশন (উদাঃ SomeClass::someMethod
) এবং ল্যাম্বডা এক্সপ্রেশন (উদাঃ (x, y) -> x + y
) ব্যবহার করে সংক্ষিপ্তভাবে তৈরি করা যেতে পারে ।
কোনও ফর্ম বা অন্যটি কখন ব্যবহার করা ভাল is সে সম্পর্কে আমার সহকর্মী এবং আমার মধ্যে ভিন্ন মতামত রয়েছে (যেখানে এই ক্ষেত্রে "সেরা" সত্যিই "সর্বাধিক পঠনযোগ্য" এবং "বেশিরভাগ মানক অনুশীলনের সাথে মিল রেখে" উত্সাহিত হয়) কারণ তারা অন্যথায় মূলত সমতুল্য). বিশেষত, এর মধ্যে নিম্নলিখিত বিষয়গুলি সত্য যেখানে ক্ষেত্রে জড়িত:
- প্রশ্নের মধ্যে থাকা ফাংশনটি একক সুযোগের বাইরে ব্যবহার করা হয় না
- উদাহরণটি একটি নাম দেওয়া পাঠযোগ্যতা সহায়তা করে (উদাহরণস্বরূপ লজিক এক নজরে কী ঘটছে তা দেখার পক্ষে যথেষ্ট সহজ)
- একটি ফর্ম অন্যটির চেয়ে পছন্দনীয় হওয়ার জন্য অন্যান্য প্রোগ্রামিং কারণ নেই।
বিষয়টি সম্পর্কে আমার বর্তমান মতামতটি হল যে একটি ব্যক্তিগত পদ্ধতি যুক্ত করা এবং পদ্ধতি অনুসারে উল্লেখ করা আরও ভাল পদ্ধতির। বৈশিষ্ট্যটি ব্যবহার করার জন্য এটি তৈরি করা হয়েছিল বলে মনে হয় এবং পদ্ধতি নাম এবং স্বাক্ষরের মাধ্যমে যা চলছে তা যোগাযোগ করা সহজ বলে মনে হয় (উদাহরণস্বরূপ "বুলিয়ান ই রিসাল্টআইএনফিউচার (ফলাফল ফলাফল)" স্পষ্টভাবে বলছে যে এটি বুলিয়ান ফিরে আসছে)। ভবিষ্যতে শ্রেণিতে বর্ধিতকরণ একই চেকটি ব্যবহার করতে চাইলে এটি ব্যক্তিগত পদ্ধতিটিকেও পুনরায় ব্যবহারযোগ্য করে তোলে, তবে কার্যকরী ইন্টারফেসের মোড়কের দরকার নেই।
আমার সহকর্মীর পছন্দেরটি এমন একটি পদ্ধতি থাকা উচিত যা ইন্টারফেসের উদাহরণটি ফেরত দেয় (উদাঃ "ভবিষ্যদ্বাণী ফলাফল-ভবিষ্যত ()")। আমার কাছে এটি অনুভব করে যে বৈশিষ্ট্যটি কীভাবে ব্যবহারের উদ্দেশ্যে করা হয়েছিল ঠিক তা নয়, কিছুটা ক্লঙ্কিয়ার অনুভূত হয় এবং মনে হয় নামকরণের মাধ্যমে অভিপ্রায়টি সত্যই যোগাযোগ করা শক্ত er
এই উদাহরণটি কংক্রিট করতে, এখানে একই কোডটি, বিভিন্ন স্টাইলে লিখিত:
public class ResultProcessor {
public void doSomethingImportant(List<Result> results) {
results.filter(this::isResultInFuture).forEach({ result ->
// Do something important with each future result line
});
}
private boolean isResultInFuture(Result result) {
someOtherService.getResultDateFromDatabase(result).after(new Date());
}
}
বনাম
public class ResultProcessor {
public void doSomethingImportant(List<Result> results) {
results.filter(resultInFuture()).forEach({ result ->
// Do something important with each future result line
});
}
private Predicate<Result> resultInFuture() {
return result -> someOtherService.getResultDateFromDatabase(result).after(new Date());
}
}
বনাম
public class ResultProcessor {
public void doSomethingImportant(List<Result> results) {
Predicate<Result> resultInFuture = result -> someOtherService.getResultDateFromDatabase(result).after(new Date());
results.filter(resultInFuture).forEach({ result ->
// Do something important with each future result line
});
}
}
ভাষা পদ্ধতির ডিজাইনারদের অভিযানের সাথে আরও বেশি প্রাধান্য দেওয়া হয়েছে কি না, তার চেয়ে বেশি কোনও অফিসিয়াল বা অর্ধ-অফিসিয়াল ডকুমেন্টেশন বা মন্তব্য রয়েছে কি না? একটি সরকারী উত্স ব্যতীত, কোনও আরও ভাল পদ্ধতির কেন এমন কোনও স্পষ্ট কারণ রয়েছে?
Object::toString
)। সুতরাং আমার প্রশ্নটি এখানে এই নির্দিষ্ট ধরণের উদাহরণের চেয়ে ভাল যেখানে আমি এখানে রাখছি তার চেয়ে আরও ভাল যেখানে এইরকম উদাহরণ রয়েছে যেখানে একটির চেয়ে অপরটির চেয়ে ভাল, বা বিপরীতে exist