আমাদের কি প্রত্যেক কিছুর জন্য ধরণ নির্ধারণ করা উচিত?


141

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

আন্তঃব্যবহারযোগ্যতার উদ্বেগের কারণে আইডিটি এলোমেলো স্ট্রিং হতে হয়েছিল। এটি এমন একটি পদ্ধতি তৈরি করেছিল যার মতো খুব অস্পষ্ট স্বাক্ষর ছিল:

public string CreateNewThing()

এটি রিটার্নের টাইপের উদ্দেশ্যকে অস্পষ্ট করে তোলে। আমি এই স্ট্রিংটিকে অন্য কোনও প্রকারে মোড়াতে ভাবলাম যা এর অর্থ আরও পরিষ্কার করে দেয়:

public OperationIdentifier CreateNewThing()

টাইপটিতে কেবল স্ট্রিং থাকবে এবং যখনই এই স্ট্রিংটি ব্যবহৃত হবে তখন ব্যবহার করা হবে।

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

আপনার কি মনে হয় সুরক্ষার কারণে কোনও শ্রেণিতে সাধারণ প্রকারগুলি মোড়ানো একটি ভাল অনুশীলন?


4
আপনি ক্ষুদ্র টাইপগুলি সম্পর্কে পড়তে আগ্রহী হতে পারেন। আমি এটির সাথে কিছুটা খেলেছি এবং এটির সুপারিশ করব না তবে এটি সম্পর্কে ভাবার মজাদার উপায় approach darrenhobbs.com/2007/04/11/tiny-types
জেরোইন ভেনেভেল

40
আপনি একবার হাস্কেলের মতো কিছু ব্যবহার করার পরে আপনি দেখতে পাবেন যে প্রকারগুলি ব্যবহার করে কতটা সহায়তা করে। প্রকারগুলি সঠিক প্রোগ্রাম নিশ্চিত করতে সহায়তা করে।
নাট সিমার

3
এমনকি এরলংয়ের মতো একটি গতিশীল ভাষাও কোনও টাইপ সিস্টেম থেকে উপকৃত হয়, এ কারণেই এটি একটি টাইপপেক সিস্টেম এবং টাইপেকিং সরঞ্জাম যা হ্যাস্কেল্লারের কাছে গতিশীল ভাষা সত্ত্বেও পরিচিত। সি / সি ++ এর মতো ভাষা যেখানে কোনও প্রকারের প্রকৃত ধরণের একটি পূর্ণসংখ্যা যা আমরা একটি নির্দিষ্ট উপায়ে চিকিত্সা করার জন্য কম্পাইলারের সাথে একমত হই বা জাভা যেখানে আপনি প্রায় শ্রেণীবদ্ধ করে ক্লাসের ভান করার সিদ্ধান্ত নিলে এমন প্রকারভেদ হয় যেখানে শব্দার্থিক ওভারলোডিং সমস্যা রয়েছে ভাষা (এটি কি "শ্রেণি" বা "ধরণের"?) বা অস্পষ্টতা টাইপ করুন (এটি কি কোনও "ইউআরএল", "স্ট্রিং" বা "ইউপিসি"?)। শেষ পর্যন্ত, আপনি disamigiguate করতে পারেন যা সরঞ্জাম ব্যবহার করুন।
zxq9

7
আমি নিশ্চিত নই যে ধারণাটি কোথা থেকে আসে সি ++ এর ধরণের ওভারহেড রয়েছে। সি ++ 11 দিয়ে, সংকলক নির্মাতারা কেউই প্রতিটি ল্যাম্বডাকে তার নিজস্ব অনন্য প্রকার দিতে সমস্যা দেখেনি। তবে টিবিএইচ "সি / সি ++ টাইপ সিস্টেম" সম্পর্কে একটি মন্তব্যে আপনি সত্যিই অনেক অন্তর্দৃষ্টি খুঁজে পেতে আশা করতে পারেন না যেন তারা দু'জন একটি টাইপ সিস্টেম ভাগ করে নিয়েছে।
এমসাল্টারগুলি

2
@ জেডিবি - না, তা হয় না। এমনকি অনুরূপ না।
Žদ্রো

উত্তর:


152

প্রিমিটিভস, যেমন stringবা int, কোনও ব্যবসায়িক ডোমেনে কোনও অর্থ রাখে না। এর প্রত্যক্ষ পরিণতি হ'ল আপনি পণ্য আইডি প্রত্যাশার ক্ষেত্রে ভুলভাবে একটি ইউআরএল ব্যবহার করতে পারেন, বা দাম প্রত্যাশার সময় পরিমাণ ব্যবহার করতে পারেন

এজন্য অবজেক্ট ক্যালিস্টেনিক্স চ্যালেঞ্জ আদিমদের এর একটি নিয়ম হিসাবে মোড়ানো বৈশিষ্ট্যযুক্ত:

বিধি 3: সমস্ত আদিম এবং স্ট্রিং মোড়ানো

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

একই ডকুমেন্টটি ব্যাখ্যা করে যে এখানে আরও একটি সুবিধা রয়েছে:

আওয়ার বা অর্থের মতো ছোট ছোট বস্তুগুলি আমাদের আচরণের জন্য একটি স্পষ্ট জায়গা দেয় যা অন্যথায় অন্য শ্রেণীর চারপাশে আবদ্ধ হত

