ব্যক্তিগত স্ট্যাটিক পদ্ধতিগুলি কেন?


68

আমি কেবল আমার একটি প্রশ্ন পরিষ্কার করতে চেয়েছিলাম। প্রাইভেট দৃশ্যমানতা সহ একটি সাধারণ পদ্ধতির বিপরীতে একটি প্রাইভেট স্ট্যাটিক পদ্ধতি থাকার কী আছে?

আমি একটি স্ট্যাটিক পদ্ধতি থাকার একটি সুবিধা ভেবেছি এটি একটি শ্রেণীর উদাহরণ ছাড়া বলা যেতে পারে, কিন্তু তার ব্যক্তিগত যেহেতু এটি স্থির হওয়ার জন্য একটি বিন্দু আছে?

আমি একমাত্র কারণটি ভাবতে পারি তা হ'ল এটি ক্লাস স্তরের পদ্ধতিটি অবজেক্ট স্তরের বিপরীতে ধারণাগতভাবে বুঝতে সহায়তা করে।


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

2
দ্রুত উদাহরণ - কারখানার পদ্ধতি যা অভ্যন্তরীণ শ্রেণীর দ্বারা ব্যবহৃত হয় অন্য শ্রেণীর দ্বারা প্রার্থনা রোধ করে (আপনি ক্লাসের উদাহরণ পেতে ফ্যাক্টরি পদ্ধতিটি অনুসরণ করতে হবে)।

2
@ ম্যাটফেনউইক: আপনার উত্তর হিসাবে এটি পোস্ট করা উচিত।
ডক ব্রাউন 14

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

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

উত্তর:


70

অচল হওয়ার বৈশিষ্ট্যটি দৃশ্যমানতার থেকে পৃথক।

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


3
আমি মনে করি আপনি সঠিক পথে রয়েছেন, তবে আমিও মনে করি আপনি একটি মূল পয়েন্ট মিস করছেন। বেশিরভাগ স্থিতিশীল পদ্ধতির শূন্য পার্শ্ব প্রতিক্রিয়া থাকে (তারা কার্যকরভাবে কার্যকরী হয়, পদ্ধতি নয়) - এ কারণেই এগুলিকে প্রথম স্থানে স্থির করা হয়েছে। তাদের ব্যক্তিগত থাকার বিরুদ্ধে যুক্তিটি হ'ল "যদি তাদের কোনও পার্শ্ব প্রতিক্রিয়া না থাকে তবে কোড পুনরায় ব্যবহারের প্রচারে তাদের কেন প্রকাশ্য করবেন না"। এটি মূল বিষয়: যখন আমরা এটিকে ব্যক্তিগত করি, তখন সাধারণত এটি হয় যে আপনি কেবলমাত্র সেই পদ্ধতিটিই নয়, কেবলমাত্র সেই ব্যক্তিগত পদ্ধতি ব্যবহার করে এমন পুরো ক্লাসটি পুনরায় ব্যবহার করতে চান ।
করসিকা

আমার অবশ্যই বলতে হবে যে আমি কখনই সে রকম করিনি বা আচরণটি দেখিনি। আমি যে কয়েকবার এটি করেছি তা জনসাধারণের স্ট্যাটিক ক্লাসে সহায়তার পদ্ধতিগুলির জন্য।
মিয়ামোটো আকিরা

1
@ করসিকা: পার্শ্ব প্রতিক্রিয়াগুলি বিষয় নয়। একটি শ্রেণীর বেসরকারীকে স্থিতিশীল সদস্য বানানো কার্যকরভাবে প্রতিশ্রুতি দেয় যে কোনও শ্রেণীর প্রতিটি ভবিষ্যতের সংস্করণ একই নামের একই পদ্ধতির অন্তর্ভুক্ত করবে যা একই কাজ করে। তাহলে চাহিদা পরিবর্তন, এবং ক্লাসের ভবিষ্যতে সংস্করণ একটি পদ্ধতি যা কাজ করে জন্য কোন প্রয়োজন থাকতে পারে ঠিক বর্তমান এক মত, একটি প্রাইভেট পদ্ধতি নিরাপদে এক যে ভাল ক্লাসের নতুন চাহিদা পরিপূর্ণ দিয়ে প্রতিস্থাপিত করা যেতে পারে। একটি সহজ উদাহরণ হিসাবে, অনুমান করা একটি বর্গ একটি পদ্ধতি যা একটি স্ট্রিং নেয় এবং মত বদল সঞ্চালিত প্রয়োজন <থেকে &lt;যখন লেখা হয় ইত্যাদি, ...
supercat

1
... স্ট্রিং যা তা না পরিচিত হয় পাস করা হয়েছে কোনো অ্যামপারসেন্ট ধারণ, এবং এটি এইভাবে রূপান্তর না &করার &amp;[আমি কোডটি লেখা ছিল, আমি রূপান্তর চাই &থেকে &amp;এমনকি যদি আমি এটা প্রয়োজন হতে কিন্তু ঠাউর আশা করিনি এটা না]। এটা পরে অ্যামপারসেন্ট হ্যান্ডেল করার জন্য প্রয়োজনীয় হয়ে, কিন্তু পদ্ধতি সর্বজনীন থাকে এটি প্রসারিত পরিবর্তন &করতে &amp;বাহিরে কোড যা তার নিজের সঞ্চালিত ভাঙতে পারে &-to- &amp;প্রতিকল্পন। যদি পদ্ধতিটি ব্যক্তিগত হয় তবে &বাইরের কোডের কোনও সমস্যা না করেই এটি হ্যান্ডেল করা ঠিক করা যেতে পারে ।
সুপারক্যাট

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

