ইন্টারফেস নামকরণ: উপসর্গ 'Can-' বনাম প্রত্যয় '-সক্ষম'


29

যেমন ইন্টারফেসের প্রত্যয় হিসাবে '-able' ব্যবহার করা সাধারণ

সিরিয়ালাইজযোগ্য মুদ্রণযোগ্য পরিমাপযোগ্য পানের যোগ্য শুটযোগ্য ঘূর্ণনযোগ্য able

আমি ভাবছিলাম যে 'ক্যান' আরও ভাল কারণ এটি আরও বর্ণনামূলক হতে পারে। হ্যাঁ, এটি আরও শব্দযুক্ত এবং এটি ইন্টারফেসের নামের সাথে শোনায়। বিশেষত, প্যাসিভ ক্রিয়াগুলি ব্যবহার করা যেতে পারে।

উদাহরণস্বরূপ শ্যুটেবলের অর্থ হ'ল বস্তুটি গুলি করতে সক্ষম হয়েছে (একটি বন্দুক এটি প্রয়োগ করতে পারে), বা এর অর্থ এটিতে গুলি করা যেতে পারে (একটি টার্গেট বোর্ড এটি কার্যকর করতে পারে)। 'ক্যান' উপসর্গটির সাথে পূর্বেরটি "ক্যানশুট" হবে এবং তারপরেরটি হবে "ক্যানবিশটআট" বা "ক্যানশুটআট"।

উদাহরণস্বরূপ 2 একটি দস্তাবেজ 'CanBePrinted' এবং একটি মুদ্রক 'ক্যানাপিন্ট'

বা, আমাদের কি '-সক্ষম' দিয়ে আটকে থাকা উচিত এবং ডকুমেন্টেশনটি প্রসঙ্গটি সরবরাহ করা উচিত?

কোন মতামত।


মানুষ, "-able" ব্যবহার করুন। সময়কাল।
তুলিনাস কর্ডোভা

2
উভয়ই ব্যবহার করুনclass Cannibal implements Can, Able {}
থমাস এডিং

উত্তর:


18

সম্ভবত আপনি কি সক্ষম চান?

নেট থেকে কিছু উদাহরণ

NetworkStream.Readable
NetworkStream.Writable
Stream.CanRead
Stream.CanWrite
Type.IsSerializable

সেখানে অভিন্ন মান আছে বলে মনে হচ্ছে না। যা ভাল পড়ে তা নিয়ে যান।

if (document.IsPrintable && printer.CanPrint) { printer.Print(document) }

সম্পাদনা: যেমনটি উল্লেখ করা হয়েছে, প্রশ্নটি ইন্টারফেস সম্পর্কিত ছিল, সম্পত্তি নয়।

সেক্ষেত্রে আমি ক্যান- নামে কোনও ইন্টারফেস খুঁজে পাচ্ছি না। ইন্টারফেস সর্বদা ব্যবহারযোগ্য to আমি এই পরিভাষা দিয়ে একমত। একটি পদ্ধতি প্যারামিটার হিসাবে একটি ISerializable objectবা IPrintable document। একটি ICanBeSerialized objectবা একটি জন্য জিজ্ঞাসা ICanBePrinted documentপড়া খুব বিশ্রী।

অন্যদিকে, প্রিন্টার, আমি কেবল ইন্টারফেসটি কল করার পরামর্শ দেব IPrinter। আপনার পদ্ধতি একটি জিজ্ঞাসা করা হবে IPrinter device

নীচে জোরে জোরে পদ্ধতি স্বাক্ষর পড়ুন। (ব্যক্তিগতভাবে আমি "আমি" উপসর্গটি নিরব বলে বিবেচনা করি)) এটি কী ভাল পড়ে? এটা ঠিক শোনাচ্ছে?

void PrintDocument(IPrinter device, IPrintable document)
{
    device.Print(document)
}

2
ডকুমেন্ট.আইসিন্টেবল ডকুমেন্টের চেয়ে ভাল an ক্যানবিপ্রিন্টেড। যতদূর আমি বলতে পারি তারা প্যাসিভ ভয়েস এড়ানোর জন্য ব্যবহারযোগ্য।
থানোস পাপাথানাসিউ