প্রকৃতপক্ষে, যখন আদিমগুলি ব্যবহৃত হয়, তখন সাধারণত এই ধরণের সাথে সম্পর্কিত কোডের সঠিক অবস্থানটি ট্র্যাক করা খুব কঠিন, যা প্রায়শই গুরুতর কোড ডুপ্লিকেশন বাড়ে । যদি Price: Moneyশ্রেণি থাকে তবে ভিতরে সীমা পরীক্ষা করা স্বাভাবিক checking পরিবর্তে, যদি int(আরও খারাপ, ক double) পণ্যের দাম সংরক্ষণ করতে ব্যবহৃত হয়, তবে এই ব্যাপ্তিটি বৈধতা দেওয়া উচিত কে? পণ্যটি? ছাড়? কার্ট?

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

অপূর্ণতা — এবং একই যুক্তিটি অবজেক্ট ক্যালিস্টেনিক্স অনুশীলনের প্রতিটি নিয়মের ক্ষেত্রে প্রযোজ্য that এটি যদি দ্রুত সমস্ত কিছুর জন্য একটি শ্রেণি তৈরি করার জন্য অত্যধিক মাত্রাতিরিক্ত হয়ে যায় । যদি Productথাকে ProductPriceযা উত্তরাধিকারী থেকে PositivePriceযা আহরণ থেকে Priceযা আবার থেকে উত্তরাধিকারী Money, এই পরিষ্কার স্থাপত্য, বরং সম্পূর্ণ জগাখিচুড়ি অর্ডার একটি একক জিনিস খুঁজে পেতে, একটি রক্ষণাবেক্ষণকারী কয়েক ডজন প্রত্যেক সময় ফাইল খুলতে উচিত কোথায়।

আরেকটি বিষয় বিবেচনা করার জন্য হ'ল অতিরিক্ত ক্লাস তৈরির ব্যয় (কোডের রেখার ক্ষেত্রে)। যদি মোড়কগুলি অপরিবর্তনীয় হয় (সাধারণত সেগুলি হওয়া উচিত) তবে এর অর্থ হ'ল আমরা যদি সি # গ্রহণ করি তবে আপনার অবশ্যই কমপক্ষে র‌্যাপারের মধ্যে থাকতে হবে:

  • সম্পত্তি প্রাপ্তি,
  • এর সমর্থন ক্ষেত্র,
  • একটি কনস্ট্রাক্টর যা ব্যাকিং ফিল্ডে মান নির্ধারণ করে,
  • একটি প্রথা ToString(),
  • এক্সএমএল ডকুমেন্টেশন মন্তব্যসমূহ (যা অনেকগুলি লাইন তৈরি করে),
  • Equalsএবং GetHashCodeওভাররাইড (এছাড়াও অনেকগুলি এলওসি)।

এবং শেষ পর্যন্ত, যখন প্রাসঙ্গিক:

  • একটি ডিবাগারডিসপ্লে বৈশিষ্ট্য,
  • ==!=অপারেটরদের ওভাররাইড ,
  • অবশেষে এনক্যাপসুলেটেড প্রকারে এবং নির্বিঘ্নে রূপান্তর করতে অন্তর্নিহিত রূপান্তর অপারেটরের একটি ওভারলোড,
  • কোড চুক্তি (আক্রমণকারী সহ, এটি একটি দীর্ঘ দীর্ঘ পদ্ধতি, এর তিনটি বৈশিষ্ট্য সহ),
  • বেশ কয়েকটি রূপান্তরকারী যা এক্সএমএল সিরিয়ালাইজেশন, জেএসএন সিরিয়ালাইজেশন বা একটি ডাটাবেস থেকে / থেকে কোনও মান সঞ্চয় করে / লোড করার সময় ব্যবহৃত হবে।

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

উপসংহার:

  • অ্যাপ্লিকেশনটির ব্যবসায়ের ডোমেইনে অর্থ রয়েছে এমন ক্লাসগুলিতে আড়াল করুন যখন (1) এটি ভুলগুলি হ্রাস করতে সহায়তা করে, (২) কোড সদৃশতার ঝুঁকি হ্রাস করে বা (3) অন্তর্নিহিত ধরণটি পরে পরিবর্তন করতে সহায়তা করে।

  • আপনি আপনার কোডটিতে খুঁজে পাওয়া প্রতিটি আদিম স্বয়ংক্রিয়ভাবে মোড়বেন না: এমন অনেকগুলি ক্ষেত্রে রয়েছে যেখানে ব্যবহার করা stringবা intপুরোপুরি ঠিক।

অনুশীলনে, ইন public string CreateNewThing(), ThingIdক্লাসের উদাহরণ ফিরিয়ে দেওয়া পরিবর্তে stringসহায়তা করতে পারে তবে আপনি এটিও করতে পারেন:

  • Id<string>শ্রেণীর উদাহরণ দিন , এটি জেনেরিক টাইপের একটি বিষয় যা নির্দেশ করে যে অন্তর্নিহিত প্রকারটি একটি স্ট্রিং। প্রচুর প্রকারের রক্ষণাবেক্ষণের অপূর্ণতা ছাড়াই আপনার পঠনযোগ্যতার সুবিধা রয়েছে।

  • Thingশ্রেণীর উদাহরণ দিন Return ব্যবহারকারীর যদি কেবল আইডি দরকার হয় তবে এটি সহজেই এর মাধ্যমে করা যেতে পারে:

    var thing = this.CreateNewThing();
    var id = thing.Id;
    

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

