অন্যান্য ভাল উত্তরের পাশাপাশি, আমি সি-স্টাইলের দৃ const়তা সি # তে না রাখার আরও একটি কারণ যুক্ত করব। তুমি বলেছিলে:
আমরা পরামিতিটিকে কনস্ট হিসাবে চিহ্নিত করি যাতে নিশ্চিত হয়ে যায় যে তার রাজ্যটি পদ্ধতিতে পরিবর্তিত হবে না।
কনস্ট যদি বাস্তবে এটি করে থাকে তবে তা দুর্দান্ত হবে। কনস্ট এটি করে না। কনস্ট মিথ্যা!
কনস্ট কোনও গ্যারান্টি সরবরাহ করে না যা আমি আসলে ব্যবহার করতে পারি। ধরুন আপনার কাছে এমন একটি পদ্ধতি রয়েছে যা কোনও কনস্ট জিনিস নেয়। দুটি কোড লেখক রয়েছে: কলার লেখার ব্যক্তি এবং কলি লেখার ব্যক্তি । কলি লেখক এই পদ্ধতিটিকে একটি দৃ const়তা তৈরি করেছেন made দুটি লেখক কী ধারণা করতে পারেন যে বিষয়টি সম্পর্কে অদৃশ্য?
কিছুই নেই। কলিটি কনস্টকে ফেলে দিতে এবং অবজেক্টটিকে রূপান্তর করতে মুক্ত, সুতরাং কলারের কোনও গ্যারান্টি নেই যে কোনও পদ্ধতিতে কনস্ট গ্রহণ করা আসলে এটি কল করতে পারে না। একইভাবে, কলি ধরে নিতে পারে না যে কলির ক্রিয়া জুড়ে অবজেক্টের বিষয়বস্তু পরিবর্তন হবে না; কলি কনট কনট অবজেক্টের নন কনস্টের ওরফে কিছু পরিবর্তনকারী পদ্ধতি কল করতে পারে এবং এখন তথাকথিত কনস্ট অবজেক্টটি পরিবর্তিত হয়েছে ।
সি-স্টাইল কনস্ট কোনও গ্যারান্টি সরবরাহ করে না যে বস্তুটি পরিবর্তিত হবে না, এবং তাই এটি ভেঙে গেছে। এখন, সি এর মধ্যে ইতিমধ্যে একটি দুর্বল টাইপ সিস্টেম রয়েছে যাতে আপনি যদি সত্যিই চান তবে ডাবলটির একটি ডাবল্টের পুনরায় ব্যাখ্যা করতে পারবেন, সুতরাং এটি অবাক হওয়ার মতো বিষয় নয় যে এটি কনস্টের ক্ষেত্রেও দুর্বল টাইপ সিস্টেম রয়েছে। তবে সি # একটি ভাল টাইপ সিস্টেমের জন্য ডিজাইন করা হয়েছিল , একটি টাইপ সিস্টেম যেখানে আপনি যখন "এই ভেরিয়েবলটির একটি স্ট্রিং রয়েছে" বলবেন যে ভ্যারিয়েবলটি আসলে একটি স্ট্রিংয়ের (বা নাল) রেফারেন্স ধারণ করে । আমরা টাইপ সিস্টেমে একেবারে সি স্টাইলের "কনস্ট" সংশোধক রাখতে চাই না কারণ আমরা চাই না টাইপ সিস্টেমটি মিথ্যা হোক । আমরা চাই টাইপ সিস্টেমটি শক্তিশালী হোক যাতে আপনি আপনার কোড সম্পর্কে সঠিক যুক্তি দিতে পারেন ।
কনস্ট ইন সি একটি গাইডলাইন ; এর মূল অর্থ "আপনি এই জিনিসটিকে পরিবর্তনের চেষ্টা না করার জন্য আমাকে বিশ্বাস করতে পারেন"। এটি টাইপ সিস্টেমে থাকা উচিত নয় ; উপাদান টাইপ সিস্টেম একটি হওয়া উচিত সত্য বস্তু সম্পর্কে আপনি সম্পর্কে একটি না যুক্তি করতে গাইডলাইন ব্যবহারের জন্য।
এখন, আমাকে ভুল করবেন না; কেবল সিটিতে কনস্টের গভীরভাবে ভাঙ্গার অর্থ এই নয় যে পুরো ধারণাটি অকেজো। আমি যা দেখতে পছন্দ করব তা হ'ল সি # তে "কনস্ট" টীকাটির কিছু সঠিক এবং দরকারী ফর্ম, এমন একটি টিকা যা মানব এবং সংকলক উভয়ই কোডটি বুঝতে তাদের সহায়তা করতে পারে এবং রানটাইমটি স্বয়ংক্রিয় প্যারালাইলেজেশন এবং জিনিসগুলির মতো কাজ করতে পারে অন্যান্য উন্নত অপ্টিমাইজেশন।
উদাহরণস্বরূপ, কল্পনা করুন যে আপনি কোডের কুঁড়ির চারপাশে "একটি বাক্স আঁকতে" এবং বলতে পারেন "আমি গ্যারান্টি দিচ্ছি যে কোডের এই হাঙ্ক এই শ্রেণীর কোনও ক্ষেত্রে কোনও রূপান্তর সম্পাদন করে না" এমনভাবে যা সংকলক দ্বারা পরীক্ষা করা যেতে পারে। অথবা একটি বাক্স আঁকুন যা বলে যে "এই খাঁটি পদ্ধতিটি বস্তুর অভ্যন্তরীণ অবস্থাকে পরিবর্তিত করে তবে বাক্সের বাইরে পর্যবেক্ষণযোগ্য কোনও উপায়ে নয়"। এই জাতীয় বস্তুটি স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয়ভাবে বহু- থ্রেডড হতে পারে না তবে এটি স্বয়ংক্রিয়ভাবে মেমোমাইজ হতে পারে । এখানে এমন সব ধরণের আকর্ষণীয় টীকা রয়েছে যা আমরা কোডটিতে রাখতে পারি যা সমৃদ্ধ অপ্টিমাইজেশন এবং গভীর বোঝার সক্ষম করে। দুর্বল সি-স্টাইলের কনস্টেট টীকাগুলির চেয়ে আমরা আরও ভাল করতে পারি।
যাইহোক, আমি জোর দিয়ে বলছি যে এটি কেবল জল্পনা মাত্র । আমাদের মধ্যে এই ধরণের বৈশিষ্ট্যটি সি # এর কোনও অনুমানমূলক ভবিষ্যতের সংস্করণে রাখার কোনও দৃ firm় পরিকল্পনা নেই, যদি এমন একটি থাকে যা আমরা একভাবে বা অন্যভাবে ঘোষণা করি নি। এটি এমন কিছু যা আমি দেখতে পছন্দ করব এবং মাল্টি-কোর কম্পিউটিংয়ের জন্য আগত জোর প্রয়োজন হতে পারে এমন কিছু, তবে এর কোনওটিই সি # এর জন্য কোনও নির্দিষ্ট বৈশিষ্ট্য বা ভবিষ্যতের দিকনির্দেশনা বা ভবিষ্যদ্বাণী হিসাবে গণ্য করা উচিত নয়।
এখন, আপনি যা চান তা যদি স্থানীয় ভেরিয়েবলের উপর কেবল একটি টীকা থাকে যা একটি প্যারামিটার বলে যে "এই প্যারামিটারটির মান পুরো পদ্ধতিতে পরিবর্তিত হয় না", তবে, নিশ্চিত, এটি সহজেই হয়ে যায়। আমরা "পঠনযোগ্য" স্থানীয় এবং প্যারামিটারগুলি সমর্থন করতে পারি যা একবার শুরু করা হবে এবং পদ্ধতিতে পরিবর্তনের জন্য একটি সংকলন-সময় ত্রুটি। "ব্যবহার করে" বিবৃতি দ্বারা ঘোষিত চলকটি ইতিমধ্যে একটি স্থানীয়; আমরা সমস্ত স্থানীয় এবং প্যারামিটারগুলিকে "ব্যবহারের" ভেরিয়েবলগুলির মতো কাজ করার জন্য একটি alচ্ছিক টীকা যুক্ত করতে পারি। এটি কখনই খুব উচ্চ অগ্রাধিকার বৈশিষ্ট্য ছিল না তাই এটি কখনও প্রয়োগ করা হয়নি।