সি * পদ্ধতিগুলি যা * * স্থির থাকতে পারে স্থির থাকতে পারে? [বন্ধ]


103

উচিত C # এর পদ্ধতি করতে স্ট্যাটিক স্থিত হওয়া হবে?

আমরা আজ এটি নিয়ে আলোচনা করছিলাম এবং আমি বেড়াতে একরকম। কল্পনা করুন যে আপনার একটি দীর্ঘ পদ্ধতি রয়েছে যা আপনি কয়েক লাইনের বাইরে রিফ্যাক্টর। নতুন পদ্ধতিটি প্যারেন্ট পদ্ধতি থেকে সম্ভবত কয়েকটি স্থানীয় ভেরিয়েবল নেয় এবং একটি মান দেয়। এর অর্থ এটি অচল হতে পারে।

প্রশ্নটি: এটি স্থির হওয়া উচিত ? এটি নকশা বা পছন্দ অনুসারে স্থির নয়, কেবল প্রকৃতির দ্বারা এটি কোনও উদাহরণের মান উল্লেখ করে না।


1
মোটামুটি সঠিক এর প্রতিলিপি stackoverflow.com/questions/169378/...
JasonTrue

41
"মোটামুটি নির্ভুল" একটি অক্সিমোরন
ম্যাট ব্রিগস

1
সরঞ্জামগুলির ভিজ্যুয়াল স্টুডিও সরঞ্জাম, রিশার্পার হ্যাঁ বলে! :-)
রেবেকা

@ জন্টো আপনার সংস্করণে থাকতে পারে, তবে আমার মতে এটি স্থিতিশীল করা যেতে পারে ...
রবি ডি

উত্তর:


59

এটা নির্ভর করে. স্থিতিশীল পদ্ধতিগুলির 2 ধরণের রয়েছে:

  1. যে পদ্ধতিগুলি স্থির কারণ তারা তা করতে পারে
  2. যে পদ্ধতিগুলি অচল কারণ তারা হ'ল

একটি ছোট থেকে মাঝারি আকারের কোড বেসে আপনি দুটি পদ্ধতির পরিবর্তন করতে পারবেন।

আপনার যদি এমন কোনও পদ্ধতি থাকে যা প্রথম বিভাগে রয়েছে (হতে পারে-স্থির থাকতে পারে), এবং শ্রেণি রাষ্ট্রে অ্যাক্সেস করার জন্য আপনাকে এটিকে পরিবর্তন করতে হবে, স্থির পদ্ধতিটিকে উদাহরণ পদ্ধতিতে পরিণত করা সম্ভব কিনা তা নির্ধারণ করার জন্য এটি তুলনামূলকভাবে সোজা এগিয়ে রয়েছে।

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

এর ফলস্বরূপ হয়:

  1. প্রচুর কোড সদৃশ
  2. পদ্ধতির আর্গুমেন্টগুলির সংখ্যাতে একটি বিস্ফোরণ

এই দুটি জিনিসই খারাপ।

সুতরাং, আমার পরামর্শটি হ'ল যদি আপনার 200K এলওসি-র উপরে একটি কোড বেস থাকে তবে আমি অবশ্যই পদ্ধতিগুলি স্থিতিশীল করব যদি সেগুলি অবশ্যই স্থির পদ্ধতি হয়।

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

বৃহত্তর কোড বেসগুলির সাথে আদর্শিক বিশুদ্ধতার পক্ষে নয় বরং প্রসারের স্বাচ্ছন্দ্যের দিক থেকে ত্রুটি করা আরও ভাল।

সুতরাং, বড় প্রকল্পগুলির জন্য জিনিসগুলি স্থিতিশীল করবেন না যতক্ষণ না আপনার সেগুলির প্রয়োজন। ছোট প্রকল্পগুলির জন্য, আপনি যা পছন্দ করেন ঠিক তেমন করুন।


43