4
অর্থের ক্ষেত্রে, মুদ্রাটি মানি অবজেক্টে অন্তর্ভুক্ত রয়েছে তা নিশ্চিত করুন বা আপনার পুরো প্রোগ্রামটি একই ব্যবহার করে (যা তখন নথিভুক্ত করা উচিত)।
পাওলো ইবারম্যান

5
@ ব্লাফল: যদিও এমন বৈধ মামলা রয়েছে যেখানে গভীর উত্তরাধিকার প্রয়োজন, আমি বাধ্যতামূলক বেতন-বাই-এলওসি মনোভাবের ফলে পাঠযোগ্যতার দিকে মনোযোগ না দিয়ে লিখিত ওভারডাইসাইড কোডে এ জাতীয় উত্তরাধিকার দেখি। এইভাবে আমার উত্তরের এই অংশটির নেতিবাচক চরিত্র।
আর্সেনী মোরজেনকো

3
@ আর্টস: যুক্তিটি "এই সরঞ্জামটির নিন্দা করুন কারণ কিছু লোক এটি ভুল উপায়ে ব্যবহার করে"।
blrfl

6
: একটি উদাহরণ যেখানে জন্য অর্থ একটি ব্যয়বহুল ত্রুটি এড়ানো থাকতে পারে @MainMa en.wikipedia.org/wiki/Mars_Climate_Orbiter#Cause_of_failure
cbojar

60

আমি স্কোপটি থাম্বের নিয়ম হিসাবে ব্যবহার করব : এগুলি উত্পন্ন এবং গ্রাস করার সুযোগটি সঙ্কুচিত valuesহ'ল, আপনাকে এই মানটির প্রতিনিধিত্বকারী কোনও বিষয় তৈরি করার সম্ভাবনা কম the

বলুন আপনার নীচের সিউডোকোড রয়েছে

id = generateProcessId();
doFancyOtherstuff();
job.do(id);

তাহলে সুযোগটি খুব সীমিত এবং আমি এটিকে কোনও ধরণের তৈরি করার কোনও বুদ্ধি দেখতে পাব না। তবে বলুন, আপনি এই মানটি একটি স্তরে তৈরি করেন এবং এটি অন্য স্তরে (বা অন্য কোনও বস্তু) পাসও করেন, তারপরে এটির জন্য কোনও প্রকার তৈরি করা সঠিক ধারণা তৈরি করবে।


14
খুব ভাল পয়েন্ট। সুস্পষ্ট প্রকারগুলি অভিপ্রায় যোগাযোগের জন্য একটি গুরুত্বপূর্ণ সরঞ্জাম , যা বিশেষত অবজেক্ট এবং পরিষেবা সীমানা জুড়ে গুরুত্বপূর্ণ।
অব্নার শাহর-কাশতান

+1 যদিও আপনি যদি এখনও সাব্রোটিনের সমস্ত কোডের রিফ্যাক্টর না করে থাকেন তবে doFancyOtherstuff()আপনি মনে করতে পারেন যে job.do(id)রেফারেন্সটি সরল স্ট্রিং হিসাবে রাখার মতো স্থানীয় নয়।
মার্ক হার্ট

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

34

স্ট্যাটিক টাইপ সিস্টেমগুলি হ'ল ডেটার ভুল ব্যবহার রোধ করে।

এটি করার প্রকারের স্পষ্ট উদাহরণ রয়েছে:

  • আপনি কোনও ইউআইডি মাস পাবেন না
  • আপনি দুটি স্ট্রিং গুণ করতে পারবেন না।

আরও সূক্ষ্ম উদাহরণ আছে

  • আপনি ডেস্কের দৈর্ঘ্য ব্যবহার করে কোনও কিছুর জন্য অর্থ দিতে পারবেন না
  • আপনি কারও নাম ইউআরএল হিসাবে ব্যবহার করে কোনও HTTP অনুরোধ করতে পারবেন না।

আমরা doubleদাম এবং দৈর্ঘ্য উভয়ই ব্যবহার করতে প্ররোচিত হতে পারি , বা stringএকটি নাম এবং URL উভয়ের জন্য ব্যবহার করতে পারি a তবে এটি করা আমাদের দুর্দান্ত ধরণের সিস্টেমটিকে বিপর্যস্ত করে এবং এই অপব্যবহারগুলি ভাষার স্থিতিশীল চেকগুলি পাস করার অনুমতি দেয়।

পাউন্ড-সেকেন্ডে নিউটন-সেকেন্ডের সাথে বিভ্রান্ত হওয়ার সময় রানটাইমের সময় খারাপ ফলাফল হতে পারে ।


এটি স্ট্রিংগুলির সাথে বিশেষত একটি সমস্যা। তারা প্রায়শই "সর্বজনীন ডেটা টাইপ" হয়ে যায়।