"প্রিন্ট করা যায়" "প্রিন্টযোগ্য" এর চেয়ে আরও উপযুক্ত ইংরাজির মতো মনে হয় English
ড্যানি ভারোড

1
"ক্রিয়াকলাপটির দিকে মনোনিবেশ করার সময় প্যাসিভ ভয়েস ব্যবহার করা হয় who তবে কে বা কী কাজটি করছে তা গুরুত্বপূর্ণ বা জানা যায়নি।" আমি কেবল অনুমান করতে পারি যে তারা পদক্ষেপের দিকে মনোনিবেশ করতে চেয়েছিল এবং ক্রিয়া নয়। সুতরাং যদি কোনও "Type.IsSerializable" ব্যতিক্রম ছুঁড়ে ফেলে, তবে এটি টাইপের দোষ। পদ্ধতিগুলি নয় তবে যদি কোনও "Type.CanBeSerialized" ব্যতিক্রম ছুঁড়ে ফেলেছে তবে আপনি পদ্ধতিটিকে দোষ দিন এবং প্রকারটি নয়। স্বীকৃত পার্থক্যটি সামান্য তবে এটি সেখানে।
থানোস পাপাথানসিয়াস

3
আমি দেখতে পাচ্ছি যে এটি গৃহীত উত্তর, তবে এটি ওপি-র প্রশ্নের উত্তর দেয় না। প্রদত্ত উদাহরণগুলি সম্পত্তির নাম। ওপি জন্য নামকরণ সম্মেলন চাইছে ইন্টারফেস যেমন নাম, ISerializable, IDataErrorInfo, এবং INotifyPropertyChanged
কেভিন ম্যাককর্মিক

@ কেভিন এমসিকর্মিক, ভালো পয়েন্ট! উপরে সম্পাদনা।
হ্যান্ড-ই-ফুড

23

ব্যাকরণগতভাবে বলতে গেলে, "ক্যানফুবার" হ'ল একটি শিকারী, যখন "ফুবারেবল" একটি বিশেষণ বা বিশেষ্য (সাধারণত একটি এপিআইয়ের প্রসঙ্গে একটি বিশেষ্য)।

সূক্ষ্ম পার্থক্যটিও লক্ষ করুন: -যোগ্যটি প্রয়োগ করা বিশেষ্যটির একটি নিষ্ক্রিয় ভূমিকা বোঝায়, অর্থাত্ যদি সামथিক কিছু ফুবারেবল হয় তবে তা অন্য কোনও কিছুর দ্বারা কল্পিত হতে পারে; বলতে পারে- একটি সক্রিয় ভূমিকা বোঝায়, এটি হ'ল যদি কিছু কিছু ফুবার করতে পারে তবে এটি অন্য কোনও কিছুকে ফুবার করতে পারে। অথবা, একটি ভিন্ন কোণ থেকে: যদি A বি কে ফুবার করতে পারে তবে A.canFoobar()এবং B is Foobarable

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

instance.canFoobar();

class Something implements Foobarable { ... }

7

ব্যক্তিগতভাবে আমি সক্ষম সংস্করণ সঙ্গে আটকাতে হবে। এখানে আমার কারণ: বেশিরভাগ (সমস্ত?) গ্রাফিকাল সম্পাদকরা আপনি টাইপ করেছেন তার উপর ভিত্তি করে সনাক্তকারীদের পরামর্শ দেয় suggest তাদের মধ্যে কিছু সনাক্তকারীদের মধ্যে অনুসন্ধান করার জন্য যথেষ্ট 'স্মার্ট' হলেও কিছু এখনও শনাক্তকারীদের সন্ধান শুরু করে।

টাইপিংয়ের গতি বাড়ানোর জন্য আপনি যতটা সম্ভব কী-স্ট্রোক সহ প্রস্তাবিত শনাক্তকারীদের তালিকাটি ছোট করতে চান। আরও শনাক্তকারীদের একই সূচনা হয়, যেমন 'আইসিএন-' আপনাকে আরও বেশি অক্ষর টাইপ করতে হবে।

আপনি যদি মনে করেন এটি আপনার ক্ষেত্রে সমস্যা না হয় তবে এটি দুর্দান্ত এবং আমি নামকরণের সম্মেলনটি বেছে নেওয়ার জন্য অন্যান্য মানদণ্ডগুলি ব্যবহার করার পরামর্শ দেব। কিছু ক্ষেত্রে, যেমন আমাদের দলে, আমরা শনাক্তকারীদের পছন্দ করি যা সম্ভব যতটা সম্ভব কাস্ট্রোকের পরে আলাদা হয়।

