मैं 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]यह है कि यह प्रोग्रामर को स्पष्ट रूप से बताता है कि यह तरीका कोई नहीं लौटा सकता है ? क्या इस डिजाइन की पसंद के पीछे यही एकमात्र कारण है?