আমরা প্রাথমিকভাবে কম্পিউটারগুলির সাথে ইন্টারফেস পাঠ্য করতে ব্যবহৃত হয়ে থাকি এবং আমরা প্রায়শই এই মানবিক ইন্টারফেসগুলি (ইউআই) প্রোগ্রামিং ইন্টারফেসে (এপিআই) প্রসারিত করি । আমরা 34.25 কে 34.25 অক্ষর হিসাবে ভাবি । আমরা 05-03-2015 অক্ষর হিসাবে একটি তারিখ মনে করি । আমরা একটি ইউইউডিটিকে 75e945ee-f1e9-11e4-b9b2-1697f925ec7b অক্ষর হিসাবে মনে করি ।

তবে এই মানসিক মডেলটি API অ্যাস্ট্রাকশনকে ক্ষতি করে।

শব্দ বা ভাষা যেমন সেগুলি লিখিত বা কথিত হয়, মনে হয় না আমার চিন্তার পদ্ধতিতে কোনও ভূমিকা পালন করে।

আলবার্ট আইনস্টাইন

একইভাবে, পাঠ্য উপস্থাপনাগুলি ডিজাইনের ধরণ এবং এপিআইগুলিতে কোনও ভূমিকা পালন করা উচিত নয়। সাবধান string! (এবং অন্যান্য অতিরিক্ত জেনেরিক "আদিম" ধরণের)


প্রকারভেদগুলি "কী অপারেশনগুলি বোঝায় তা যোগাযোগ করে।"

উদাহরণস্বরূপ, আমি একবার কোনও ক্লায়েন্টের উপর HTTP REST এপিআইতে কাজ করেছি। বিশ্রাম, সঠিকভাবে সম্পন্ন, হাইপারমিডিয়া সত্তা ব্যবহার করুন, যা হাইপারলিংক সম্পর্কিত সত্তা নির্দেশ করে। এই ক্লায়েন্টে, কেবল সত্ত্বগুলি টাইপ করা হয়নি (যেমন ব্যবহারকারী, অ্যাকাউন্ট, সাবস্ক্রিপশন), সেই সত্তাগুলির লিঙ্কগুলিও টাইপ করা হয়েছিল (ইউজারলিঙ্ক, অ্যাকাউন্টলিঙ্ক, সাবস্ক্রিপশন লিঙ্ক)। লিঙ্কগুলি চারদিকে মোড়কের তুলনায় কিছুটা বেশি ছিল Uriতবে পৃথক প্রকারগুলি ব্যবহারকারীর আনার জন্য অ্যাকাউন্টলিঙ্ক ব্যবহার করার চেষ্টা করা অসম্ভব করে তুলেছিল। যদি সবকিছু সরল Uri- বা আরও খারাপ হয়ে থাকে string- এই ভুলগুলি কেবল রানটাইমেই পাওয়া যেত।

তেমনি, আপনার পরিস্থিতিতে আপনার কাছে ডেটা রয়েছে যা কেবলমাত্র একটি উদ্দেশ্যে ব্যবহৃত হয়: একটি সনাক্ত করতে Operation। এটি অন্য কোনও কিছুর জন্য ব্যবহার করা উচিত নয় এবং আমরা Operationতৈরি করেছি এমন এলোমেলো স্ট্রিংগুলি সনাক্ত করার চেষ্টা করা উচিত নয় । একটি পৃথক শ্রেণি তৈরি করা আপনার কোডে পাঠযোগ্যতা এবং সুরক্ষা যুক্ত করে।


অবশ্যই, সমস্ত ভাল জিনিস অতিরিক্ত ব্যবহার করা যেতে পারে। বিবেচনা

  1. এটি আপনার কোডে কত স্পষ্টতা যুক্ত করে

  2. এটি কতবার ব্যবহৃত হয়

যদি কোনও "ধরণের" ডেটা (বিমূর্ত অর্থে) ঘন ঘন, স্বতন্ত্র উদ্দেশ্যে এবং কোড ইন্টারফেসের জন্য ব্যবহার করা হয় তবে এটি ভার্বোসটি ব্যয়ে পৃথক শ্রেণি হওয়ার জন্য খুব ভাল প্রার্থী।


21
"স্ট্রিংগুলি প্রায়শই 'সর্বজনীন' ডেটা টাইপ হয়ে যায়" - এটি জিভ-ইন-গাল "স্ট্রাইটি টাইপ করা ভাষাগুলি" মনিকারের উত্স।
এমসাল্টারস

@ এসএমএলটার্স, হা হা, খুব সুন্দর।
পল ড্রাগার


10

আপনার কি মনে হয় সুরক্ষার কারণে কোনও শ্রেণিতে সাধারণ প্রকারগুলি মোড়ানো একটি ভাল অনুশীলন?

কখনও কখনও।

এটি এমন একটি ক্ষেত্রে যেখানে আপনার stringআরও কংক্রিটের পরিবর্তে ব্যবহার করে যে সমস্যাগুলি দেখা দিতে পারে সেগুলি বিবেচনা করতে হবে OperationIdentifier। তাদের তীব্রতা কি? তাদের সদৃশতা কি?

তারপরে আপনাকে অন্য ধরণের ব্যবহারের ব্যয়টি বিবেচনা করতে হবে। এটি ব্যবহার করা কতটা বেদনাদায়ক? এটি কত কাজ করতে হয়?

