আপনি কীভাবে যুক্তিটি জানেন যে প্রয়োজন হতে পারে বা প্রয়োজন হয় না এমন ক্ষেত্রে argumentচ্ছিককে কোনও পদ্ধতি যুক্তি হিসাবে ব্যবহার না করার কোনও কারণ আছে?


11

জাভা 8 এর সাথে আমি অপশন / ptionচ্ছিক ব্যবহার সম্পর্কে আরও এবং আরও নিবন্ধগুলি দেখেছি। আমি বুঝতে পারছি তারা কী প্রতিনিধিত্ব করতে চাইছে এবং আমি দেখি যে তাদের অনেকগুলি ফলাফল হিসাবে ব্যবহৃত হচ্ছে। তবে আমি যা দেখছি না সেগুলি ডিফল্ট / alচ্ছিক পরামিতিগুলির বাক্য গঠন নয় এমন ভাষাগুলিতে পদ্ধতি / ফাংশন আর্গুমেন্ট হিসাবে ব্যবহৃত হচ্ছে।

Optionalআপনি কি জানেন যে যুক্তি এমন কিছু যা প্রয়োজন হতে পারে বা প্রয়োজন হয় না সেই ক্ষেত্রে কোনও পদ্ধতি যুক্তি হিসাবে ব্যবহার না করার কোনও কারণ আছে কি ? এখানে আমি উদাহরণ বিবেচনা করতে পারি:

Optional<Customer> lookupCustomer(String firstName, Optional<String> middleName, String lastName)

এটি হাস্কেল-এ তাদের জন্য একটি সাধারণ ব্যবহার, যার ডিফল্ট যুক্তিও নেই (ব্যথার বেদনা)।
ড্যানিয়েল গ্রেটজার

সম্পর্কিত স্ট্যাক ওভারফ্লো প্রশ্নের আমার উত্তর দেখুন । সংক্ষেপে, Optionalরিটার্ন মান যে অনুপস্থিত হতে পারে জন্য প্রাথমিকভাবে উদ্দেশ্যে। অন্যান্য ব্যবহারগুলি অবশ্যই সম্ভব, তবে এটি জটিল এবং সম্ভবত খুব খারাপ স্টাইল।
স্টুয়ার্ট মার্কস

উত্তর:


6

এর একটি কারন হল যে ধারণার দিক থেকে, firstName, middleName, এবং lastNameকথাটি দ্বারা এক যুক্তি, না তিন। এগুলি একটি বৃহত সামগ্রীর সমস্ত অংশ, এবং কেউ কল্পনা করতে পারে যে তারা প্রায় সর্বদা একসাথে পাস করেছে। কার্যকরী ভাষায় এগুলি সম্ভবত টিউপল বা রেকর্ড হিসাবে পাস হবে; জাভা এগুলির অভাব রয়েছে, সুতরাং তারা সম্ভবত একটি নাম শ্রেণিতে একত্রিত হবে। মনে রাখবেন যে আপনার যদি পুরো নামগুলি গ্রহণ এবং ফেরত ফাংশনগুলি রচনার প্রয়োজন হয় তবে আপনি সেগুলি একত্রিত না করেই সক্ষম হবেন না - সর্বোপরি আপনি কেবল একটি মান দিতে পারেন।

সম্ভবত এটি খুব বেশি সময় আসে না যে কোনও মান alচ্ছিক এবং কোনও বৃহত পুরোটির অংশ না। যদি ফাংশনটির কাজটি করার জন্য একটি নির্দিষ্ট মান প্রয়োজন হয়, তবে সেই ফাংশনটি কোনও গ্রহণ করা উচিত নয় Optional। আপনার যদি চেইন অপারেশনগুলির দরকার হয় যা কোনও মান ফিরিয়ে না Nothingদেয়, পথে কোনও ক্রিয়াকলাপ ব্যর্থ হয় তবে তাকে বাতিল করে দিতে পারেন, আপনি কল করতে flatMapপারেন, এবং যদি আপনি ব্যতিক্রম করতে চান তবে আপনি যে get()কোনও ধাপে বা পথে ব্যবহার করতে পারেন চেইনের শেষ

যদি মানটি সত্যই alচ্ছিক হয় এবং একটি উপস্থিতি বা অনুপস্থিতির ভিত্তিতে একটি ফাংশন দুটি পৃথক কাজ করে তবে ফাংশনটি দুটি ছোট ফাংশনের একটি মোড়ক না হয়ে থাকে যা প্রতিটি কাজ করে এবং সিদ্ধান্তগুলির সেই বিশেষ সংমিশ্রণটি খুব সাধারণ।

তুলনামূলকভাবে অস্বাভাবিক ব্যবহারের ক্ষেত্রে এটি এতটা ভুল বলে আমি মনে করি না om


5

এমন অনেকগুলি ভাষা নেই যা ডিফল্ট যুক্তিগুলিকে সমর্থন করে না, সুতরাং এটি সাধারণ ব্যবহার নয় not আমি ব্যক্তিগতভাবে ভাবি যে আপনার ব্যবহারটি ভয়ানক নয়, তবে এটি জাভা হিসাবে চলবে না। জাভা খুব ইচ্ছাকৃতভাবে অতিরিক্ত লোডিং ব্যবহারের জন্য বাধ্যতামূলকভাবে ডিফল্ট আর্গুমেন্ট নেই, যা ifফাংশনের ভিতরে বিবৃতি প্রয়োজনের পরিবর্তে আপনার যুক্তিগুলি পরীক্ষা করার সংকলকটির সুবিধা রয়েছে ।

অন্য কথায়, আপনি ক্যোয়ারির দুটি পৃথক সংস্করণ তৈরি করতে যাচ্ছেন: একটি মধ্যম নাম এবং একটি ছাড়া। যদি আপনি এটি সংক্ষিপ্ত উপায়ে করতে পারেন তবে একটি বিকল্প ব্যবহার করা ভাল ধারণা। যদি এটি যথেষ্ট পরিমাণে থাকে যে আপনি যেভাবেই এটি দুটি পৃথক ফাংশনটিতে দেখতে চান তবে আপনি ওভারলোডিংটিও ব্যবহার করতে পারেন এবং এটি মূর্তিযুক্ত করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.