এ ছাড়াও আমি নামকরণের কনভেনশনটি ব্যবহার করার পরামর্শ দেব যা প্রকল্পে যারা কাজ করে তাদের জন্য আপনার কোডকে সবচেয়ে বোধগম্য করে তোলে। আপনার দলের মধ্যে একটি কথোপকথন আছে। এর মতো কোনও সঠিক বা ভুল নেই। স্রেফ কনভেনশনস যা কাজ করে এবং সম্মেলনগুলি যে কম কাজ করে work

ভুলে যাবেন না যে ভাল রিফ্যাক্টরিং সরঞ্জামগুলি আপনার পছন্দমতো জিনিসগুলির পুনরায় নামকরণের অনুমতি দেয়। সুতরাং বিভিন্ন পদ্ধতির সাথে পরীক্ষা করা সহজ।


1
+1 টি। আমার যুক্তি একই হবে, আইডিইতে অনুসন্ধান / সন্ধান / বাছাই করা সহজ করার জন্য নিয়ন্ত্রণকারী ক্রিয়াটি আগে রাখুন।
পাপ

1
ইন্টেলিজেন্স কেবল সেভাবেই কাজ করে না তবে হিউম্যান স্ক্যানিংয়ের পাঠ্যও রয়েছে, উপসর্গগুলি আপনার
কোডকে

7

স্পষ্টতই উপসর্গ এবং প্রত্যয়টি বিভিন্ন ধরণের ক্রিয়া বা পরিবর্তে, ক্রিয়াটির বিভিন্ন দিকের জন্য প্রায় সুস্পষ্ট পছন্দ ।

যদিও বর্তমান ব্যবহার এবং পছন্দগুলি অনেক কারণে অসঙ্গত হতে পারে।


ক্রিয়াটি বস্তুটি দ্বারা সম্পাদিত হয় : ক্যানশুট -> এটি ক্যানফ্লাই - (এটি) কিছু
অঙ্কুর করে -> এটি
ক্যানচেঞ্জ উড়ে যায় -> এটি পরিবর্তন করে

পদক্ষেপের উপর ক্রিয়া সম্পাদন করা হয়:
পাঠযোগ্য -> আপনি এটি
লিখিতভাবে পড়তে পারেন -> আপনি এটি
মুদ্রণযোগ্য (লিখতে পারেন) -> আপনি এটি মুদ্রণ করতে পারেন

যদিও এটি কোনও নিয়ম বা এমনকি অযৌক্তিকভাবে যৌক্তিক নাও হতে পারে তবে এটি কনভেনশন গ্রহণ এবং পরিবর্তনশীল নামকরণে ব্যবহারের ধারাবাহিকতা বজায় রাখতে সহায়তা করে।


4

আমি মনে করি আপনি সক্ষমতা এবং অনুমতি মধ্যে পার্থক্য করতে পারেন। যখন Serializableএবং CanSerializeবোঝানো হয়েছে যে কোনও কিছু সিরিয়ালায়িত হতে সক্ষম, তবে অনুমতি সংক্রান্ত সমস্যাগুলি (বা সম্ভবত ডিস্কের জায়গার অভাব) রয়েছে এবং আপনাকে বিবেচনা করার প্রয়োজন হতে পারে MaySerialize। জিনিসগুলি এ ছেড়ে যাওয়া এবং এর ~ableমধ্যে পার্থক্য করার প্রয়োজনকে সরিয়ে দেয় ।canmay


সিরিয়ালাইজেবলআইএফনটডিস্কফুলআল্ডআইএফনটপ্রেশনমিশন ... লোল :)
সর্বোচ্চ

2

ইন্টারফেসগুলি সাবক্লাসিং / বাস্তবায়ন করার সময় আমার মনে হয় যে থাম্বের নিয়মটি হ'ল আপনি "বি একটি এ" বলতে সক্ষম হবেন (যেখানে বি প্রয়োগ করে একটি)। এটি বলা ঠিক হবে না:

DocumentCanBePrinted

তবে এটি সঠিক বলে মনে হচ্ছে (বা কমপক্ষে আরও ভাল):