কিছু ক্ষেত্রে, আপনি বিপরীতে কাজ করার জন্য একটি দুর্দান্ত কংক্রিট টাইপ করে নিজের সময় এবং প্রচেষ্টা বাঁচাতে পারবেন। অন্যদের মধ্যে, এটি সমস্যার জন্য উপযুক্ত হবে না।

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


10

আমি সাধারণত সম্মত হই যে বহুবার আপনার আদিম এবং স্ট্রিংয়ের জন্য একটি প্রকার তৈরি করা উচিত, তবে উপরের উত্তরগুলি বেশিরভাগ ক্ষেত্রে একটি প্রকার তৈরি করার পরামর্শ দেয়, আমি কেন / কখন না করব তার কয়েকটি কারণ তালিকা করব:

  • কর্মক্ষমতা. আমাকে অবশ্যই এখানে প্রকৃত ভাষা উল্লেখ করতে হবে refer সি # তে, যদি ক্লায়েন্টের আইডি সংক্ষিপ্ত হয় এবং আপনি এটি একটি ক্লাসে মুড়ে রাখেন - আপনি সবেমাত্র প্রচুর ওভারহেড তৈরি করেছেন: মেমরি, এখন থেকে এটি একটি 64 বিট সিস্টেম এবং গতিতে 8 বাইট এখন থেকে এটি স্তূপে বরাদ্দ করা হয়েছে।
  • যখন আপনি ধরণের উপর অনুমান করা। যদি কোনও ক্লায়েন্ট আইডি সংক্ষিপ্ত হয় এবং আপনার কিছু যুক্তি থাকে যা কিছু উপায়ে এটি প্যাক করে - আপনি সাধারণত ইতিমধ্যে টাইপটি নিয়ে অনুমানগুলি তৈরি করেন। এই সমস্ত জায়গায় আপনাকে এখন বিমূর্ততাটি ভেঙে ফেলতে হবে। যদি এটি একটি স্পট হয় তবে এটি কোনও বড় বিষয় নয়, যদি এটি পুরো জায়গা জুড়ে থাকে তবে আপনি আধ্যাত্মিক সময়টি ব্যবহার করতে পারেন তার অর্ধেক সময় আপনি খুঁজে পেতে পারেন।
  • কারণ প্রতিটি ভাষারই টাইপিড নেই। এবং যে ভাষাগুলি না এবং কোডগুলি ইতিমধ্যে লিখিত আছে তাদের পক্ষে এই জাতীয় পরিবর্তন করা একটি বড় কাজ হতে পারে যা বাগগুলি প্রবর্তন করতে পারে (তবে প্রত্যেকেরই ভাল কভারেজ সহ একটি টেস্ট স্যুট আছে, তাই না?)।
  • কিছু ক্ষেত্রে এটি পঠনযোগ্যতা হ্রাস করেআমি কীভাবে এটি মুদ্রণ করব? আমি কীভাবে এটি যাচাই করব? আমি নাল জন্য পরীক্ষা করা উচিত? সমস্ত ধরণের প্রশ্নগুলির জন্য যা আপনাকে ধরণের সংজ্ঞায়িত করতে হবে।

3
অবশ্যই যদি র‌্যাপারের ধরণটি কোনও শ্রেণীর চেয়ে স্ট্রাক্ট হয় তবে একটি short(উদাহরণস্বরূপ) একই ব্যয় মোড়ানো বা মোড়কযুক্ত। (?)
গাণিতিক

1
কোনও ধরণের নিজস্ব বৈধতা আটকে দেওয়ার জন্য এটি কি ভাল নকশা হবে না? বা এটি যাচাই করার জন্য কোনও সহায়ক প্রকার তৈরি করতে চান?
নিক উডেল

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

7

না, আপনার "সমস্ত কিছুর" জন্য ধরণ (শ্রেণি) নির্ধারণ করা উচিত নয়।

তবে, অন্যান্য উত্তরগুলির হিসাবে বলা হয়, এটি প্রায়শই দরকারী useful আপনার কোডটি লেখার সময়, পরীক্ষা করার এবং বজায় রাখার মতো উপযুক্ত টাইপ বা শ্রেণীর অনুপস্থিতির কারণে আপনার সচেতনভাবে, সম্ভব হলে - খুব বেশি-ঘর্ষণের অনুভূতি বা বোধ তৈরি করা উচিত । আমার জন্য, যখন আমি একক মান হিসাবে একাধিক আদিম মানকে একত্রীকরণ করতে চাই বা যখন মানগুলি যাচাই করতে চাই তখন (যেমন নির্ধারণ করুন আদিম ধরণের সমস্ত সম্ভাব্য মানগুলির মধ্যে কোনটি বৈধ মানগুলির সাথে সামঞ্জস্য করে) 'ইম্প্লিড টাইপ')।