আমি এটিকে class শ্রেণির পাবলিক স্থিতিশীল সদস্য হিসাবে তৈরি করব না । কারণটি হ'ল এটিকে সার্বজনীন স্থিতিশীল করা শ্রেণীর ধরণের সম্পর্কে কিছু বলছে: কেবল "এই ধরণের আচরণটি কীভাবে করা যায়" তা নয়, তবে "এই আচরণ করা এই ধরণের দায়িত্ব is" এবং প্রতিক্রিয়া হ'ল আচরণটি বড় ধরণের সাথে আর কোনও সত্যিকারের সম্পর্ক রাখে না।

যদিও এর অর্থ এই নয় যে আমি একেবারেই স্থির করব না। নিজেকে জিজ্ঞাসা করুন: নতুন পদ্ধতিটি কি অন্যভাবে যুক্তিযুক্তভাবে থাকতে পারে? যদি আপনি "হ্যাঁ" এর উত্তর দিতে পারেন তবে আপনি সম্ভবত এটি স্থির করতে চান (এবং পাশাপাশি এটি স্থানান্তরও করুন)। এমনকি যদি এটি সত্য না হয় তবে আপনি এখনও এটি স্থির করতে পারেন। শুধু এটি চিহ্নিত করবেন না public

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


6
একমত। আমি সাধারণত একটি পদ্ধতিতে পদ্ধতিটিকে "ব্যক্তিগত স্ট্যাটিক" করি make
হার্পো

6
আমি প্রাইভেট স্ট্যাটিকও ধরে নিব না। মূল বিষয়টি নিজেকে জিজ্ঞাসা করা: এই পদ্ধতিটি কি এই ধরণের অংশ হিসাবে যৌক্তিকভাবে মাপসই হয়, বা এটি কেবল এখানে সুবিধার বিষয় হিসাবে? যদি পরবর্তীকালে, এটি অন্য কোথাও ভাল ফিট করতে পারে?
জোয়েল কোহোর্ন 19

1
যেমন: "নতুন পদ্ধতিটি কি অন্যভাবে যুক্তিযুক্তভাবে যুক্ত হতে পারে" - ক্লুটি কি এটি স্থানীয় রাজ্যের উপর নির্ভর করে না, সম্ভবত ফেরতের ধরণটি যেখানে এটির অন্তর্গত?
অ্যান্ডি

20

অগত্যা।

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


আমি মনে করি তিনি বেশিরভাগ ব্যক্তিগত পদ্ধতির উল্লেখ করছেন
জর্জ মাউয়ার

@ রায় - ঠিক আছে, এটি কেবল বেসরকারী সদস্যদের জন্যই প্রযোজ্য। আমি এই প্রতিফলিত করতে আমার উত্তর আপডেট।
মাইকেল

আমার চিন্তাভাবনাগুলি ঠিক - কারণ আপনি কিছু স্থির করতে পারেন তার অর্থ এই নয় যে আপনার করা উচিত বা হওয়া উচিত .....
মার্ক_স

সুতরাং আপনি ব্যক্তিগত পদ্ধতিগুলিকে অচল করে তোলার জন্য কী করবেন?
রায়

@ রে - আমার অচল স্থানে যাওয়ার যথেষ্ট কারণ নেই বলে সম্ভবত সম্ভবত ততক্ষণ ত্যাগ করুন।
মাইকেল 21

13

হ্যাঁ. "এটি স্থিতিশীল হতে পারে" কারণ হ'ল এটি যে বস্তুর উপর ডাকা হয় তার স্থিতিতে কাজ করে না। সুতরাং এটি কোনও উদাহরণ পদ্ধতি নয়, একটি শ্রেণিবদ্ধ পদ্ধতি। উদাহরণস্বরূপ ডেটা অ্যাক্সেস না করে যদি এটি যা করা দরকার তা যদি তা করতে পারে তবে তা স্থির হওয়া উচিত।


11

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


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

পরিবর্তে স্থির প্রকৃতপক্ষে সংযোগ বৃদ্ধি করে , কারণ আপনি ঠিক সেই স্থির পদ্ধতির মধ্যেই সীমাবদ্ধ, উদাহরণস্বরূপ এটিকে বিভ্রান্ত করার কোনও উপায় নেই এবং এভাবে আচরণ পরিবর্তন করার কোনও উপায় নেই ।
হিমব্রুমবিয়ার

