मैं Option[T]
स्काला में वर्ग की बात को समझने में सक्षम नहीं हूं । मेरा मतलब है, मैं किसी भी None
ओवर की सलाह को देखने में सक्षम नहीं हूं null
।
उदाहरण के लिए, कोड पर विचार करें:
object Main{
class Person(name: String, var age: int){
def display = println(name+" "+age)
}
def getPerson1: Person = {
// returns a Person instance or null
}
def getPerson2: Option[Person] = {
// returns either Some[Person] or None
}
def main(argv: Array[String]): Unit = {
val p = getPerson1
if (p!=null) p.display
getPerson2 match{
case Some(person) => person.display
case None => /* Do nothing */
}
}
}
अब मान लें, विधि getPerson1
वापस आती है null
, तो display
पहली पंक्ति में की गई कॉल main
विफल होने के लिए बाध्य है NPE
। इसी तरह अगर getPerson2
रिटर्न मिलता है None
, तो display
कॉल फिर से कुछ इसी तरह की त्रुटि के साथ विफल हो जाएगी।
यदि ऐसा है, तो स्काला Option[T]
जावा में उपयोग किए जाने वाले सरल दृष्टिकोण का अनुसरण करने के बजाय नया वैल्यू रैपर ( ) शुरू करके चीजों को जटिल क्यों करता है ?
अपडेट करें:
मैंने अपना कोड @ मिच के सुझाव के अनुसार संपादित किया है । मैं अभी भी कोई विशेष लाभ नहीं देख पा रहा हूं Option[T]
। मुझे असाधारण null
या None
दोनों मामलों में परीक्षण करना होगा । :(
अगर मैंने @ माइकल के उत्तर से सही तरीके से समझा है , तो क्या इसका एकमात्र फायदा Option[T]
यह है कि यह प्रोग्रामर को स्पष्ट रूप से बताता है कि यह तरीका कोई नहीं लौटा सकता है ? क्या इस डिजाइन की पसंद के पीछे यही एकमात्र कारण है?