DocumentPrintable


2

আমি মনে করি যে ইন্টারফেসের নামগুলির জন্য ব্যাকরণ-ভিত্তিক এবং কনভেনশন-ওয়াইজ জাবেল উভয়ই ভাল, তবে আইএসএক্স, ক্যানএক্স, ডোনএক্স বৈশিষ্ট্যের নামের জন্য ভাল।

এমএসডিএন থেকে:

"একটি বুদ্ধিমান বাক্যাংশের সাথে বুলিয়ান বৈশিষ্ট্যগুলির নাম দিন (ক্যান্টসেকের পরিবর্তে ক্যানসেক) .চ্ছিকভাবে, আপনি বুলিয়ান বৈশিষ্ট্যগুলি ইস, ক্যান, বা হ্যাসের সাথে উপস্থাপন করতে পারেন তবে কেবল যেখানে এটির মান যুক্ত করে।" http://msdn.microsoft.com/en-us/library/ms229012.aspx


সহায়ক লিঙ্কের জন্য +1; জিনিসগুলির নাম কী রাখবেন তা আমি কখনই বুঝতে পারি না
ক্যামেলব্লিউজ

0

আমার মতে "-able" বৈকল্পিকটি আরও বেশি পঠনযোগ্য তবে আপনার প্রস্তাবিত "ক্যানডোসোমিংথিং" যা আরও অনেক উটের কুঁচকে চাপিয়ে দেয়।


1
এবং ক্যান- আরও একটি পদ্ধতির নাম
রাচেট ফ্রিক

সম্পত্তির নাম - এমএসডিএন দেখুন। একটি পদ্ধতির নামগুলি "ক্রিয়া বা ক্রিয়া বাক্যাংশ" হওয়া উচিত। তদ্ব্যতীত, একাধিক কুঁচকিতে কী দোষ?
ড্যানি ভারোড

0

স্কালায়, *Ableইন্টারফেসের Can*জন্য ব্যবহৃত হয় , তবে ধরণের শ্রেণি বিন্যাসের জন্য ব্যবহৃত হয়। মূলত, কিছু পদ্ধতি কল করতে সক্ষম হতে, নির্দিষ্ট ধরণের একটি অন্তর্নিহিত মান অবশ্যই সুযোগের মধ্যে উপস্থিত থাকতে পারে। এই ধরণের নামটি মাঝে মাঝে উপসর্গযুক্ত হয় Can


ক্যান * কোনও শ্রেণীর পক্ষে ভাল নাম নয়। এমএসডিএন থেকে উদ্ধৃতি: "পাস্কাল কেসিং ব্যবহার করে বিশেষ্য, বিশেষ্য বাক্যাংশ, বা মাঝে মাঝে বিশেষণ বাক্যাংশ সহ নাম শ্রেণি, ইন্টারফেস এবং মানের ধরণগুলি করুন", লিঙ্ক: এমএসডিএন.ইমক্রোসফটকম /en-us/library/ms229040.aspx এর জন্য ভাল নাম শ্রেণিটি নথি হবে, গ্রহণযোগ্য নাম মুদ্রণযোগ্য হবে।
ড্যানি ভারোদ

স্কেলা ভাষার একটি উদাহরণ হ'ল CanBuildFrom। এটি একটি বিশেষণ বাক্য হবে। এই শ্রেণীর ব্যবহারের ক্ষেত্রে অন্যান্য শ্রেণীর তুলনায় খুব আলাদা। এই শ্রেণীর উদাহরণগুলি কখনই ক্লায়েন্ট দ্বারা নির্মিত বা সমাধান করা হয় না - বরং, তারা নির্দিষ্ট ধরণের সুযোগগুলিতে উপলব্ধ। যদি তারা কোনও নির্দিষ্ট ধরণের জন্য উপলব্ধ থাকে, তবে এই টাইপক্লাসের জন্য চিহ্নিত চিহ্নযুক্ত সেই ধরণের সাথে যুক্ত পদ্ধতিগুলি কল করা যেতে পারে। এটি সাব-টাইপিংয়ের চেয়ে আরও নমনীয় একটি এক্সটেনসিবিলিটি মেকানিজম সরবরাহ করার জন্য বিদ্যমান। Scala-lang.org/node/114 দেখুন ।
axel22

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