8

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


6

ব্যক্তিগতভাবে, আমি রাষ্ট্রহীনতার দুর্দান্ত অনুরাগী। আপনার পদ্ধতিটি কি ক্লাসের রাজ্যে অ্যাক্সেসের প্রয়োজন? উত্তরটি যদি না হয় (এবং এটি সম্ভবত না হয়, অন্যথায় আপনি এটিকে একটি স্ট্যাটিক পদ্ধতি হিসাবে বিবেচনা করবেন না), তবে হ্যাঁ, এটির জন্য যান।

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

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

হ্যাঁ, এর জন্য যান, সব উপায়ে।


1
একটি স্থিতিশীল পদ্ধতিতে এখনও রাজ্যে অ্যাক্সেস থাকতে পারে। এটি কেবল তার কাছে দেওয়া বস্তু থেকে রাষ্ট্রটি পায়। বিপরীতে, উদাহরণস্বরূপ ক্ষেত্রগুলি অগত্যা পরিবর্তনীয় স্থিতি ধারণ করে না।
জর্জেন ফোগ

6

স্থিতিশীল পদ্ধতিগুলি অ স্থিরগুলির চেয়ে দ্রুততর হয় তাই হ্যাঁ, তারা যদি পারেন তবে তা স্থির হওয়া উচিত এবং এগুলি ননস্ট্যাটিক রেখে যাওয়ার কোনও বিশেষ কারণ নেই


3
এটি প্রযুক্তিগতভাবে সত্য, তবে বাস্তব বস্তুগত অর্থে নয়। স্থির / নন এর মধ্যে পার্থক্য খুব খুব কমই পারফরম্যান্সের একটি কারণ হতে পারে।
ফোরেডেকার

22
-1: পাঠ্যপুস্তক অকাল অপ্টিমাইজেশন। সাধারণ ক্ষেত্রে স্থির বনাম অ স্থির সিদ্ধান্ত নেওয়ার সময় গতি অবশ্যই প্রথম মানদণ্ড হওয়া উচিত নয়।
শিওর না

2
নিশ্চিত নন সাথে সম্মত হন, স্থির বনাম না বিবেচনা করার এটি আপনার শেষ কারণ হওয়া উচিত ।
স্যামুয়েল

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

2
@agnieszka: স্থির পদ্ধতির পরিবর্তে সাধারণত উদাহরণ পদ্ধতি ব্যবহারের বিশেষ কারণ রাষ্ট্রীয় state আপনি যদি পদ্ধতিগুলি স্থিতিশীল রেখে দেন তবে একটি জটিল অ্যাপ্লিকেশনটিতে আপনি এমন বাগগুলি প্রবর্তন করবেন যা আপনাকে চুল ছিঁড়ে ফেলবে। গ্লোবাল রাষ্ট্র, বর্ণের পরিস্থিতি, থ্রেড-সুরক্ষা ইত্যাদি পরিবর্তন করার বিষয়ে চিন্তা করুন
স্যান্ডর ডেভিডহাজি

5

আমি অবাক হয়েছি যে খুব কম লোকই এখানে বাস্তবে encapsulation উল্লেখ করছে mentioning একটি উদাহরণ পদ্ধতিতে স্বয়ংক্রিয়ভাবে সমস্ত ব্যক্তিগত (দৃষ্টান্ত) ক্ষেত্র, বৈশিষ্ট্য এবং পদ্ধতিতে অ্যাক্সেস থাকবে। বেস ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত সমস্ত সুরক্ষিত ছাড়াও।

আপনি কোড লেখার সময় আপনার এটিকে লিখতে হবে যাতে আপনি যতটা সম্ভব অল্প পরিমাণে প্রকাশ করতে পারেন এবং যতটা সম্ভব অল্প অ্যাক্সেস পান।

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

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


4

কেবলমাত্র আপনি পারেন তাই স্থিতিশীল কিছু করা ভাল ধারণা নয়। স্থিতিশীল পদ্ধতিগুলি তাদের নকশার কারণে স্থির হওয়া উচিত, ঘটনার কারণে নয়।

