পদ্ধতিতে একটি আর্গুমেন্ট পাসের বিপরীতে যখন কোনও অবজেক্ট ইনস্ট্যান্স ভেরিয়েবল ব্যবহার করবেন


94

কোনও পদ্ধতির পক্ষে আর্গুমেন্টগুলি পাস করার মধ্যে বা কীভাবে কেবল তাকে অবজেক্ট ইনস্ট্যান্স ভেরিয়েবলগুলি ঘোষণার মধ্য দিয়ে কীভাবে সিদ্ধান্ত নেবেন যা বস্তুর সমস্ত পদ্ধতিতে দৃশ্যমান?

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


4
যদি আপনার একটি নির্দিষ্ট উদাহরণ থাকে তবে আপনি আরও সরাসরি দরকারী উত্তর পেতে পারেন
ব্র্যাবস্টার

উত্তর:


56

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

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

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

  • দৃষ্টান্ত পরিবর্তনশীল সুযোগটি কেবল সুরক্ষার জন্য নয়, পাশাপাশি এনক্যাপসুলেশনের জন্যও for ধরে নেবেন না যে "লক্ষ্যটি সমস্ত ভেরিয়েবলগুলি ব্যক্তিগত রাখার উচিত" " উত্তরাধিকারের ক্ষেত্রে, সুরক্ষিত হিসাবে পরিবর্তনশীল তৈরি করা সাধারণত একটি ভাল বিকল্প। সমস্ত দৃষ্টান্তের ডেটা জনসাধারণকে চিহ্নিত করার পরিবর্তে, আপনি বাইরের বিশ্বে অ্যাক্সেস করা দরকার তাদের জন্য গেটার / সেটার তৈরি করেন। এগুলি সমস্ত উপলভ্য করবেন না - কেবল আপনার প্রয়োজন। এটি পুরো লাইফসাইকেল জুড়ে আসবে - গেট ગો থেকে অনুমান করা শক্ত।

যখন কোনও ক্লাসের চারপাশের ডেটা পাস করার কথা আসে তখন কিছু কোড না দেখে আপনি কী করছেন তা বলা ভাল অনুশীলন difficult কখনও কখনও, উদাহরণস্বরূপ তথ্য সরাসরি অপারেটিং ঠিক আছে; অন্য সময়, এটি না। আমার মতে, এটি এমন কিছু যা অভিজ্ঞতার সাথে আসে - আপনার অবজেক্ট-ওরিয়েন্টেড চিন্তাভাবনা দক্ষতার উন্নতি হওয়ায় আপনি কিছুটা স্বজ্ঞাততা বিকাশ করবেন।


আমার উত্তরটি এই উত্তরটি এইচ-ম্যান 2 উত্তর (আজীবন) জুড়ে দেবে। এটি কোনও সদস্যের অ্যাট্রিবিউট হওয়া উচিত এবং যদি এটি কেবল অবজেক্টের স্থির অবস্থা হয় state এটি হ'ল বর্তমান পদ্ধতির স্ট্যাকের সুযোগের বাইরে মানটি নিজেই অর্থবোধ করে।
ডেভিড রদ্রিগেজ - ড্রিবাস

4
আমার অন্ত্রের প্রতিক্রিয়া হ'ল ডেভিড এবং এইচ-এমএন 2 এর সাথে একমত হন। তবে আমি রবার্ট সি মার্টিনের "ক্লিন কোড" পড়ছি এবং ৩ য় অধ্যায়ে তিনি কোনও পদ্ধতি প্যারামিটার থেকে কোনও সদস্যের ভেরিয়েবলে স্থানান্তরিত করার জন্য কোডটি রিফ্যাক্টরস কোড ব্যবহার করছেন, কারণ প্রচুর পরামিতি থাকা খারাপ। ভারসাম্য বজায় রেখে, আমি অনুমান করি যদি আপনার ক্লাসের কেবল একটি একক দায়িত্ব থাকে তবে বস্তুর আজীবন সেই গণনার জীবদ্দশার সমান, তাই সম্ভবত আসল উত্তরটি যদি আপনাকে এই প্রশ্নটি জিজ্ঞাসা করতে হয় তবে আপনার শ্রেণিটি খুব বড়?
অ্যান্ডি

