আমি মনে করি না যে এটির জন্য একটি ভাষা-অজ্ঞাত উত্তর রয়েছে যেহেতু "সম্পত্তি" যা একটি ভাষা-নির্দিষ্ট প্রশ্ন এবং একটি "সম্পত্তি" এর কলকারী কী প্রত্যাশা করে তা একটি ভাষা-নির্দিষ্ট প্রশ্ন। আমি মনে করি এটির কল্পনা করার সবচেয়ে কার্যকরী উপায় হ'ল কলারের দৃষ্টিকোণ থেকে এটি কেমন দেখাচ্ছে about
সি # তে, বৈশিষ্ট্যগুলি স্বতন্ত্র যে সেগুলি (প্রচলিত) মূলধনযুক্ত (পদ্ধতিগুলির মতো) তবে বন্ধনীগুলির অভাব রয়েছে (পাবলিক ইনস্ট্যান্স ভেরিয়েবলগুলির মতো)। আপনি যদি নীচের কোডটি, অনুপস্থিত ডকুমেন্টেশনগুলি দেখেন তবে আপনি কী আশা করবেন?
var reciprocalHeading = myHeading.Reciprocal;
আপেক্ষিক সি # নবাগত হিসাবে, তবে যারা মাইক্রোসফ্টের সম্পত্তি ব্যবহারের গাইডলাইন পড়েছেন , আমি Reciprocalঅন্যান্য বিষয়গুলির মধ্যেও আশা করব :
Headingক্লাসের একটি লজিকাল ডেটা সদস্য হতে
- কল করার জন্য সস্তা হোন, যেমন মানটি ক্যাশে করার দরকার নেই need
- পর্যবেক্ষণযোগ্য পার্শ্ব প্রতিক্রিয়া অভাব
- পর পর দুবার আহ্বান করা হলে একই ফলাফল উত্পন্ন করুন
- (হতে পারে) একটি
ReciprocalChangedইভেন্ট অফার
এই অনুমানগুলির মধ্যে, (3) এবং (4) সম্ভবত সঠিক (ধরে Headingনেওয়া একটি অপরিবর্তনীয় মানের ধরণ, যেমন ইওয়ানের উত্তরে ), (1) বিতর্কযোগ্য, (2) অজানা তবে বিতর্কযোগ্য এবং (5) এর সম্ভাবনা কম অর্থবোধ তৈরি করুন (যদিও শিরোনামের যা কিছু আছে সম্ভবত একটি HeadingChangedইভেন্ট হওয়া উচিত )। এটি আমার কাছে পরামর্শ দেয় যে কোনও সি # এপিআইতে, "পারস্পরিক প্রতিদান গ্রহণ করুন বা গণনা করুন" সম্পত্তি হিসাবে প্রয়োগ করা উচিত নয় , বিশেষত যদি গণনার সস্তা এবং Headingঅপরিবর্তনীয় হয় তবে এটি একটি সীমান্তরেখার ক্ষেত্রে।
(দ্রষ্টব্য, যদিও এই উদ্বেগের কোনওটিই সম্পত্তি কল করা একটি নতুন উদাহরণ তৈরি করে কিনা তা নিয়ে কোনও সম্পর্ক নেই , এমনকি এটিও নয় (২)। সিএলআরতে এবং নিজেই অবজেক্ট তৈরি করা বেশ সস্তা))
জাভাতে, বৈশিষ্ট্যগুলি একটি পদ্ধতি নামকরণ কনভেনশন। যদি দেখি
Heading reciprocalHeading = myHeading.getReciprocal();
আমার প্রত্যাশাগুলি উপরেরগুলির মতো (যদি কম স্পষ্টভাবে সেট করা থাকে): আমি কলটি সস্তা, আদর্শবান এবং পার্শ্ব প্রতিক্রিয়াগুলির অভাবের প্রত্যাশা করব। যাইহোক, জাভাবীনের কাঠামোর বাইরে একটি "সম্পত্তি" ধারণাটি জাভাতে সমস্ত অর্থবহ নয় এবং বিশেষত যখন কোনও অপরিবর্তনীয় সম্পত্তি বিবেচনা না করে setReciprocal(), getXXX()কনভেনশনটি এখন কিছুটা পুরানো ed কার্যকর জাভা থেকে , দ্বিতীয় সংস্করণ (ইতিমধ্যে এখন আট বছরের বেশি পুরানো):
যে booleanপদার্থে তারা অনুরোধ করা হয় তার কোনও অ- কার্যকারিতা বা বৈশিষ্ট্য ফিরে আসে এমন পদ্ধতিগুলির নাম সাধারণত একটি বিশেষ্য, বিশেষ্য বাক্যাংশ, বা ক্রিয়া দিয়ে শুরু হওয়া একটি ক্রিয়া বাক্যাংশ দিয়ে নামকরণ করা হয় get…। এখানে একটি সোচ্চার দল রয়েছে যা দাবি করে যে কেবল তৃতীয় ফর্মটি (শুরু দিয়ে get) গ্রহণযোগ্য, তবে এই দাবির সামান্য ভিত্তি রয়েছে। প্রথম দুটি ফর্ম সাধারণত আরও পঠনযোগ্য কোডে পৌঁছায় ... (পৃষ্ঠা 239)
একটি সমসাময়িক, আরও সাবলীল এপিআই, এরপরে, আমি দেখতে আশা করব
Heading reciprocalHeading = myHeading.reciprocal();
- যা আবার পরামর্শ দেয় যে কলটি সস্তা, আদর্শবান এবং পার্শ্ব প্রতিক্রিয়াগুলির অভাব রয়েছে, তবে নতুন গণনা সম্পাদন করা হয়েছে বা একটি নতুন অবজেক্ট তৈরি হয়েছে কিনা সে সম্পর্কে কিছুই বলবে না। ্রফ; একটি ভাল এপিআই, আমার যত্ন নেওয়া উচিত নয়।
রুবিতে সম্পত্তি হিসাবে কিছুই নেই। সেখানে "বৈশিষ্ট্য" রয়েছে, তবে যদি আমি দেখি
reciprocalHeading = my_heading.reciprocal
আমি কোনও সাধারণ অ্যাক্সেসর পদ্ধতির @reciprocalমাধ্যমে আমি উদাহরণের পরিবর্তনশীল অ্যাক্সেস করছি কিনা তা জানার কোনও তাত্ক্ষণিক উপায় নেই attr_readerবা আমি কোনও পদ্ধতিতে কল দিচ্ছি যা ব্যয়বহুল গণনা সম্পাদন করে। পদ্ধতিটির নামটি একটি সাধারণ বিশেষ্য, যদিও এটি বলার পরিবর্তে calcReciprocalআবারও পরামর্শ দেয় যে কলটি কমপক্ষে সস্তা এবং সম্ভবত এর কোনও পার্শ্ব প্রতিক্রিয়া নেই।
স্কালায় নামকরণের কনভেনশনটি হল যে পার্শ্ব প্রতিক্রিয়াযুক্ত পদ্ধতিগুলি প্যারেন্থিসিস গ্রহণ করে এবং সেগুলি ছাড়া পদ্ধতিগুলি নেয় না, তবে
val reciprocal = heading.reciprocal
যে কোনও হতে পারে:
// immutable public value initialized at creation time
val reciprocal: Heading = …
// immutable public value initialized on first use
lazy val reciprocal: Heading = …
// public method, probably recalculating on each invocation
def reciprocal: Heading = …
// as above, with parentheses that, by convention, the caller
// should only omit if they know the method has no side effects
def reciprocal(): Heading = …
(দ্রষ্টব্য যে স্কেল স্টাইল গাইড দ্বারা নিরুৎসাহিত বিভিন্ন জিনিসকে মঞ্জুরি দেয় Sc এটি স্কালাকে নিয়ে আমার অন্যতম প্রধান বিরক্তি))
প্রথম বন্ধনীর অভাব আমাকে বলে যে কলটির পার্শ্ব প্রতিক্রিয়া নেই; নামটি আবারও পরামর্শ দেয় যে কলটি তুলনামূলকভাবে সস্তা হওয়া উচিত। এর বাইরে, আমি কীভাবে এটির মূল্য পাই তা আমি চিন্তা করি না ।
সংক্ষেপে: আপনি যে ভাষাটি ব্যবহার করছেন তা জানুন এবং অন্যান্য প্রোগ্রামাররা আপনার এপিআইতে কী প্রত্যাশা নিয়ে আসবে তা জানুন। অন্য সব কিছুই একটি বাস্তবায়নের বিশদ।
Headingঅপরিবর্তনীয় ধরণ হিসাবে থাকা এবংreciprocalনতুন ফিরিয়ে দেওয়াHeading"সাফল্যের গর্ত" ভাল অনুশীলন। (দুটি কলের সাথে সতর্কতার সাথেreciprocal"একই জিনিস" ফেরত দেওয়া উচিত, অর্থাত তাদের সমতা পরীক্ষা পাস করা উচিত))