কোটলিনে জাভা স্ট্যাটিক ক্ষেত্রগুলির প্রতিস্থাপনের জন্য আমরা কেন "সহচর অবজেক্ট" ব্যবহার করি?


145

"সহযোগী অবজেক্ট" এর উদ্দিষ্ট অর্থ কী? এখনও অবধি আমি এটি staticযখন জাভা দরকার তখন এটি প্রতিস্থাপন করতে ব্যবহার করে আসছি।

আমি এতে বিভ্রান্ত

  • কেন তাকে "সহচর" বলা হয়?
  • এর অর্থ কী একাধিক স্থিতিশীল বৈশিষ্ট্য তৈরি করতে , আমাকে এটি companion objectব্লকের ভিতরে একত্রে গ্রুপ করতে হবে ?
  • তাত্ক্ষণিকভাবে একটি ক্লাসে স্কোপযুক্ত একটি সিঙ্গলটন উদাহরণ তৈরি করতে, আমি প্রায়শই লিখি

:

companion object {
    val singleton by lazy { ... }
}

যা এটি করার একটি unidiomatic উপায় মত বলে মনে হচ্ছে। এর চেয়ে ভাল উপায় কী?

উত্তর:


108
  • "সহযোগী অবজেক্ট" এর উদ্দিষ্ট অর্থ কী? কেন তাকে "সহচর" বলা হয়?

    প্রথমত, Kotlin জাভা ধারণা ব্যবহার করে না staticসদস্যদের কারণ Kotlin নিজস্ব হয়েছে ধারণা objectগুলি বৈশিষ্ট্য এবং Singleton রাষ্ট্রের সঙ্গে সংযুক্ত ফাংশন বর্ণনা জন্য, এবং জাভা staticএকটি বর্গ অংশ এইরূপ সূচারূভাবে Singleton পরিপ্রেক্ষিতে প্রকাশ করা যেতে পারে: এটা একটি Singleton বস্তুর যে ক্লাস দ্বারা নাম বলা যেতে পারে। সুতরাং নামকরণ: এটি একটি শ্রেণীর সাথে আসে with

    এর নামটি ব্যবহৃত হত class objectএবংdefault object তবে এটির পুনরায় নামকরণ হয়েছিলcompanion object যা আরও স্পষ্ট এবং স্কালার সহযোগী বস্তুগুলির সাথে সামঞ্জস্যপূর্ণ ।

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

  • এর অর্থ কী একাধিক স্থিতিশীল বৈশিষ্ট্য তৈরি করতে, আমাকে এটি companion objectব্লকের ভিতরে একত্রে গ্রুপ করতে হবে ?

    হ্যাঁ, এটি মূio় উপায়। অথবা আপনি এমনকি তাদের অর্থ সহ সঙ্গীবিহীন বস্তুগুলিতে গ্রুপ করতে পারেন:

    class MyClass {
        object IO {
            fun makeSomethingWithIO() { /* ... */ }
        }
    
        object Factory {
            fun createSomething() { /* ... */ }
        }
    }
  • তাত্ক্ষণিকভাবে একটি ক্লাসের /*...*/স্কোপযুক্ত একটি সিঙ্গলটন উদাহরণ তৈরি করতে, আমি প্রায়শই লিখি যা এটি করার মতো একটি ইউনিডিয়োম্যাটিক পদ্ধতি বলে মনে হয়। এর চেয়ে ভাল উপায় কী?

    এটি প্রতিটি নির্দিষ্ট ক্ষেত্রে আপনার কী প্রয়োজন তা নির্ভর করে। আপনার কোডটি কোনও ক্লাসে আবদ্ধ রাজ্য সংরক্ষণের জন্য ভাল মামলা যা এটির প্রথম কলের সূচনা করে।

    আপনার যদি কোনও শ্রেণীর সাথে সংযুক্ত হওয়ার প্রয়োজন না হয় তবে কেবল অবজেক্ট ডিক্লেয়ারেশন ব্যবহার করুন:

    object Foo {
        val something by lazy { ... }
    }

    আপনি জাভা স্ট্যাটিক ইনিশিয়ালাইজারের মতোই প্রথম শ্রেণির ব্যবহার শুরু করে সম্পত্তিটি শুরু করার জন্য lazy { ... }প্রতিনিধিদেরও সরাতে পারেন

    আপনি সিঙ্গলটন রাজ্য আরম্ভ করার দরকারী উপায়গুলিও পেতে পারেন ।


