কেন সি # তে যৌগিক অ্যাসাইনমেন্ট অপারেটরটি ওভারলোড করা সম্ভব হচ্ছে না?


11

শিরোনামটি বিভ্রান্তিমূলক, সুতরাং দয়া করে পুরো প্রশ্নটি পড়ুন :-)

দ্বারা "যৌগ নিয়োগ অপারেটর" আমি মনের মধ্যে এই মত একটি কনস্ট্রাক্ট আছে op=উদাহরণস্বরূপ, +=। খাঁটি এসাইনমেন্ট অপারেটর ( =) আমার প্রশ্নের সাথে সম্পর্কিত নয়।

"কেন" দ্বারা আমি কোনও মতামত বোঝাতে চাই না, তবে কিছু ডিজাইনার বা তাদের সহকর্মী ইত্যাদি যখন যুক্তিটি প্রকাশ করেন (অর্থাত্ নকশা পছন্দসই উত্স ) তখন সম্পদ (বই, নিবন্ধ, ইত্যাদি) বোঝায় না ।

সি ++ এবং সি # তে পাওয়া অসম্পূর্ণতা দেখে আমি বিস্মিত হই ( হ্যাঁ, আমি জানি সি # সি ++ 2.0 নয় ) - সি ++ এ আপনি অপারেটরটি ওভারলোড করবেন +=এবং তারপরে প্রায় স্বয়ংক্রিয়ভাবে +পূর্বনির্ধারিত অপারেটরের উপর নির্ভর করে উপযুক্ত অপারেটর লিখবেন । সি # এ এটি বিপরীত - আপনি ওভারলোড +এবং আপনার +=জন্য সংশ্লেষিত।

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

এবং আমি ভাবছি যে সুবিধাটি কী - তাই যদি আপনি কোনও সি # বই, টেক-টক ভিডিও, ব্লগ এন্ট্রিতে ব্যাখ্যাটি দেখেন তবে আমি রেফারেন্সের জন্য কৃতজ্ঞ হব।

সবচেয়ে কাছের জিনিসটি আমি পেয়েছি এরিক লিপার্ট ব্লগের একটি মন্তব্য কেন ওভারলোডেড অপারেটররা সর্বদা সি # তে স্থির থাকে? টম ব্রাউন দ্বারা। যদি স্থির ওভারলোডিং প্রথমে সিদ্ধান্ত নেওয়া হয় তবে এটি কেবল আদেশ দেয় যে স্ট্রাক্টগুলির জন্য কোন অপারেটরগুলি ওভারলোড করা যায়। এটি আরও নির্দেশ করে যা ক্লাসগুলির জন্য ওভারলোড করা যায়।


3
নতুন সি ++ স্টাইলের জন্য আপনার কি কোনও লিঙ্ক আছে? নির্লজ্জভাবে, ওভারলোডিং +=প্রথমে অযৌক্তিক বলে মনে হয়; আপনি কেন এটির অংশগুলির চেয়ে সম্মিলিত অপারেশনটি ওভারলোড করবেন?
টেলাস্টিন

1
আমি বিশ্বাস করি এগুলির জন্য শব্দটি "যৌগিক অ্যাসাইনমেন্ট অপারেটর"।
Ixrec

2
@ গ্রেডনডম্যান টেলাস্টিন সম্ভবত ইঙ্গিত দিচ্ছিলেন যে ++ এর পরিপ্রেক্ষিতে + অন্য দিকের চেয়ে প্রায় প্রাকৃতিক বলে মনে হচ্ছে, কারণ শব্দার্থগতভাবে + = + এবং = এর একটি রচনা। আমার জ্ঞানের সর্বাধিক কাছে , + কল + = থাকা মূলত একটি অনুকূলকরণ কৌশল।
Ixrec

1
@ আইজরেক্স: কখনও কখনও, a + = b অর্থবোধ করে, যখন a = a + b বোঝে না: সেই পরিচয়টি গুরুত্বপূর্ণ হতে পারে, একটি এটিকে নকল করা যায় না, যাই হোক না কেন। কখনও কখনও, a = a + b অর্থ দেয়, যখন a + = b হয় না: অপরিবর্তনীয় স্ট্রিং বিবেচনা করুন। সুতরাং, কোনটি আলাদা করে আলাদাভাবে অতিরিক্ত চাপতে হবে তা সিদ্ধান্ত নেওয়ার সক্ষমতা প্রয়োজন। অবশ্যই, নিখোঁজটিকে অটো-জেনারেট করা, যদি সমস্ত প্রয়োজনীয় বিল্ডিং-ব্লক উপস্থিত থাকে এবং এটি স্পষ্টভাবে অক্ষম না করে, তবে এটি একটি ভাল ধারণা। এমন নয় যে সি # এটিএমকে অনুমতি দেয়, আফিক্স।
হস্তান্তরকারী

4
@ গ্রীনল্ডম্যান - আমি অনুপ্রেরণাটি বুঝতে পেরেছি, তবে ব্যক্তিগতভাবে, আমি *=কোনও রেফারেন্সের প্রকারটিকে রূপান্তরিত করাকে শব্দার্থগতভাবে ভুল বলে মনে করব।
টেলাস্টিন

উত্তর:


12

আমি এর জন্য রেফারেন্সটি খুঁজে পাচ্ছি না, তবে আমার বোঝা ছিল যে সি # টিম অপারেটর ওভারলোডিংয়ের একটি বুদ্ধিমান সাবসেট সরবরাহ করতে চেয়েছিল। এ সময় অপারেটর ওভারলোডিংয়ের খারাপ চাপ ছিল had লোকেরা দৃ as়ভাবে জানিয়েছিল যে এটি কোডকে অবলম্বন করেছে, এবং কেবলমাত্র খারাপের জন্য ব্যবহার করা যেতে পারে। সি # ডিজাইন করার সময়, জাভা আমাদের দেখিয়েছিল যে কোনও অপারেটর ওভারলোডিং একরকম বিরক্তিকর নয়।

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


আপনাকে ধন্যবাদ, যদি আপনি কিছু মনে করেন না তবে আমি এই প্রশ্নটি আরও কিছুক্ষণ খোলা রাখব এবং যদি কেউ আপনাকে প্রকৃত নকশার যুক্তিতে প্রহার না করে তবে আমি আপনার এটি গ্রহণ করে বন্ধ করব। আবার আপনাকে ধন্যবাদ.
গ্রীনল্ডম্যান

@ গ্রীনল্ডম্যান - আপনারও উচিত। আমিও আশা করি কেউ আরও কংক্রিট রেফারেন্স সহ উত্তর নিয়ে এসেছেন।
টেলাস্টিন

সুতরাং, এটি এমন এক জায়গা যেখানে পয়েন্টার এবং পয়েন্টটি উভয়েই স্বাচ্ছন্দ্যে এবং নির্বিঘ্নে তার মাথাটি সম্পর্কে অসম্ভব কথা বলছে? খুবই লজ্জার বিষয়.
হস্তান্তরকারী

"লোকেরা জোর দিয়েছিল যে এটি কোডটি অবলম্বন করেছে" - এটি এখনও সত্য, আপনি কি কিছু # # লাইব্রেরি দেখেছেন? অপারেটর আওয়াজ। উদাহরণস্বরূপ কোয়ান্টটেক.ফ্পারসেক
ডেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.