@ ডেভিডরড্র্যাগিউজ-ড্রিবিয়াস পদ্ধতি স্ট্যাক বলতে কী বোঝ?
প্রতিশ্রুতিবদ্ধ

@ কমিটেন্ড্যান্ড্রয়েডার: যদি মানটি বর্তমান ফাংশন কলকে
ছাড়িয়ে যায়

47

মূলত এটি আপনার চলকটিতে যে ডেটা সঞ্চয় করে তা আজীবন নির্ভর করে। যদি ডেটা কেবল একটি গণনার সময় ব্যবহৃত হয়, এটি একটি পরামিতি হিসাবে পাস করুন। যদি ডেটা অবজেক্টের আজীবন সীমাবদ্ধ থাকে তবে একটি উদাহরণ ভেরিয়েবল ব্যবহার করুন।

যখন আপনার ভেরিয়েবলের তালিকাটি খুব দীর্ঘ হয়ে যায়, তখন ক্লাসের কিছু অংশকে নতুন ক্লাসে রিফ্যাক্টর করার কথা ভাবা ভাল বিষয়।


21

আমার মতে, উদাহরণস্বরূপ ভেরিয়েবলগুলি কেবল তখনই প্রয়োজনীয় যখন ডেটা কল জুড়ে ব্যবহৃত হবে।

এখানে একটি উদাহরণ:

myCircle = myDrawing.drawCircle(center, radius);

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

অন্যদিকে, মাই সার্কেল বর্গকে কেন্দ্র এবং ব্যাসার্ধ উভয়ই উদাহরণ ভেরিয়েবল হিসাবে সংরক্ষণ করতে হবে।

myCircle.move(newCenter);
myCircle.resize(newRadius);

যখন এই নতুন কলগুলি করা হয় তখন এটির ব্যাসার্ধ এবং কেন্দ্রটি কী হয় তা মাই সার্কেল অবজেক্টটি জানতে, তাদের প্রয়োজনীয় ফাংশনগুলিতে কেবল প্রেরণ না করে তাদেরকে উদাহরণ ভেরিয়েবল হিসাবে সংরক্ষণ করতে হবে।

সুতরাং মূলত, উদাহরণের ভেরিয়েবলগুলি কোনও জিনিসের "রাজ্য" সংরক্ষণ করার একটি উপায়। যদি কোনও ভেরিয়েবলের কোনও অবজেক্টের অবস্থা জানার প্রয়োজন না হয় তবে তা উদাহরণ পরিবর্তনশীল হওয়া উচিত নয়।

এবং সব কিছু জনসাধারণের করার জন্য। মুহুর্তে এটি আপনার জীবনকে আরও সহজ করে তুলতে পারে। তবে এটি আপনাকে ভ্রষ্ট করতে ফিরে আসবে। পিজ না।


আপনি প্যারামিটারগুলি ব্যবহার করতে সরাতে সংজ্ঞা দিতে পারেন (পুরাতন কেন্দ্র, নতুন কেন্দ্র) যদিও।
নিবিড় চিকেন 13

4

আইএমএইচও:

পরিবর্তনশীল যদি উদাহরণের রাজ্যের অংশ হিসাবে গঠিত হয়, তবে এটি উদাহরণের পরিবর্তনশীল হওয়া উচিত - শ্রেণিবিন্যাস HAS-A উদাহরণস্বরূপ।

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

আশা করি এটা সাহায্য করবে


3

অবশ্যই ক্লাসে পাবলিক ভেরিয়েবলের একটি বড় তালিকা রাখা সহজ। তবে স্বজ্ঞাতভাবেও, আপনি বলতে পারেন যে এটি যাওয়ার উপায় নয়।

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

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

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

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


আপনি প্রায়শই পদ্ধতিগুলি সর্বজনীন হতে চান যাতে আপনি সেগুলির পরীক্ষা করতে পারেন।
নিবিড় চিকেন 13
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.