এটি আপনার পক্ষে যোগ্যতা অর্জন করে কিনা তা নিশ্চিত করুন, তবে স্ট্যান্ডার্ড এমএলের মতো ক্রিয়ামূলক ভাষায় সমস্ত কিছু ডিফল্টরূপে অপরিবর্তনীয়। পরিব্যক্তি জেনেরিক ref
ইরেন টাইপের মাধ্যমে সমর্থিত । সুতরাং একটি int
পরিবর্তনশীল অপরিবর্তনীয়, এবং একটি ref int
পরিবর্তনশীল এর জন্য একটি পরিবর্তনীয় ধারক int
। মূলত, ভেরিয়েবলগুলি গাণিতিক অর্থে (একটি অজানা তবে স্থির মান) আসল পরিবর্তনশীল এবং ref
এসগুলি অত্যাবশ্যক প্রোগ্রামিং অর্থে "ভেরিয়েবল" - এমন একটি মেমরি সেল যা থেকে লেখা ও পড়তে পারে। (আমি তাদের এসাইনিয়েবল বলতে পছন্দ করি ))
আমি মনে করি সমস্যাটি const
দ্বিগুণ। প্রথমত, সি ++ এর মধ্যে আবর্জনা সংগ্রহের অভাব রয়েছে, যা অপ্রয়োজনীয় ধ্রুবক ডেটা কাঠামো থাকা দরকার ।const
যে কোনও ধারণা তৈরি করতে অবশ্যই গভীর হতে হবে, তবুও সি ++ এ সম্পূর্ণরূপে অপরিবর্তনীয় মানগুলি অবৈধ।
দ্বিতীয়ত, সি ++ এ আপনাকে const
এটি থেকে বেরিয়ে আসার পরিবর্তে অনির্বাচন করতে হবে। তবে যখন আপনি const
কোনও কিছু ভুলে যান এবং পরে এটি ঠিক করেন, আপনি @ রবিওয়্যার এর উত্তরে উল্লিখিত "কনস্টের বিষ" পরিস্থিতি শেষ করবেন যেখানে const
পরিবর্তনটি কোডজুড়ে ক্যাসকেড করবে। যদি const
ডিফল্ট হয়, তবে আপনি নিজেকে const
বিপরীতমুখীভাবে প্রয়োগ করতে পারবেন না । অতিরিক্তভাবে, const
সর্বত্র সংযুক্ত করে কোডে প্রচুর শব্দ যোগ করে।
আমি সন্দেহ করি যে মূলধারার ভাষাগুলি অনুসরণ করেছে (যেমন জাভা) সি এবং সি ++ এর সাফল্য এবং চিন্তাভাবনার দ্বারা ভারী আকার ধারণ করেছিল। ঘটনাচক্রে এমনকি আবর্জনা সংগ্রহের সাথেও বেশিরভাগ ভাষার সংগ্রহের এপিআইগুলি পরিবর্তনীয় ডেটা কাঠামো ধরে নেয়। কর্নার কেস হিসাবে সমস্ত কিছু পরিবর্তনীয় এবং অপরিবর্তনযোগ্যতা দেখা যায় জনপ্রিয় ভাষার পিছনে অপরিহার্য মানসিকতা সম্পর্কে খোলামেলা কথা বলে।
সম্পাদনা : গ্রিনল্ডম্যানের মন্তব্যকে প্রতিবিম্বিত করার পরে আমি বুঝতে পেরেছি যে const
ডেটার অপরিবর্তনীয়তা সম্পর্কে সরাসরি নয়;const
উদাহরণে এর পার্শ্ব প্রতিক্রিয়া রয়েছে কিনা তা পদ্ধতির প্রকারে এনকোড করে।
সাধারণভাবে স্বচ্ছ আচরণ অর্জনের জন্য মিউটেশন ব্যবহার করা সম্ভব । মনে করুন আপনার এমন একটি ফাংশন রয়েছে যা ডাকা হয় যখন ধারাবাহিকভাবে বিভিন্ন মান প্রদান করে - উদাহরণস্বরূপ, এমন একটি ফাংশন যা থেকে কোনও একক অক্ষর পড়ে stdin
। মানগুলির একটি স্বচ্ছ প্রবাহ তৈরি করতে আমরা এই ফাংশনটির ফলাফলগুলি ক্যাশে / স্মৃতিচারণ করতে পারি। স্ট্রিমটি একটি লিঙ্কযুক্ত তালিকা হবে যার নোডগুলি প্রথমবার যখন আপনি তাদের মান পুনরুদ্ধার করার চেষ্টা করবেন তখন সেই ফাংশনটি কল করবে তবে ফলাফলটি ক্যাশে করবে। সুতরাং যদি stdin
স্থির থাকে Hello, world!
, প্রথমবার আপনি প্রথম নোডের মান পুনরুদ্ধার করার চেষ্টা করবেন, এটি একটি পড়ে char
এবং ফিরে আসবে H
। এরপরে এটির ফিরে চালিয়ে যাবেনH
পড়ার জন্য আরও কল ছাড়াইchar
। তেমনি, দ্বিতীয় নোড একটি char
থেকে পড়া হবেstdin
প্রথমবার আপনি যখন এর মান পুনরুদ্ধার করার চেষ্টা করবেন, এবার ফিরে আসছেন e
এবং সেই ফলাফলটি ক্যাশে করছেন।
এখানে আকর্ষণীয় বিষয়টি হ'ল আপনি এমন একটি প্রক্রিয়া চালু করেছেন যা অন্তর্নিহিতভাবে রাষ্ট্রীয় বলে মনে হয় রাষ্ট্রহীন object তবে এটি অর্জনের জন্য বস্তুর অভ্যন্তরীণ অবস্থার (ফলাফলগুলি ক্যাশে করে) পরিবর্তন করা দরকার ছিল - রূপান্তরটি ছিল সৌম্যর প্রভাব । আমাদের এটিকে তৈরি করা অসম্ভব CharStream
const
যদিও স্ট্রিমটি এক পরিবর্তনীয় মূল্যের মতো আচরণ করে । এখন ভাবুন পদ্ধতিগুলির Stream
সাথে একটি ইন্টারফেস রয়েছে const
এবং আপনার সমস্ত ফাংশন আশা করে const Streams
। আপনি CharStream
ইন্টারফেস বাস্তবায়ন করতে পারবেন না!
( সম্পাদনা 2: স্পষ্টতই একটি সি ++ কীওয়ার্ড বলা হয়েছে mutable
যা আমাদের প্রতারণা করতে এবং তৈরি করতে দেয়CharStream
const
However তবে, এই ফাঁকটির const
গ্যারান্টি নষ্ট করে - এখন আপনি সত্যিকার অর্থে নিশ্চিত হতে পারবেন না যে কোনও কিছু এর মাধ্যমে পরিবর্তিত হবে না)const
পদ্ধতির I আমি মনে করি এটি এমন নয় খারাপ যেহেতু আপনাকে অবশ্যই স্পষ্টভাবে লুফোলটির জন্য অনুরোধ করতে হবে তবে আপনি এখনও সম্মান ব্যবস্থার উপর সম্পূর্ণ নির্ভরশীল))
দ্বিতীয়ত, ধরুন আপনার হাই-অর্ডার ফাংশন রয়েছে - এটি হ'ল আপনি অন্য ফাংশনে যুক্তি হিসাবে ফাংশনগুলি পাস করতে পারেন। const
নেস একটি ফাংশনের স্বাক্ষরের অংশ, সুতরাং আপনি const
ফাংশনগুলির প্রত্যাশা const
করে এমন ফাংশনগুলির পক্ষে যুক্তি হিসাবে অ- ফাংশনগুলি পাস করতে সক্ষম হবেন না । অন্ধভাবে বলপূর্বকconst
এখানে করলে সাধারণতার ক্ষতি হয়।
অবশেষে, কোনও const
বস্তুর কারসাজ করা গ্যারান্টি দেয় না যে এটি আপনার পিঠের পিছনে কিছু বাহ্যিক (স্থির বা বৈশ্বিক) রাষ্ট্রকে রূপান্তর করছে না notconst
করছে না এর গ্যারান্টিগুলি প্রাথমিকভাবে প্রদর্শিত হওয়ার সাথে ততটা শক্তিশালী নয়।
এটি আমার কাছে পরিষ্কার নয় যে টাইপ সিস্টেমে পার্শ্ব প্রতিক্রিয়াগুলির উপস্থিতি বা অনুপস্থিতি এনকোড করা সর্বজনীনভাবে ভাল জিনিস।