26

মোটামুটি সাধারণ কারণ (জাভাতে) হ'ল private staticকনস্ট্রাক্টরের খাঁজ কাটা কমানোর জন্য একটি সহজ পদ্ধতি ব্যবহার করে কনস্ট্রাক্টরে অপরিবর্তনীয় ফিল্ড ভেরিয়েবলের সূচনা করার জন্য।

  • এটি হ'ল private: বাহ্যিক শ্রেণীর এটি দেখা উচিত নয়।
  • এটি static: এটি কিছু অপারেশন সম্পাদন করতে পারে, হোস্ট শ্রেণীর রাজ্যের স্বাধীন 1

কিছুটা স্বীকৃত উদাহরণ অনুসরণ করেছে ...

উদাহরণ:

public class MyClass{
    private final String concatenated;

    public MyClass(String a, String b){
        concatenated = concat(a,b);
    }

    public String getConcatenated(){
       return concatenated;
    }

    /**
    *  Concatenates two Strings as `s1---s2`
    **/
    private static final String concat(String s1, String s2){
        return String.format("%s---%s", s1, s2);
    }
}

1 ধরে নিচ্ছি এটির অন্যান্য staticভেরিয়েবলগুলির সাথে কোনও ইন্টারঅ্যাকশন নেই ।


15
এটি আরও বেশি মূল্যবান যখন আপনার একটি সুপারক্লাসের নির্মাণকারীর কাছে প্রাপ্ত (গণনা করা) যুক্তিগুলি পাস করার প্রয়োজন হয়। super(...)কল আপনার বর্গ 'কন্সট্রাকটর প্রথম লাইন হতে হবে, যাতে আপনার কাজ কি সুপার কলে পাস সাহায্য করার জন্য স্থানীয় ভেরিয়েবল ডিক্লেয়ার করতে পারবে না। তবে, আপনি (বেসরকারী) স্থিতিশীল পদ্ধতিগুলিতে কল করতে পারেন , যা সুপার কনস্ট্রাক্টরের কাছে মূল্য নির্ধারণের জন্য প্রয়োজনীয় যতগুলি লাইন ব্যবহার করে।
আন্দ্রেজেড ডয়েল

নোট করুন যে স্ট্যাটিক ইনিশিয়ালাইজার ব্লক হওয়ার সম্ভাবনা রয়েছে
ফ্রান্সজ এ্যাবনার

13

একটি private staticপদ্ধতির জন্য একটি সাধারণ ব্যবহারের ক্ষেত্রে একটি ইউটিলিটি পদ্ধতি যা হয়

  1. শুধুমাত্র সেই এক শ্রেণীর দ্বারা ব্যবহৃত
  2. এই শ্রেণীর অভ্যন্তরীণ রাষ্ট্রের থেকে স্বাধীন

12

আপনি দেখতে পাচ্ছেন যে আপনার কয়েকটি কোডের কোড রয়েছে যা আপনার প্রচুর পদ্ধতিতে পুনরাবৃত্তি হয়, তাই ডুপ্লিকেট কোডটি ভাল না হওয়ায় আপনি কোনও একক পদ্ধতিতে এগুলি বের করার সিদ্ধান্ত নেন।

আপনি পদ্ধতিটি ব্যক্তিগত হিসাবে তৈরি করেছেন কারণ এটি ব্যাপকভাবে ব্যবহারের জন্য ডিজাইন করা হয়নি এবং আপনি এটি সম্পর্কিত কল করতে কোনও সম্পর্কযুক্ত কোড চান না। (মন্তব্যে এই পয়েন্টটি বিতর্ক করুন…।)

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

তারপরে .... (সম্ভবত এখন, সম্ভবত পরে, সম্ভবত কখনও)

একবার পদ্ধতিটি স্থিতিশীল হয়ে উঠলে এটি পরিষ্কার হয় যে এটি শ্রেণীর বাইরে চলে যেতে পারে, একটি unityক্য শ্রেণিকে বলুন।

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


আমি এই উত্তরটি পছন্দ করি তবে এর জন্য কি আপনার কোনও আপ টু ডেট রেফারেন্স আছে? "এবং সম্ভবত কিছুটা দ্রুত"
ম্যাগনিলেক্স

@ ম্যাগনাইলেক্স, "এই" পয়েন্টারটি স্থিতিশীল শ্রেণির পদ্ধতিতে পাস হয় না, অতএব এগুলি সংক্ষিপ্ত উদাহরণ পদ্ধতিগুলির তুলনায় দ্রুততর হবে tend
ইয়ান

2

আপনার ক্লাসে স্ট্যাটিক প্রাইভেট পদ্ধতির দরকার পড়ার কমপক্ষে দুটি কারণ সম্পর্কে আমি ভাবতে পারি।

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

2: আপনার সর্বজনীন স্ট্যাটিক পদ্ধতিতে এমন সাবরুটাইন রয়েছে যা আপনি সরাসরি কল করতে চান না। পদ্ধতিটি এখনও সরাসরি নয়, উদাহরণ ছাড়াই ডাকা হয়।

অবশ্যই, "এটি ক্লাসটি বোধ তৈরি করতে সহায়তা করে" এটি তার নিজের পক্ষে একটি দুর্দান্ত কারণ।


1

সাধারণত, যদি আমি খুঁজে পাই যে আমি ব্যক্তিগত স্ট্যাটিক পদ্ধতিগুলি লিখছি, আমি এটিকে একটি ইঙ্গিত হিসাবে গ্রহণ করি যে আমার আলাদাভাবে মডেলিংয়ের কিছু আছে।

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

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

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


-1

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

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