আপনি আমার প্রশ্নে খুব বেশি ডিজাইনের জন্য দায়বদ্ধ হওয়ার জন্য আপনার প্রশ্নে যা মন্তব্য করেছেন তা বিবেচনা পেয়েছি । আমি ইচ্ছাকৃতভাবে প্রয়োজনের চেয়ে আরও কোড লেখা এড়ানোর অভ্যাস তৈরি করেছি। আশা করি আপনি আপনার কোডের জন্য ভাল (স্বয়ংক্রিয়) পরীক্ষাগুলি লিখছেন - আপনি যদি হন তবে আপনি সহজেই আপনার কোডটি রিফেক্টর করতে পারেন এবং প্রকার বা শ্রেণি যুক্ত করতে পারেন যদি এটি করা আপনার কোডের চলমান বিকাশ এবং রক্ষণাবেক্ষণের জন্য নেট সুবিধা দেয়

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


5

উপরিভাগে দেখে মনে হচ্ছে আপনার যা করা দরকার তা হ'ল কোনও ক্রিয়াকলাপ শনাক্ত করা।

অতিরিক্ত হিসাবে আপনি বলতে চান যে কোনও অপারেশন করার কথা:

থেকে শুরু অপারেশন [এবং] এ তার ফিনিস নিরীক্ষণ

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

এটা বলে

কমান্ড প্যাটার্নটি [...] কোনও ক্রিয়া সম্পাদন করতে বা পরবর্তী সময়ে ইভেন্টটি ট্রিগার করার জন্য প্রয়োজনীয় সমস্ত তথ্য encapsulate করতে ব্যবহৃত হয় ।

আমি মনে করি আপনি নিজের অপারেশনগুলির সাথে যা করতে চান তার তুলনায় এটি খুব মিল similar (উভয় উক্তিগুলিতে আমি সাহসী করে দিয়েছি এমন বাক্যাংশগুলি তুলনা করুন) কোনও স্ট্রিং ফিরে আসার পরিবর্তে, Operationবিমূর্ত অর্থে কোনও শনাক্তকারীর কাছে ফিরে আসুন, উদাহরণস্বরূপ ওওপে class শ্রেণীর কোনও বস্তুর পয়েন্টার।

মন্তব্য সম্পর্কে

এই শ্রেণীটিকে কমান্ড বলা এবং তারপরে যুক্তি না রাখলে ডাব্লুটিএফ-ওয়াই হবে।

না এটা হবে না। মনে রাখবেন যে নিদর্শনগুলি খুব বিমূর্ত , সুতরাং বিমূর্ত যে বাস্তবে তারা কিছুটা মেটা। এটি হ'ল, তারা প্রায়শই প্রোগ্রামিং নিজেই বিমূর্ত করেন এবং কিছু বাস্তব বিশ্ব ধারণা নয়। কমান্ড প্যাটার্নটি একটি ফাংশন কলের বিমূর্ততা। (বা পদ্ধতি) যেন কেউ প্যারামিটারগুলির মানগুলি পাস করার পরে ঠিক পরে এবং পুনরায় শুরু করার জন্য, প্যারামিটারগুলির মানগুলি পাস করার পরে হিট করে।

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

  1. কমান্ডটিতে যদি আপনার সেই সমস্ত যুক্তি থাকে তবে এটি ফুলে উঠবে এবং অগোছালো হবে। আপনি ভাবছেন "ওহ ভাল, এই সমস্ত কার্যকারিতা পৃথক শ্রেণিতে হওয়া উচিত"। আপনি কমান্ড আউট লজিক অবাধ্য হবে ।
  2. কমান্ডটিতে যদি আপনার সেই সমস্ত যুক্তি থাকে তবে পরীক্ষা করার সময় পরীক্ষা করা ভাল হয়ে যায়। "পবিত্র বোকা, আমাকে কেন এই কমান্ডটি আজেবাজে ব্যবহার করতে হবে? আমি কেবল পরীক্ষা করতে চাই যদি এই ফাংশনটি 1 ছাড়িয়ে যায় বা না, আমি পরে এটি কল করতে চাই না, এখনই এটি পরীক্ষা করতে চাই!"
  3. কমান্ডটিতে যদি আপনার সমস্ত লজিক থাকে তবে এটি শেষ হলে ফিরে রিপোর্ট করা খুব বেশি অর্থবোধ করে না। আপনি যদি ডিফল্টরূপে সিঙ্ক্রোনসিভভাবে কোনও ক্রিয়াকলাপ সম্পাদন করতে চান তবে এটি কার্যকর করার পরে তা অবহিত হওয়ার কোনও অর্থ হয় না। হতে পারে আপনি অন্য থ্রেড শুরু করছেন কারণ আপনার অপারেশনটি আসলে সিনেমার ফর্ম্যাটে অবতার রেন্ডার করার জন্য (রাস্পবেরি পাইতে অতিরিক্ত থ্রেডের প্রয়োজন হতে পারে) হতে পারে আপনাকে কোনও সার্ভার থেকে কিছু তথ্য আনতে হবে, যাই হোক না কেন, যদি এর কোনও কারণ থাকে সমাপ্ত হওয়ার পরে ফিরে রিপোর্ট করা, এটির কারণ হতে পারে কিছু অ্যাসিনক্রোনোসিটি (এটি কি একটি শব্দ?) চলছে। আমি মনে করি একটি থ্রেড চালানো বা কোনও সার্ভারের সাথে যোগাযোগ করা যুক্তি যা আপনার আদেশে হওয়া উচিত নয়। এটি কিছুটা মেটা যুক্তি এবং বিতর্কিত হতে পারে। আপনি যদি মনে করেন এটি কোনও অর্থবোধ করে না, দয়া করে মন্তব্যগুলিতে আমাকে জানান।

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


