প্রধান পদ্ধতিতে কেবল অবজেক্ট ক্রিয়েশন এবং মেথড কল থাকা উচিত?


12

আমার এক বন্ধু আমাকে বলেছিল যে, সেরা অনুশীলনটি হচ্ছে শ্রেণিগত পদ্ধতিযুক্ত শ্রেণীর mainনামকরণ করা উচিত Mainএবং কেবল এতে mainপদ্ধতি রয়েছে । এছাড়াও mainপদ্ধতিতে কেবল ইনপুটগুলি পার্স করা উচিত, অন্যান্য অবজেক্ট তৈরি করা উচিত এবং অন্যান্য পদ্ধতিগুলি কল করা উচিত। Mainশ্রেণী এবং mainপদ্ধতি অন্য কিছু করা উচিত নয়। মূলত তিনি যা বলছেন তা পদ্ধতিযুক্ত শ্রেণীর mainমতো হওয়া উচিত:

public class Main
{
    public static void main(String[] args)
    {
        //parse inputs
        //create other objects
        //call methods
    }
}

এটা কি সেরা অনুশীলন?


6
এটা আর কি করতে পারে?
পাব্বি

উত্তর:


11

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

public static void main(String[] args){
    new Foo().start(args[0]);
}

ধারণাটি হ'ল আরম্ভ করার জন্য আপনার মূল পদ্ধতির দরকার নেইFoo । এটি আপনাকে সহজেই আরম্ভ করতে এবং Fooঅন্য প্রসঙ্গে শুরু করতে দেয় , সম্ভাব্যভাবে বিভিন্ন শব্দার্থবিজ্ঞানের সাহায্যে।

public Foo initSomewhereElse(String arg){
    Foo f = new Foo();
    f.start(arg);
    return f;
}

7

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

সুতরাং, বেশিরভাগ বিশেষজ্ঞরা বলেছেন যে মূল () ফাংশনের এলওসি যতটা সম্ভব কম হওয়া উচিত। একটি পন্থা রয়েছে (যা আমি মনে করি কিছুটা ওভারকিল) যেখানে মূল () ফাংশনটির একটি লাইন রয়েছে:

public class Program
{
   private Program(string[] args)
   {
      //parse args and perform basic program setup
   }

   //Reduce the ugliness to the absolute minimum
   public static void main(string[] args)
   {
      new Program(args).Run();  
   }

   private void Run()
   {
      //kick off the driving O-O code for the app; i.e. Application.Run()
   }    
}

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


আমি একমত নই mainঅন্যান্য প্রসঙ্গ থেকে কল করতে এটি দরকারী হতে পারে - উদাহরণস্বরূপ, পুনরাবৃত্তি।
ডেড এমএমজি

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

1

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

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

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