মাইকেল যেমন বলেছেন, এটি পরে পরিবর্তন করা কোড ব্যবহার করবে যা এটি ব্যবহার করে।

এই কথাটি বলে, মনে হচ্ছে আপনি শ্রেণীর জন্য একটি ব্যক্তিগত ইউটিলিটি ফাংশন তৈরি করছেন যা বাস্তবে ডিজাইনের মাধ্যমে স্থিতিশীল।


4

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


2

ব্যক্তিগতভাবে আমার এটিকে স্থির করার বিকল্প নেই no এই ক্ষেত্রে রিশার্পার একটি সতর্কতা জারি করে এবং আমাদের প্রধানমন্ত্রীর একটি নিয়ম আছে "রিশার্পার থেকে কোনও সতর্কতা নেই"।


1
আপনি আপনার রিসার্চার সেটিংস পরিবর্তন করতে পারেন: পি
বার্নহার্ড হফম্যান

1
তাহলে এটা এত সহজ ছিল আমরা Resharper থেকে কোনো wornings ছিল ... কি কখনো :)
prankster

1

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


হ্যাঁ, তবে কোনও দিন যদি আপনার এটি করা দরকার হয় তবে আপনি সর্বদা এটি স্থির করতে পারেন না। নাকি আমি কিছু মিস করছি?
রায়

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

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

দুঃখিত, আপনি আমার মন্তব্যের পরে এটি যোগ করেছেন। মনে মনে আমি ব্যক্তিগত পদ্ধতি সম্পর্কে ভাবছিলাম, তবে এটি জনসাধারণের পদ্ধতিগুলির জন্য একটি বৈধ পয়েন্ট।
রায়

... বা কোনও দিন আপনি এটি ফেলে দিতে পারেন। এই তর্কগুলি আমার পক্ষে কোনও পদ্ধতি ননস্ট্যাটিক করার পক্ষে পর্যাপ্ত নয়।
অগ্নিসিজকা

1

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


1

আপনার আপনার পদ্ধতি এবং ক্লাস সম্পর্কে চিন্তা করা উচিত:

  • আপনি কিভাবে তাদের ব্যবহার করতে যাচ্ছেন?
  • আপনার কোডের বিভিন্ন স্তরের থেকে তাদের কি আপনার প্রচুর অ্যাক্সেসের দরকার?
  • এটি কি এমন কোনও পদ্ধতি / শ্রেণি যা আমি প্রায় প্রতিটি চিন্তাভাবতামূলক প্রকল্পে ব্যবহার করতে পারি।

শেষ দুটি যদি 'হ্যাঁ' হয় তবে আপনার পদ্ধতি / শ্রেণিটি সম্ভবত স্থির হওয়া উচিত।

সর্বাধিক ব্যবহৃত উদাহরণ সম্ভবত Mathবর্গ। প্রতিটি বড় ওও ভাষার এটির রয়েছে এবং সমস্ত পদ্ধতি অচল। কারণ আপনার কোনও উদাহরণ তৈরি না করে যে কোনও সময় যে কোনও সময় এগুলি ব্যবহার করতে সক্ষম হওয়া দরকার।

আর একটি ভাল উদাহরণ Reverse()সি # এর পদ্ধতি।
এটি Arrayক্লাসে স্থির পদ্ধতি । এটি আপনার অ্যারের ক্রমটিকে বিপরীত করে।

কোড:

public static void Reverse(Array array)

এটি কোনও কিছু ফেরত দেয় না, আপনার অ্যারেটি বিপরীত হয়, কারণ সমস্ত অ্যারে অ্যারে শ্রেণীর উদাহরণ।


ম্যাথ একটি খারাপ উদাহরণ। আমার ধারণা এটি আরও ভাল: নিউ নাম্বার = সংখ্যা.আউন্ড (2) নিউ নম্বরের চেয়ে = ম্যাথ.াউন্ড (সংখ্যা)
ফলস্বরূপ

