এই দুটি অনুশীলন কেবল একই মুদ্রার দুটি পক্ষই নয়, বা সত্যিকার অর্থেই আরও ভাল কিনা তা নিয়ে আমি আমার বন্ধুর সাথে কিছুটা বিতর্ক করছি।
আমাদের একটি ফাংশন রয়েছে যা একটি প্যারামিটার নেয়, এর কোনও সদস্য পূরণ করে এবং তারপরে এটি প্রদান করে:
Item predictPrice(Item item)
আমি বিশ্বাস করি যে এটি যেমন পাস করা একই বস্তুর উপর কাজ করে , আইটেমটি ফেরত দেওয়ার কোনও লাভ নেই। প্রকৃতপক্ষে, যদি কিছু থাকে, কলারের দৃষ্টিকোণ থেকে, এটি বিষয়গুলিকে বিভ্রান্ত করে কারণ আপনি এটি প্রত্যাশা করতে পারেন যে কোনও নতুন আইটেম এটি প্রত্যাখ্যান করে না return
তিনি দাবি করেন যে এটি কোনও পার্থক্য করে না, এবং এটি কোনও নতুন আইটেম তৈরি করে তা ফেরত দিলেও তা বিবেচ্য হবে না। নিম্নলিখিত কারণে আমি দৃ strongly়ভাবে একমত নই:
আপনার যদি আইটেমটির একাধিক রেফারেন্স থাকে (বা পয়েন্টার বা অন্য যাই হোক না কেন), এটি কোনও নতুন বস্তু বরাদ্দ করে এবং এটি ফেরত দেওয়া বস্তুগত গুরুত্বের কারণ সেগুলি উল্লেখগুলি ভুল হবে।
স্মৃতিবিহীন পরিচালিত ভাষাগুলিতে, একটি নতুন উদাহরণ বরাদ্দ করা ফাংশন মেমরির মালিকানা দাবি করে এবং এইভাবে আমাদের ক্লিনআপ পদ্ধতিটি প্রয়োগ করতে হবে যা এক পর্যায়ে ডাকা হয়।
স্তূপে বরাদ্দ করা সম্ভাব্য ব্যয়বহুল, এবং সেইজন্য এটি বলা গুরুত্বপূর্ণ যে ডাকা ফাংশনটি এটি করে কিনা।
অতএব, আমি বিশ্বাস করি যে এটি কোনও পদকে সংশোধন করে, বা কোনও নতুন বরাদ্দ করে কিনা কোনও পদ্ধতি স্বাক্ষরের মাধ্যমে দেখতে সক্ষম হওয়া খুব গুরুত্বপূর্ণ। ফলস্বরূপ, আমি বিশ্বাস করি যেহেতু ফাংশনটি কেবলমাত্র পাস করা বস্তুকে সংশোধন করে, স্বাক্ষরটি হওয়া উচিত:
void predictPrice(Item item)
প্রতিটি কোডবেসে (স্বীকৃতভাবে সি এবং সি ++ কোডবেস, জাভা নয় যা আমরা কাজ করছি সেই ভাষায়) আমি কাজ করেছি, উপরের স্টাইলটি মূলত মেনে চলা হয়েছে এবং বেশ অভিজ্ঞ অভিজ্ঞ প্রোগ্রামাররা তা রেখে গেছেন। তিনি দাবি করেন যে আমার কোডবেস এবং সহকর্মীদের নমুনা আকারটি সমস্ত সম্ভাব্য কোডবেস এবং সহকর্মীদের চেয়ে ছোট এবং এইভাবে আমার অভিজ্ঞতা যে কোনওটি উন্নত কিনা তার সত্যিকারের সূচক নয়।
সুতরাং, কোন চিন্তা?
Item
তা হয় class Item ...
এবং না হয় typedef ...& Item
তবে স্থানীয় item