কেন আমরা এনামস, অ্যাবস্ট্রাক্ট ক্লাস এবং স্ট্রাক্টস উপসর্গ করি না?


11

সি # সম্প্রদায়টি সর্বব্যাপী একটি ইন্টারফেস বোঝাতে "আমি" উপসর্গটি ব্যবহার করেছে যা এমনকি অতি অভিজ্ঞ অভিজ্ঞ প্রোগ্রামাররা এটি ব্যবহার করতে জানেন।

তবে কেন আমরা এনাম, বিমূর্ত শ্রেণি বা স্ট্রাক্ট (সম্ভবত "ই", "এ" এবং "এস" যথাক্রমে) উপসর্গ করি না?

উদাহরণস্বরূপ, আমরা যদি সমস্ত "বি" সহ সমস্ত বিমূর্ত শ্রেণি চিহ্নিত করি, তবে এটি সেই ধরণের মূল্যবান তথ্য সরবরাহ করবে যা এটি অনুমান করা যেতে পারে, তা অবিলম্বে সুস্পষ্ট নয়।

দয়া করে মনে রাখবেন যে আমি এই পরিবর্তনের পক্ষে পরামর্শ দিচ্ছি না, আমি কেবল বুঝতে পারি না কেন আমরা এইভাবে জিনিসগুলি করি না।

এই থ্রেডটি উত্তর দেয় যে আমরা "আমি" উপসর্গটি কেন ব্যবহার করি তবে কেন আমরা অন্যান্য উপসর্গ ব্যবহার করি না তার জবাব দেয় না ।


3
আমি সদৃশ নিকট পক্ষে ভোট দেব, তবে উত্তরটি এসও স্ট্যাকওভারফ্লো.
com/

1
@ ইউফোরিক: এই প্রশ্নটি আরও নির্দিষ্ট।
পুনরায় পোস্টার


আইএমও এনামগুলিকে এড়ানো উচিত (পাবলিক স্ট্যাটিক রিডোনলি মেম্বার (এনাম প্যাটার্ন) দ্বারা প্রতিস্থাপন), বিমূর্ত ক্লাসগুলির "বেস" প্রত্যয় থাকা উচিত এবং নামকরণ কনভেনশন হিসাবে স্ট্রাইকগুলির নিম্নতর কেস হওয়া উচিত ছিল , তবে যেহেতু নেট এটি করে না, এটি আপনি যদি স্ট্রোককে লোয়ার কেস করেন তবে কেবল বিভ্রান্ত হয়, কারণ এটি কখনই সামঞ্জস্যপূর্ণ হবে না।
ডেভ কাজিনো

আপনি কেন psuedo enums তৈরির পক্ষে enums ব্যবহার এড়াবেন?
স্টিফেন

উত্তর:


27

ইন্টারফেসগুলির জন্য নামকরণের সম্মেলনের বিষয়টি হ'ল আপনার ক্লাস প্রয়োগকারী ইন্টারফেসটিকে কী বলা যায় সে সম্পর্কে একটি দ্রুত, মস্তিষ্কের সিদ্ধান্ত দেওয়া। আপনার যদি একটি থাকে Frobnicatorতবে ডিকপলিং বা যে কোনও কারণের জন্য একটি ইন্টারফেস ঘোষণা করতে হয়, তবে এটিকে ডাকার সিদ্ধান্তের জন্য IFrobnicatorসচেতন চিন্তাভাবনার প্রয়োজন নেই, এবং এটি ভাল।

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

(অ্যাবস্ট্রাক্ট ক্লাসগুলি ইন্টারফেসের সাথে কিছুটা সমান, যেহেতু আপনাকে কোনও কাজ করার জন্য দ্বিতীয়, কংক্রিটের ক্লাস সরবরাহ করতে হবে, তাই তারা 'এ' দিয়ে শুরু করার একটি সম্মেলন অর্জন করতে পারে, তবে যে কারণেই হোক না কেন, যদি তা হয় নি তবে। আমাকে অনুমান করার অনুমতি দেওয়া হয়েছে, আমি মনে করি যে 'আমি' একটি বিশেষ সংকীর্ণ চিঠি হওয়ায় এর সাথে কিছু ছিল))


5
+1 এই উত্তরটি আমি লিখতাম answer আমি বাতলান চাই যে যদিও বিমূর্ত শ্রেণীর ইতিমধ্যে একটি পুরোপুরি cromulent নামকরণ সম্মেলন, যেখানে বিমূর্ত বর্গ নামকরণ করা হয় আছে AnimalBaseএবং স্বতন্ত্র স্বাদে হয় AnimalGiraffe, AnimalLionইত্যাদি
বাইনারি Worrier