সুন্দর এবং মূ .় উদাহরণ।
ট্রেইন

19

কেন তাকে "সহচর" বলা হয়?

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

এর অর্থ কী একাধিক স্থিতিশীল বৈশিষ্ট্য তৈরি করতে, আমাকে এটিকে একসাথে সঙ্গী অবজেক্ট ব্লকের মধ্যে গ্রুপ করতে হবে?

হ্যাঁ. প্রতিটি "স্থিতিশীল" সম্পত্তি / পদ্ধতি এই সঙ্গীর অভ্যন্তরে স্থাপন করা দরকার।

তাত্ক্ষণিকভাবে একটি ক্লাসে স্কোপযুক্ত একটি সিঙ্গলটন উদাহরণ তৈরি করতে, আমি প্রায়শই লিখি

আপনি তাত্ক্ষণিকভাবে সিঙ্গলটন উদাহরণ তৈরি করবেন না। এটি singletonপ্রথমবার অ্যাক্সেস করার সময় তৈরি করা হয়।

যা এটি করার একটি unidiomatic উপায় মত বলে মনে হচ্ছে। এর চেয়ে ভাল উপায় কী?

বরং object Singleton { }একটি একক-শ্রেণীর সংজ্ঞা দিতে যান with দেখুন: অবজেক্ট ডিক্লেয়ারেশন আপনার কোনও উদাহরণ তৈরি করতে হবে না Singleton, কেবল এটির মতো এটি ব্যবহার করুনSingleton.doWork()

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


7

কেন তাকে "সহচর" বলা হয়?

শ্রেণীর অভ্যন্তরে কোনও অবজেক্টের ঘোষণাকে সহকর্মী কীওয়ার্ড দিয়ে চিহ্নিত করা যায়:

class MyClass {
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

সহকর্মী অবজেক্টের সদস্যদের কেবলমাত্র যোগ্যতা হিসাবে শ্রেণীর নাম ব্যবহার করে কল করা যেতে পারে:

val instance = MyClass.create()

আপনি যদি কেবল 'সহযোগী' ব্যতীত 'অবজেক্ট' ব্যবহার করেন তবে আপনাকে এটি করতে হবে:

val instance = MyClass.Factory.create()

আমার বোঝার মধ্যে 'সহচর' অর্থ এই বস্তুটি বহির্মুখী শ্রেণীর সাথে সঙ্গী।


"সহযোগী" ব্যতীত "অবজেক্ট" এটিকে (মাই ক্লাস ()। তৈরি ()) বলা হয়। একটি সিঙ্গলটনের মতো, তবে সিঙ্গলটন অবজেক্টে অ্যাক্সেস পেতে আপনাকে প্রথমে "বহিরাগত" শ্রেণিটি শুরু করতে হবে।
লিটল

0

আমরা বলতে পারি যে সাথী জাভার মতো "স্ট্যাটিক ব্লক" সমান, তবে কোটলিনের ক্ষেত্রে কোনও স্ট্যাটিক ব্লক ধারণা নেই, সহকর্মী ফ্রেমে আসার চেয়ে।

কোনও সহযোগী ব্লককে কীভাবে সংজ্ঞায়িত করবেন:

class Example {
      companion object {
        fun display(){
        //place your code
     }
  }
}

সহকর্মী ব্লকের কলিং পদ্ধতি, শ্রেণীর নামের সাথে সরাসরি

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