সাধারণত, আপনার ডেটা সম্ভব হওয়ার জন্য আপনার সর্বদা সুনির্দিষ্ট ডেটা টাইপ ব্যবহার করা উচিত।
উদাহরণস্বরূপ, আপনি যদি কোনও ডাটাবেস থেকে ডেটা টানতে সত্ত্বা ফ্রেমওয়ার্ক ব্যবহার করছেন, EF স্বয়ংক্রিয়ভাবে ডেটাবেজে ব্যবহৃত একের নিকটবর্তী ডেটা টাইপটি ব্যবহার করবে।
সি # তে এটি নিয়ে দুটি সমস্যা রয়েছে।
প্রথমত, বেশিরভাগ সি # বিকাশকারী int
পুরো সংখ্যাটি উপস্থাপন করতে (কেবলমাত্র ব্যবহারের কারণ না থাকলে long
) ব্যবহার করেন । এর অর্থ হ'ল অন্যান্য বিকাশকারীরা ডেটা প্রকারটি পরীক্ষা করতে ভাবেন না, তাই তারা উপরে উল্লিখিত ওভারফ্লো ত্রুটিগুলি পাবেন। দ্বিতীয়, এবং আরও জটিল সমস্যা হল, / ছিল .NET এর মূল গাণিতিক অপারেটর শুধুমাত্র সমর্থিত int
, uint
, long
, ulong
, float
, ডবল, এবং decimal
*। এটি আজও একই অবস্থানে রয়েছে ( সি # 5.0 ভাষার ক্ষেত্রে অনুচ্ছেদ 7.8.4 দেখুন )। আপনি নিম্নলিখিত কোডটি ব্যবহার করে নিজে এটি পরীক্ষা করতে পারেন:
byte a, b;
a = 1;
b = 2;
var c = a - b; //In visual studio, hover over "var" and the tip will indicate the data type, or you can get the value from cName below.
string cName = c.GetType().Namespace + '.' + c.GetType().Name;
আমাদের byte
- এর ফলাফল byte
একটি int
( System.Int32
)।
এই দুটি সমস্যা "সম্পূর্ণ সংখ্যার জন্য কেবলমাত্র ব্যবহারের" অনুশীলনের জন্ম দিয়েছে যা এত সাধারণ so
সুতরাং আপনার প্রশ্ন, এ সি # এটি সাধারণত বিদ্ধ করা একটি ভাল ধারণা উত্তর দিতে int
যদি না:
- একটি স্বয়ংক্রিয় কোড জেনারেটর একটি আলাদা মান ব্যবহার করেছে (যেমন সত্তা ফ্রেমওয়ার্ক)।
- প্রকল্পের অন্য সমস্ত বিকাশকারী সচেতন যে আপনি কম সাধারণ ডেটা প্রকারগুলি ব্যবহার করছেন (আপনি কীভাবে ডেটা ব্যবহার করেছেন এবং কেন ব্যবহার করেছেন তা নির্দেশ করে একটি মন্তব্য অন্তর্ভুক্ত করুন)।
- কম সাধারণ তথ্য প্রকারগুলি ইতিমধ্যে প্রকল্পে সাধারণত ব্যবহৃত হয়।
- প্রোগ্রামটির জন্য কম প্রচলিত ডেটা টাইপের সুবিধাগুলি প্রয়োজন (আপনার এগুলির মধ্যে আপনার 100 মিলিয়ন র্যাম রাখতে হবে, সুতরাং একটি
byte
এবং একটি int
বা একটি int
এবং এর মধ্যে পার্থক্যটি long
সমালোচক, বা ইতিমধ্যে উল্লিখিত স্বাক্ষরযুক্ত পাটিগণিতের পার্থক্য)।
আপনার যদি ডেটাতে গণিত করার দরকার হয় তবে সাধারণ ধরণের সাথে আঁকুন।
মনে রাখবেন, আপনি এক প্রকার থেকে অন্য প্রকারে কাস্ট করতে পারেন। এটি কোনও সিপিইউ স্ট্যান্ড পয়েন্ট থেকে কম দক্ষ হতে পারে, সুতরাং আপনি সম্ভবত 7 টি সাধারণ ধরণের একটি দিয়ে ভাল হয়ে থাকেন তবে প্রয়োজনে এটি একটি বিকল্প।
enum
উপরোক্ত নির্দেশিকাগুলিতে আমার ব্যক্তিগত ব্যতিক্রমগুলির মধ্যে এনুমারেশনগুলি ( )। আমার কাছে যদি কেবল কয়েকটি বিকল্প থাকে তবে আমি এনামকে বাইট বা সংক্ষিপ্ত হিসাবে নির্দিষ্ট করব । যদি আমার পতাকাঙ্কিত এনুমে শেষ বিটটি লাগে তবে আমি প্রকারটি নির্দিষ্ট করে করব uint
যাতে আমি হেক্স ব্যবহার করে পতাকাটির মান নির্ধারণ করতে পারি।
আপনি যদি মান সীমাবদ্ধ কোড সহ কোনও সম্পত্তি ব্যবহার করেন তবে সংক্ষিপ্ত ট্যাগটিতে কী কী বিধিনিষেধ রয়েছে এবং তা কেন তা ব্যাখ্যা করতে ভুলবেন না।
* নেট # এর পরিবর্তে সি # এলিয়াস ব্যবহার করা হয় System.Int32
কারণ এটি একটি সি # প্রশ্ন।
দ্রষ্টব্য: .NET বিকাশকারীদের একটি ব্লগ বা নিবন্ধ ছিল (যা আমি খুঁজে পাচ্ছি না), যা সীমিত সংখ্যার গাণিতিক ক্রিয়াকলাপগুলির সীমাবদ্ধতার কারণ এবং তারা কেন এটি নিয়ে উদ্বিগ্ন হয়নি তা উল্লেখ করেছিল। আমার মনে আছে, তারা ইঙ্গিত করেছে যে অন্যান্য ডেটা ধরণের জন্য তাদের সমর্থন যোগ করার কোনও পরিকল্পনা নেই plans
দ্রষ্টব্য: জাভা স্বাক্ষরবিহীন ডেটা ধরণের সমর্থন করে না এবং এর আগে 8 বা 16 বিট পুরো সংখ্যার জন্য সমর্থন ছিল না। যেহেতু অনেক সি # বিকাশকারী জাভা ব্যাকগ্রাউন্ড থেকে এসেছে বা উভয় ভাষায়ই কাজ করার প্রয়োজন ছিল, তাই এক ভাষার সীমাবদ্ধতা কখনও কখনও অন্য ভাষায় কৃত্রিমভাবে চাপিয়ে দেওয়া হত।