3
ম্যাথ ক্লাস স্ট্যাটিক ক্লাস ব্যবহারের নিখুঁত উদাহরণ is আপনি এই বিষয়টিকে
নিয়েই নন,

1

যতক্ষণ আপনি নতুন পদ্ধতিটি বেসরকারী স্থিতিশীল করবেন ততক্ষণ এটি ব্রেকিং নয়। প্রকৃতপক্ষে, এফএক্সকপ নীচের তথ্যের সাথে তার অন্যতম নিয়ম ( http://msdn.microsoft.com/en-us/library/ms245046(VS.80).aspx ) হিসাবে এই নির্দেশিকা অন্তর্ভুক্ত করেছে :

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

বলা হচ্ছে, ডেভিড কেনের প্রথম মন্তব্যটি আরও সংক্ষেপে উদ্বেগের সংক্ষিপ্তসার জানিয়ে বলেছে যে পারফরম্যান্স লাভের তুলনায় এটি সঠিক হওয়ার চেয়ে আরও বেশি:

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


1

আমি স্পষ্টভাবে আমার যে কোনও কিছুই স্থির করে তুলতে চাই অন্য কারণে:

স্ট্যাটিক ফাংশনগুলি, যখন জেআইটি'ডি, "" এই পরামিতি ছাড়াই ডাকা হয়। তার অর্থ, উদাহরণস্বরূপ, একটি 3 পরামিতি নন-স্ট্যাটিক ফাংশন (সদস্য পদ্ধতি) স্ট্যাকের 4 টি প্যারামের সাথে ঠেলা যায়।

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


1

আমি "কেবলমাত্র ব্যক্তিগত পদ্ধতিগুলি স্থিতিশীল করুন" শিবিরে আছি। একটি সর্বজনীন পদ্ধতি তৈরি করা আপনার পছন্দ নয় এমন কাপলিংয়ের পরিচয় দিতে পারে এবং পরীক্ষার যোগ্যতা হ্রাস করতে পারে: আপনি পাবলিক স্ট্যাটিক পদ্ধতিতে স্ট্যাব করতে পারবেন না।

আপনি যদি কোনও পাবলিক স্ট্যাটিক পদ্ধতি ব্যবহার করে এমন একটি পদ্ধতির পরীক্ষা করতে চান তবে আপনি স্থির পদ্ধতিটিও পরীক্ষা করে শেষ করতে পারেন যা আপনি যা চান তা নাও হতে পারে।


1

সহজাত স্থিতিশীল পদ্ধতিগুলি যে কোনও কারণে অ-স্থিতিশীল তৈরি করা হয় কেবল বিরক্তিকর। বুদ্ধিমান:

আমি আমার ব্যাঙ্কে কল করে আমার ব্যালেন্স চাইছি।
তারা আমার অ্যাকাউন্ট নম্বর চাইবে।
যথেষ্ট ফর্সা। তাত্ক্ষণিক পদ্ধতি।

আমি আমার ব্যাঙ্কে কল করে তাদের মেইলিং ঠিকানা জিজ্ঞাসা করি।
তারা আমার অ্যাকাউন্ট নম্বর চাইবে।
ডব্লিউটিএফ? ব্যর্থ স্থির পদ্ধতি হওয়া উচিত।


1
যদি বিভিন্ন গ্রাহক বিভিন্ন শাখা দ্বারা পরিবেশন করা হয়? ব্যাংকের প্রধান কার্যালয়ে মেইলিং চিঠিপত্র যথাযথ শাখায় পৌঁছে দিতে পারে, তবে এর অর্থ এই নয় যে কোনও গ্রাহক তাকে যে নির্দিষ্ট শাখায় কাজ করে তার ঠিকানা ব্যবহার করে আরও ভাল পরিবেশিত হবে না।
সুপারক্যাট

0

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


-1

এই ক্ষেত্রে, আমি পদ্ধতিটি একটি স্ট্যাটিক বা ইউজ লাইব্রেরিতে স্থানান্তরিত করার প্রবণতা রাখি, তাই আমি "শ্রেণি" ধারণার সাথে "অবজেক্ট" ধারণার সাথে মিশ্রিত করব না

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