আমি "কেন নয়" প্রশ্নগুলিকে পিছনে ঠেলেছি কারণ প্রথম, উত্তরগুলি প্রায় সন্তোষজনক নয় - আপনি ইতিমধ্যে উত্তরটি অর্জন করেছেন "বৈশিষ্ট্যটি আপনি এটি চান এমন উপায় নয় কারণ স্পেসিফিকেশন আপনি যা বলতে চান তা বলে না" , যা আমি কল্পনা করি না এটি একটি বিশেষ সন্তুষ্ট উত্তর ছিল না। দ্বিতীয়ত, ডিজাইন দলটিকে ন্যায়সঙ্গত করতে হবে না যে পৃথিবী আপনি যেভাবে চান তা কেন নয় ; বৈশিষ্ট্যগুলি নিখরচায় বিদ্যমান নেই এবং তারপরে ভাষার বাইরে ডিজাইন করা হয়েছে; পরিবর্তে, বৈশিষ্ট্যগুলি প্রথমে ন্যায়সঙ্গত হতে হবে এবং তারপরে ডিজাইন করা উচিত।
সুতরাং আসুন আপনার "কেন নয়" প্রশ্নটি আরও কিছুটা খাস্তা করার চেষ্টা করি। বিদ্যমান বৈশিষ্ট্যটি হ'ল "একটি অ্যারে ইনিশিয়ালাইজার ব্যবহার করা যেতে পারে (ক) একটি সূচনাতে সমান ডান দিকে বা (খ) অ্যারের ধরণের একটি অবজেক্ট নির্মাণের ডানদিকে।" প্রস্তাবিত বৈশিষ্ট্যটি হ'ল: "একটি অ্যারে ইনিশিয়ালাইজারটি এক্সপ্রেশন হিসাবেও ব্যবহৃত হতে পারে"। প্রশ্নটি "এরিক প্রস্তাবিত বৈশিষ্ট্যটি নিয়ে কী সমালোচনা করবেন?"
আমি প্রথম সমালোচনা করব যে এটি প্রকাশের ধরণটি কী তা পরিষ্কার নয়। একটি ভেরিয়েবল ইনিশিয়ালাইজারে আপনার ভেরিয়েবলের ধরণ থাকে এবং একটি অবজেক্ট তৈরির এক্সপ্রেশনে আপনার অবজেক্টের ধরণ থাকে; এই উভয় থেকে আমরা নির্মিত অ্যারের ধরণের করতে পারি। উভয়ই ইঙ্গিত ছাড়াই আমাদের কোন ধরণের অনুমান করা উচিত?
সি # 1.0 এ, যখন এই বৈশিষ্ট্যটি যুক্ত করা হয়েছিল, তখন ভাষায় তৈরি করা হয়েছিল শূন্য প্রকারের এক বৃহত আকার। সি # এর প্রথম দিনগুলির একটি নকশার নীতিটি ছিল "কোনও আশ্চর্য" নয়, এবং সংকলকটি "খুব স্মার্ট" ছিল না। বিকাশকারী যদি কোনও অভিব্যক্তিটি নির্দিষ্ট ধরণের হতে চান তবে সেই ধরণেরটি কোনওভাবেই প্রকাশের ক্ষেত্রে স্পষ্ট হওয়া উচিত। যখন আপনি বলে
new double[] { 1, 2, 3.4 }
এটি কি ধরণের উদ্দেশ্য তা বেশ পরিষ্কার। একইভাবে
new Animal[] { cat, dog, null }
প্রস্তাবিত বৈশিষ্ট্যটি এই নীতিটিকে লঙ্ঘন করে। অভিব্যক্তিটির অবশ্যই একটি প্রকার থাকতে হবে তবে যুক্তিটির ধরণ কী তা তা কোনওভাবেই পরিষ্কার হয় না
M({cat, dog, null})
অধিকন্তু: ধরুন আমাদের দুটি ওভারলোড হয়েছে Mযার একটির মধ্যে একটি অ্যারে নেয় Animalএবং অন্যটি অ্যারে নেয় IPet। কোন ওভারলোড Mপ্রযোজ্য? একটি রূপান্তর অন্যর চেয়ে ভাল? উপাদানগুলির ধরণগুলি হ'ল Catএবং Dog; এমন কোনও ধরণের সংস্থান করা কী বোঝায় যে এটি সেখানে উপস্থিত হয় না? এগুলি এমন সমস্ত প্রশ্ন যা অবশ্যই ডিজাইন দল দ্বারা বিবেচনা করা উচিত এবং এগুলি এমন প্রশ্ন যাগুলির কোনও কারণেই সুস্পষ্ট উত্তর নেই। প্রস্তাবিত বৈশিষ্ট্যটি আপনাকে বেশ স্বল্প ক্রমে গভীর জলে নিয়ে যায়।
এখন, সি # 3.0 এই সমস্যাটি সমাধান করে কারণ সি # 3.0 অসংখ্য বৈশিষ্ট্য যুক্ত করেছে যেখানে সংকলক বিকাশকারীর পক্ষে প্রকারভেদ করে। "কোনও আশ্চর্যের কিছু নেই" এবং "সাধারণ নিয়ম" সম্পর্কে পূর্ববর্তী নীতিগুলি লিনকিউকে কাজ করার জন্য প্রয়োজনীয় অন্যান্য ডিজাইনের নীতিগুলির সাথে সাংঘর্ষিক ছিল। আপনার প্রস্তাবিত বৈশিষ্ট্যটি কি সি # 3.0 এ যুক্ত করা উচিত?
এটা হতে পারতো. বৈশিষ্ট্যটি আসলে সি # 3.0 এ যুক্ত হয়েছিল:
new[] { x, y, z }
অ্যালগরিদম ব্যবহার করে অ্যারের প্রকারটি অনুমান করা হয়: যে উপাদানগুলির মধ্যে প্রকার রয়েছে সেগুলির জন্য অভিব্যক্তি গ্রহণ করুন, এই ধরণেরগুলির মধ্যে কোনটি অনন্য সর্বাধিক সাধারণ ধরণের যা অন্যান্য সমস্ত অভিব্যক্তি রূপান্তরযোগ্য, এবং যদি এই ধরণের উপস্থিত থাকে তবে তা চয়ন করুন। অন্যথায় একটি ত্রুটি উত্পাদন,
এই বৈশিষ্ট্যটি Thatচ্ছিক করতে আরও শিথিল করা যেতে পারে new[]। এটি করা হয়নি।
এখন, আপনি যদি আমাকে সি # 3.0 টাইমফ্রেমে প্রস্তাবিত বৈশিষ্ট্যটির সমালোচনা করতে বলেছিলেন তবে আমি চিহ্নিত করতাম যে (1) সি # 3.0 সংকলকটি ইতিমধ্যে পুরো প্রকাশের সময়সূচী পিছলে যাওয়ার মারাত্মক বিপদে রয়েছে, সুতরাং আসুন আমরা আর যুক্ত না করি পুরোপুরি অপ্রয়োজনীয় বৈশিষ্ট্যটির জন্য ডিজাইন, বাস্তবায়ন এবং পরীক্ষার বোঝা যা ব্যবহারকারীর ছয়টি কীস্ট্রোক সংরক্ষণ করে এবং (2) সি # 3.0 এছাড়াও সংগ্রহের সূচনা যোগ করেছে:
new List<int>() { 10, 20, 30 }
কেন {10, 20, 30}স্বয়ংক্রিয়ভাবে একটি অ্যারে হওয়া উচিত ? এটা কেন হবে না List<int>? বা অন্যান্য ধরণের কোন একটি? অ্যারের প্রতি পক্ষপাতিত্ব কেন? মনে রাখবেন, একবার আমরা অ্যারেগুলির জন্য সিনট্যাক্সটি সন্নিবিষ্ট করা বেছে নিলে আমরা চিরকালের জন্য এটিতে আটকে আছি । এটি কখনও অন্য কিছু হতে পারে না, সুতরাং প্রস্তাবিত বৈশিষ্ট্যটি কেবল অপ্রয়োজনীয় নয়, এটি ভবিষ্যতের সম্ভাব্য বৈশিষ্ট্যগুলিও প্রশ্রয়জনক বলে মনে করে preven
সংশ্লেষ: প্রস্তাবিত বৈশিষ্ট্যটি সি # 1.0 এর কিছু নকশার নীতিগুলি সরাসরি লঙ্ঘন করেছে। এটি সি # 3.0 তে অপ্রয়োজনীয় বোঝা ব্যতীত আর কিছুই যুক্ত করে না। সি # 3.0 থেকে ভাষার সমস্ত সংস্করণে, প্রস্তাবিত বৈশিষ্ট্যটির আরও অনেক উপযুক্ত বৈশিষ্ট্যগুলির চেয়ে এটিতে সময়, প্রচেষ্টা এবং অর্থ ব্যয় করার সুপারিশ করার পক্ষে কোনও ভাল যুক্তি নেই।
অতএব, এ জাতীয় কোনও বৈশিষ্ট্য নেই।