যেহেতু নিদর্শনগুলি বিমূর্ত, তাই ভাল বাস্তব বিশ্বের রূপক নিয়ে আসা কঠিন be এখানে একটি প্রচেষ্টা:

"আরে দাদিমা, আপনি কি দয়া করে টিভিতে রেকর্ড বোতামটি 12 টায় চাপতে পারেন যাতে আমি চ্যানেল 1-তে সিম্পসনগুলি মিস করি না?"

আমার দাদী জানেন না প্রযুক্তিগতভাবে কী হয় যখন সে সেই রেকর্ড বোতামটি হিট করে। যুক্তিটি অন্য কোথাও (টিভিতে)। এবং এটি একটি ভাল জিনিস। কার্যকারিতাটি ক্যাপসুলেটেড এবং তথ্যটি কমান্ড থেকে গোপন করা হয়েছে, এটি এপিআই-র একজন ব্যবহারকারী, অগত্যা যুক্তির অংশ নয় ... ওহ জিজ আমি আবার গুঞ্জন শব্দের বব্লব করছি, আমি এখন এই সম্পাদনাটি আরও ভাল করে শেষ করব।


আপনি সঠিক, আমি এটি সম্পর্কে এটি ভাবিনি। তবে কমান্ড প্যাটার্নটি 100% ভাল ফিট নয় কারণ অপারেশনের যুক্তি অন্য শ্রেণিতে আবদ্ধ করা হয়েছে এবং আমি এটি কমান্ডের অবজেক্টের ভিতরে রাখতে পারি না। এই শ্রেণীটিকে কমান্ড বলা এবং তারপরে যুক্তি না রাখলে ডাব্লুটিএফ-ওয়াই হবে।
জিভ

এই ধারণা অনেক জ্ঞান এর. অপারেশনআইডেন্টিফায়ার নয়, অপারেশন ফিরিয়ে নেওয়ার বিষয়টি বিবেচনা করুন। এটি সি # টিপিএল এর সমান যেখানে আপনি কোনও টাস্ক বা টাস্ক <T> ফিরিয়ে দেন। @ জিভ: আপনি বলছেন "অপারেশনের যুক্তিটি অন্য শ্রেণিতে আবদ্ধ হয়।" তবে এর অর্থ কি আপনি এখানে থেকেও সরবরাহ করতে পারবেন না?
মুবি ডিস্ক

@ জিভ আমি পার্থক্য করতে অনুরোধ। আমি আমার উত্তরে যে কারণগুলি যুক্ত করেছি তা একবার দেখুন এবং দেখুন তারা আপনার কোনও অর্থ দেয় কিনা। =)
নর্থ

5

আদিম ধরণের মোড়কের পিছনে ধারণা,

  • ডোমেন নির্দিষ্ট ভাষা প্রতিষ্ঠা করতে
  • ভুল মানগুলি পাস করে ব্যবহারকারীদের দ্বারা করা ভুলকে সীমাবদ্ধ করুন

স্পষ্টতই এটি খুব কঠিন এবং এটি সর্বত্র করা ব্যবহারিক নয়, তবে প্রয়োজনীয় প্রকারগুলি আবদ্ধ করা জরুরী,

উদাহরণস্বরূপ, যদি আপনার ক্লাস অর্ডার থাকে,

Order
{
   long OrderId { get; set; }
   string InvoiceNumber { get; set; }
   string Description { get; set; }
   double Amount { get; set; }
   string CurrencyCode { get; set; }
}

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

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

    Order
    {
       OrderIdType OrderId { get; set; }
       InvoiceNumberType InvoiceNumber { get; set; }
       string Description { get; set; }
       Currency Amount { get; set; }
    }

সুতরাং সবকিছু মোড়ানোর কোনও কারণ নেই, তবে জিনিসগুলি যা আসলে গুরুত্বপূর্ণ।


4

জনগণের মতামত:

আপনার সাধারণত কোনও নতুন ধরণের সংজ্ঞা দেওয়া উচিত নয়!

আদিম বা বেসিক ক্লাসটি মোড়ানোর জন্য একটি নতুন ধরণের সংজ্ঞা দেওয়া হয় কখনও কখনও সিউডো-টাইপ সংজ্ঞায়িত করা হয়। আইবিএম এটিকে এখানে একটি খারাপ অনুশীলন হিসাবে বর্ণনা করেছে (তারা বিশেষত জেনারিকদের সাথে এই ক্ষেত্রে অপব্যবহারের দিকে বিশেষভাবে দৃষ্টি নিবদ্ধ করে))

সিউডোর ধরণগুলি সাধারণ লাইব্রেরির কার্যকারিতা অকেজো করে তোলে।

জাভা এর ম্যাথ ফাংশন সমস্ত সংখ্যার আদিমগুলির সাথে কাজ করতে পারে। তবে আপনি যদি একটি নতুন শ্রেণীর শতাংশের সংজ্ঞা দেন (ডাবল মোড়ানো যা 0 ~ 1 এর মধ্যে হতে পারে) এই সমস্ত ফাংশন অকেজো এবং ক্লাস দ্বারা আবৃত করা দরকার যা (আরও খারাপ) শতাংশ শতাংশের অভ্যন্তরীণ উপস্থাপনা সম্পর্কে জানতে হবে ।

