Kotlin में गुणों का आरंभीकरण: `by lazy` बनाम `lateinit` — कब क्या उपयोग करें?
सभी को नमस्कार! मैं Java से Kotlin पर स्विच कर रहा हूँ और गुणों के विलंबित आरंभीकरण के लिए `by lazy` और `lateinit` के बीच अंतर को समझने में कठिनाई हो रही है। दोनों ही एक ही समस्या का समाधान करते प्रतीत होते हैं — ऑब्जेक्ट बनाते समय गुण को तुरंत आरंभीकृत न करना, बल्कि बाद में जब वास्तव में इसकी आवश्यकता हो तब करना।
लेकिन मैं लगातार भ्रमित हो जाता हूँ कि कौन सा विकल्प चुनूँ। उदाहरण के लिए, मैं एक सरल Android ViewModel लिख रहा हूँ। मुझे एक repository का reference प्राप्त करना है जो DI (Dagger/Hilt) के माध्यम से आरंभीकृत होता है, लेकिन मैं इसे nullable नहीं बनाना चाहता:
```kotlin
// lateinit के साथ विकल्प
class MyViewModel : ViewModel() {
lateinit var repository: MyRepository
fun loadData() {
// यहाँ मुझे यकीन है कि repository पहले से आरंभीकृत है
repository.fetchData()
}
}
```
```kotlin
// lazy के साथ विकल्प
class MyViewModel : ViewModel() {
val repository: MyRepository by lazy {
MyRepository() // या कोई factory
}
}
```
पहले मामले में मुझे कहीं `repository = ...` कॉल करना होगा इससे पहले कि