c++ - নামস্থান+একটি ক্লাসে স্ট্যাটিক পদ্ধতি বনাম ফাংশন




namespaces static-methods (5)

আমি নামস্থান পছন্দ করি, যেভাবে আপনি বাস্তবায়ন ফাইলের মধ্যে একটি বেনামী নেমস্পেসে ব্যক্তিগত তথ্য থাকতে পারেন (তাই এটি private সদস্যদের বিরোধিতার ক্ষেত্রে শিরোনামে প্রদর্শিত হবে না)। আরেকটি সুবিধা হল আপনার MyMath:: using করে পদ্ধতির ক্লায়েন্টগুলি MyMath::

আসুন বলি আমার আছে, অথবা লিখতে যাচ্ছি, সম্পর্কিত ফাংশনের একটি সেট। চলুন তারা গণিত-সম্পর্কিত বলে। সাংগঠনিকভাবে, আমি উচিত:

  1. এই ফাংশনটি লিখুন এবং তাদের MyMath namespace এ রাখুন এবং MyMath::XYZ() মাধ্যমে তাদের পড়ুন।
  2. MyMath নামক একটি ক্লাস তৈরি করুন এবং এই পদ্ধতিগুলিকে স্ট্যাটিক করুন এবং একইভাবে MyMath::XYZ()

কেন আমি আমার সফ্টওয়্যার সংগঠিত করার একটি উপায় হিসাবে অন্য একটি বেছে নিতে হবে?


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


এমন অনেক লোক আছে যারা আমার সাথে মতবিরোধ করবে, কিন্তু আমি এটা দেখতে পাচ্ছি:

একটি শ্রেণী মূলত একটি নির্দিষ্ট ধরনের বস্তুর একটি সংজ্ঞা। স্ট্যাটিক পদ্ধতিগুলি সেই বস্তুর সংজ্ঞাটিকে ঘনিষ্ঠভাবে সংযুক্ত করা ক্রিয়াকলাপগুলিকে সংজ্ঞায়িত করতে হবে।

যদি আপনি একটি অন্তর্নিহিত বস্তুর সাথে জড়িত কোনও সম্পর্কিত ক্রিয়াকলাপগুলির একটি গোষ্ঠী বা কোনও বস্তুর সংজ্ঞা সম্পর্কিত হয় তবে আমি কেবল একটি নামস্থান দিয়ে যাব। শুধু আমার জন্য, ধারণাগতভাবে, এই অনেক বেশি বুদ্ধিমান।

উদাহরণস্বরূপ, আপনার ক্ষেত্রে, নিজেকে জিজ্ঞাসা করুন, "একটি MyMath কি?" যদি MyMath কোন বস্তুর সংজ্ঞা দেয় না তবে আমি বলব: এটি একটি বর্গ তৈরি করবেন না।

কিন্তু আমি যেমন বলেছিলাম, আমি জানি অনেক লোক রয়েছে যারা (এমনকি বিশেষত জাভা এবং সি # ডেভেলপারগণ) আমার সাথে এই বিষয়ে অসম্মতি প্রকাশ করবে।


ক্লাস ব্যবহার করার আরেকটি কারণ - অ্যাক্সেস স্পেসিফিকার ব্যবহার করার বিকল্প। আপনি সম্ভবত ছোট ব্যক্তিগত পদ্ধতিতে আপনার পাবলিক স্ট্যাটিক পদ্ধতি বিরতি পারেন। পাবলিক পদ্ধতি একাধিক ব্যক্তিগত পদ্ধতি কল করতে পারেন।


  • আপনি স্ট্যাটিক তথ্য প্রয়োজন হলে স্ট্যাটিক পদ্ধতি ব্যবহার করুন।
  • যদি তারা টেমপ্লেট ফাংশন থাকে এবং আপনি একসাথে সমস্ত ফাংশনগুলির জন্য টেমপ্লেট পরামিতিগুলির একটি সেট নির্দিষ্ট করতে সক্ষম হন তবে একটি টেমপ্লেট শ্রেণিতে স্ট্যাটিক পদ্ধতি ব্যবহার করুন।

অন্যথায়, namespaced ফাংশন ব্যবহার করুন।

মন্তব্য প্রতিক্রিয়া: হ্যাঁ, স্ট্যাটিক পদ্ধতি এবং স্ট্যাটিক তথ্য বেশি ব্যবহার করা ঝোঁক। এজন্যই আমি মাত্র দুটি, সম্পর্কিত পরিস্থিতি দেখিয়েছি যেখানে মনে হয় তারা সহায়ক হতে পারে। OP এর নির্দিষ্ট উদাহরণ (গণিতের রুটিনগুলির একটি সেট), যদি সে প্যারামিটার উল্লেখ করার ক্ষমতা চায় - বলে, একটি কোর ডাটা টাইপ এবং আউটপুট স্পষ্টতা - যা সমস্ত রুটিনগুলিতে প্রয়োগ করা হবে, সে এমন কিছু করতে পারে:

template<typename T, int decimalPlaces>
class MyMath
{
   // routines operate on datatype T, preserving at least decimalPlaces precision
};

// math routines for manufacturing calculations
typedef MyMath<double, 4> CAMMath;
// math routines for on-screen displays
typedef MyMath<float, 2> PreviewMath;

যদি আপনার এটি প্রয়োজন হয় না তবে সর্বদা একটি নামস্থান ব্যবহার করুন।





static-methods