সিউডোর ধরণগুলি ভাইরাল হয়

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

বার্তা গ্রহণ করুন

যতক্ষণ আপনি মোড়ানোর ধরণের ব্যবসায়ের অনেক যুক্তি প্রয়োজন না ততক্ষণ আমি এটি ছদ্ম শ্রেণিতে মোড়ানোর বিরুদ্ধে পরামর্শ দেব। গুরুতর ব্যবসায়ের প্রতিবন্ধকতা থাকলে আপনার কেবলমাত্র একটি ক্লাস মোড়ানো উচিত। অন্যান্য ক্ষেত্রে আপনার ভেরিয়েবলগুলি সঠিকভাবে নামকরণ করার অর্থ বোঝাতে অনেকদূর যেতে হবে।

একটি উদাহরণ:

uintপুরোপুরি কোনও ইউজারআইডি উপস্থাপন করতে পারে, আমরা জাভা এর অন্তর্নির্মিত অপারেটরগুলিতে ব্যবহার করতে পারি uint(যেমন ==) এবং ব্যবহারকারীর আইডির 'অভ্যন্তরীণ অবস্থা' রক্ষা করতে আমাদের ব্যবসায়িক যুক্তির প্রয়োজন নেই।


একমত। সমস্ত প্রোগ্রামিং দর্শন ঠিক আছে, তবে অনুশীলনে আপনাকে এটিকে আরও ভালভাবে
চালিত

আপনি যদি ইউকেতে দরিদ্রতম মানুষের কাছে loansণের জন্য কোনও বিজ্ঞাপন দেখেন তবে আপনি দেখতে পাবেন যে ০.১ পরিসরে ডাবল গুটিয়ে রাখা শতকরা কাজ করে না ...
gnasher729

1
সি / সি ++ / অবজেক্টিভ সিতে আপনি একটি টাইপডেফ ব্যবহার করতে পারেন, যা আপনাকে বিদ্যমান আদিম ধরণের জন্য কেবল একটি নতুন নাম দেয়। অন্যদিকে, আপনার কোডটি অন্তর্নিহিত ধরণের বিষয়ে বিবেচনা করেই কাজ করা উচিত, উদাহরণস্বরূপ যদি আমি uint32_t থেকে uint64_t এ অর্ডারআইড পরিবর্তন করি (কারণ আমার 4 বিলিয়নের বেশি অর্ডার প্রক্রিয়া করা প্রয়োজন)।
gnasher729

আমি আপনার সাহসিকতার জন্য আপনাকে নিম্নোক্ত করব না, তবে সিউডোটাইপস এবং টপরেটেড উত্তরে সংজ্ঞায়িত ধরণগুলি আলাদা। এগুলি এমন ধরণের যা ব্যবসায় নির্দিষ্ট। স্যুইডোটাইপগুলি এমন ধরণের যা এখনও জেনেরিক।
0fnt

@ gnasher729: সি ++ 11 এ ব্যবহারকারীর সংজ্ঞায়িত আক্ষরিকাগুলি রয়েছে যা মোড়ানো প্রক্রিয়াটিকে ব্যবহারকারীর জন্য খুব মিষ্টি করে তোলে : দূরত্ব d = 36.0_mi + 42.0_km; এমএসডিএন.মাইক্রোসফট.এইন.উস
লিবারি

3

সমস্ত টিপস হিসাবে, নিয়ম কখন প্রয়োগ করতে হয় তা জানা দক্ষতা। আপনি যদি টাইপ-চালিত ভাষায় নিজস্ব প্রকার তৈরি করেন তবে টাইপ চেকিং পাবেন get সুতরাং সাধারণত যে একটি ভাল পরিকল্পনা হতে চলেছে।

নামকরণ কনভেনশন পঠনযোগ্যতার মূল চাবিকাঠি। দুটি মিলিত উদ্দেশ্য স্পষ্টভাবে জানাতে পারেন।
তবে /// এখনও কার্যকর।

সুতরাং হ্যাঁ, আমি বলব যখন তাদের জীবনকাল কোনও শ্রেণির সীমার বাইরে না হয় তখন অনেকগুলি নিজস্ব প্রকার তৈরি করুন। উভয় Structএবং Classসর্বদা ক্লাস নয় এর ব্যবহার বিবেচনা করুন ।


2
কী ///মানে?
গ্যাবে

1
/// হ'ল সি # তে ডকুমেন্টেশন মন্তব্য যা ইন্টেলিজেন্সকে কল পদ্ধতিতে স্বাক্ষরের ডকুমেন্টেশনগুলি প্রদর্শন করতে দেয়। কোড নথির সেরা উপায় বিবেচনা করুন। সরঞ্জাম দ্বারা ফার্মেড করা যেতে পারে এবং বুদ্ধিমান আচরণে পৌঁছাতে পারে। msdn.microsoft.com/en-us/library/tkxs89c5%28v=vs.71%29.aspx
ফিল soady
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.