এটি অনেক জাভা ইন্টারফেসগুলি উল্লেখ করতে হবে যেগুলি 'আই' ব্যবহার Listকরে না, যেহেতু খুব প্রযুক্তিগত-নামযুক্ত ArrayListএবং LinkedListবাস্তবায়নের নাম। (সি #, আমি বিশ্বাস করি, IListইন্টারফেস Listহিসাবে এবং অ্যারে তালিকা হিসাবে রয়েছে)
কাতানা 314

আমি আশ্চর্য হই যে এটি কার্যকর হতে পারে যদি, মাইক্রোসফ্ট যখন সুপারিশ করেছিল যে "পরিবর্তনীয়" কাঠামোর ধরণের ভেরিয়েবলগুলিকেPoint p = myPoints[3]; p.X += 3; প্রভাবিত করবে কিনা সে সম্পর্কে বিভ্রান্তি এড়াতে একটি নির্দিষ্ট উপসর্গ দেওয়া উচিত myPoints[3].X। পূর্বপরিকল্পিতভাবে, আমি var->fieldক্লাস-ফিল্ড অ্যাক্সেস এবং var.fieldস্ট্রাক্ট-ফিল্ড অ্যাক্সেসের জন্য সি # ব্যবহার পছন্দ করতাম , তবে স্পষ্টতই তা হয় না। তবুও, এটি এক নজরে দেখে মনে হবে তাদের আলাদা করার কিছু উপায় সহায়ক হবে।
সুপারক্যাট

1

আমি মনে করি এটি বেশি ব্যবহৃত হয় না কারণ:

  • বেশিরভাগ সময় এটি কোনও এনাম, বা বিমূর্ত শ্রেণি বা কাঠামো হলে খুব বেশি ম্যাটার করে না
  • যদি এটি ম্যাটার করে তবে আমি সম্ভবত এটি ব্যবহার থেকে দেখতে পারি এবং অন্যথায় খুব দ্রুত খুঁজে পেতে পারি
  • যদি আমি এটিকে এনাম, বিমূর্ত শ্রেণি বা কাঠামো হিসাবে পরিবর্তন করি তবে আমাকেও এটির নতুন নামকরণ করতে হবে
  • এই সম্মেলনটি জানেন না এমন লোকদের জন্য এটি খাঁটি শব্দ।
  • লোকেরা কেবল পুরো ধারণাটি খারিজ করে দিতে পারে কারণ তাদের শেখানো হয়েছিল হাঙ্গেরিয়ান স্বরলিপি ব্যবহার না করা। এমন লোক রয়েছে এবং এখনও রয়েছে যারা অ্যাপস হাঙ্গেরিয়ান এবং সিস্টেম হাঙ্গেরীয়ের মধ্যে পার্থক্য তৈরি না করে আপনার হাঙ্গেরিয়ান স্বরলিপি ব্যবহার করবেন না বলে জানিয়েছেন। এই এসও প্রশ্নে একটি দুর্দান্ত আলোচনা পাওয়া যাবে । শুধু প্রথম উত্তরটি আকর্ষণীয় নয় তবে দুর্দান্ত উত্তর এবং মন্তব্য রয়েছে। একই প্রশ্ন থেকে জোয়েল স্পলস্কির এই নিবন্ধটি এসেছে ("আমি হাঙ্গেরি" অনুচ্ছেদে স্ক্রোল করুন)

সংক্ষেপে: সাধারণভাবে যোগ করা মান ব্যয় যোগ করে না।

শেষ বুলেট পয়েন্ট এবং কিছু ব্যাখ্যা থেকে আপনি উপসংহারে আসতে পারেন। সিস্টেম হাঙ্গেরিয়ান (উপসর্গের ধরণ) খারাপ এবং এটি ব্যবহার করা উচিত নয়। অ্যাপস হাঙ্গেরিয়ান (উপসর্গ ধরণের) এর ব্যবহার রয়েছে।

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

আমার ধারণা লোকেরা লক্ষ্য করেছে যে এটি আরও প্রায়ই ইন্টারফেসের জন্য ম্যাটার করে এবং তাই এটি ইন্টারফেসের জন্য একটি সাধারণ নিয়মে পরিণত হয়েছে।


-1

কেবলমাত্র একটি (আশাবাদী প্রযোজ্য) চিন্তাভাবনা:

কংক্রিটের ক্লাসগুলির চেয়ে 'ইন্টারফেসে কোডিং' দেওয়ার দিকে স্পষ্ট প্রবণতা রয়েছে। "আজকাল" ক্লাসগুলির নামকরণের সম্মেলনটি ইন্টারফেসের জন্য 'I' অক্ষর না দিয়ে 'সি' দিয়ে শুরু করার মতো নামকরণ কনভেনশন করা প্রায় সুবিধাজনক বলে মনে হয়।

আমি কেবল একটি জাভা প্রকল্পটি শেষ করেছি যার মধ্যে সমস্ত ইন্টারফেসকে আসলে মডেল বলা হয়েছিল .. হ্যাঁ, ইন্টারফেসের নাম কনভেনশনটি নামটি 'মডেল' দিয়ে শেষ করা হয়েছিল ... তারপরে ইন্টারফেসটি একরকম 'ডেটা ট্রান্সফারঅবজেক্ট / ডিটিও' হিসাবে প্রয়োগ করবে :

public interface SomethingModel{
}

public class Something implements SomethingModel{
    //lets not line up braces and make it hard to read
    //at least it saves one line
}

যদিও সি # তে

public interface ISomething{}

public class SomethingModel : ISomething
{
   //i can read this
}

এটিকে সরাসরি আঘাত করতে আমার মস্তিষ্ককে পুনর্বিবেচনা করা হচ্ছে, তবে আমি দেখতে পাচ্ছি এটি কীভাবে এটি ইন্টারফেসে প্রোগ্রামিংয়ের শর্তাবলী ভাবাতে সহায়তা করতে পারে।

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