পদ্ধতির উল্লেখগুলি কি ল্যাম্বদা মোড়কের ওভারহেড এড়িয়ে যায়? তারা ভবিষ্যতে হতে পারে?
মতে পদ্ধতি রেফারেন্স জাভা টিউটোরিয়াল :
কখনও কখনও ... একটি ল্যাম্বডা এক্সপ্রেশন একটি বিদ্যমান পদ্ধতি কল ছাড়া কিছুই করে না। এই ক্ষেত্রে, নাম দ্বারা বিদ্যমান পদ্ধতিটি উল্লেখ করা প্রায়শই পরিষ্কার হয়। পদ্ধতির উল্লেখগুলি আপনাকে এটি করতে সক্ষম করে; তারা ইতিমধ্যে একটি নাম আছে এমন পদ্ধতিগুলির জন্য কমপ্যাক্ট, সহজেই পঠনযোগ্য লাম্বদা এক্সপ্রেশন।
আমি বেশ কয়েকটি কারণে পদ্ধতির রেফারেন্স সিনট্যাক্সের চেয়ে ল্যাম্বডা সিনট্যাক্সটিকে পছন্দ করি:
লাম্বদাস পরিষ্কার হয়
ওরাকলের দাবী সত্ত্বেও, লাম্বডা সিনট্যাক্সটি অবজেক্ট মেথড রেফারেন্স শর্ট-হ্যান্ডের চেয়ে সহজ-পঠনযোগ্য বলে মনে করি কারণ পদ্ধতির রেফারেন্স সিনট্যাক্সটি দ্ব্যর্থক:
Bar::foo
আপনি কি এক্স এর ক্লাসে একটি স্ট্যাটিক ওয়ান-আর্গুমেন্ট পদ্ধতি কল করছেন এবং এটি এক্স দিয়ে যাচ্ছেন?
x -> Bar.foo(x)
বা আপনি কি একটি শূন্য-আর্গুমেন্ট উদাহরণ পদ্ধতি কল করছেন?
x -> x.foo()
পদ্ধতি রেফারেন্স সিনট্যাক্স একটির জন্য দাঁড়িয়ে থাকতে পারে। এটি আপনার কোডটি আসলে কী করছে তা লুকিয়ে রাখে।
লাম্বদাস নিরাপদ
আপনি যদি বার :: foo কে ক্লাস পদ্ধতি হিসাবে উল্লেখ করেন এবং বার পরে একই নামের একটি উদাহরণ পদ্ধতি (বা তদ্বিপরীত) যোগ করে, আপনার কোড আর সংকলন করবে না।
আপনি ধারাবাহিকভাবে ল্যাম্বডাস ব্যবহার করতে পারেন
আপনি কোনও ল্যাম্বডায় কোনও ফাংশন মোড়ানো করতে পারেন - যাতে আপনি সর্বত্র সর্বত্র একই সিনট্যাক্সটি ধারাবাহিকভাবে ব্যবহার করতে পারেন। পদ্ধতি রেফারেন্স সিনট্যাক্স সেই পদ্ধতিগুলিতে কাজ করবে না যেগুলি আদিম অ্যারেগুলি গ্রহণ করে বা ফিরিয়ে দেয়, পরীক্ষিত ব্যতিক্রম ছুঁড়ে ফেলেছে বা একই পদ্ধতির নাম যেমন উদাহরণ হিসাবে এবং স্ট্যাটিক পদ্ধতি হিসাবে ব্যবহৃত হয় (কারণ পদ্ধতিটির রেফারেন্স সিনট্যাক্সটি কোন পদ্ধতিটি বলা হবে সে সম্পর্কে অস্পষ্ট) । আপনার যদি একই সংখ্যার তর্ক যুক্তি দিয়ে ওভারলোড করা পদ্ধতি থাকে তখন তারা কাজ করে না, তবে আপনাকে যেভাবেই করা উচিত নয় (জোশ ব্লচের আইটেমটি দেখুন 41) সুতরাং আমরা পদ্ধতির উল্লেখগুলির বিপরীতে এটি ধরে রাখতে পারি না।
উপসংহার
যদি এটি করার জন্য কোনও পারফরম্যান্স জরিমানা না থাকে তবে আমি আমার আইডিইতে সতর্কতাটি বন্ধ করতে এবং লম্বা সিনট্যাক্সটি আমার কোডটিতে মাঝে মধ্যে পদ্ধতি রেফারেন্সটি ছড়িয়ে না দিয়ে ধারাবাহিকভাবে ব্যবহার করতে প্ররোচিত হই।
দ্রষ্টব্য
এখানে বা সেখানেই নয়, তবে আমার স্বপ্নে অবজেক্ট পদ্ধতির উল্লেখগুলি আরও দেখতে দেখতে এবং ল্যাম্বডা মোড়ক ছাড়াই সরাসরি অবজেক্টে পদ্ধতির বিপরীতে ডাকে ডাইনামিক প্রয়োগ করে:
_.foo()
.map(_.acceptValue())
: যদি আমার ভুল না হয় তবে এটি দেখতে অনেকটা স্কাল সিনট্যাক্সের মতো। হতে পারে আপনি কেবল ভুল ভাষা ব্যবহার করার চেষ্টা করছেন।
System.out::println
করার forEach()
সব সময় ...?