এটি একটি খুব পুরানো বিষয় কিন্তু একটি দুর্দান্ত!
এটি সত্য যে বিকল্পে চেষ্টা করার কোনও অ-ব্যতিক্রমী ফলাফলকে রূপান্তর করার ফলে কিছুটা ...
scala> Try(null).toOption
res10: Option[Null] = Some(null)
... কারণ চেষ্টা হ'ল নৈন্যতা যাচাইয়ের বিষয়ে নয় তবে ব্যতিক্রমগুলি কার্যকরভাবে পরিচালনা করার একটি উপায়।
একটি ব্যতিক্রম ধরা চেষ্টা করুন এবং সুবিধার জন্য একটি বিকল্প রূপান্তর এটি ব্যবহার ব্যতিক্রম ঘটায় শুধুমাত্র কিছুই দেখায় না।
scala> Try(1/0).toOption
res11: Option[Int] = None
আপনি চেষ্টা থেকে আসা মানগুলি সংরক্ষণ করতে চান। এটা নাল হতে পারে।
তবে এটি সত্য যে স্ট্যান্ডার্ড লিব কখনও কখনও বেশ বিভ্রান্ত হয় ...
scala> Try(null).toOption
res12: Option[Null] = Some(null)
scala> Option(null)
res13: Option[Null] = None
এই আচরণটি কিছুটা বেমানান তবে এটি ধরণের চেষ্টা এবং বিকল্প উভয়েরই ইচ্ছাকৃত ব্যবহারকে প্রতিফলিত করে।
আপনি কোনও অভিব্যক্তি যা কিছু ব্যতিক্রম হতে পারে তার বাইরে যাবার চেষ্টা করুন এবং আপনি ব্যতিক্রম নিজেই চিন্তা করেন না।
মানটি যে খুব ভালভাবে বেরিয়ে আসতে পারে তা একটি নাল হতে পারে। যদি টুঅপশন কোনওটি না দেয় তবে আপনি ব্যতিক্রম এবং শূন্যতার মধ্যে পার্থক্য করতে পারবেন না এবং এটি সুন্দরও নয়!
স্বতঃস্ফূর্ত, আপনি কোনও কিছুর অস্তিত্ব সজ্জিত করতে বিকল্প ব্যবহার করেন। সুতরাং সেই ক্ষেত্রে কিছু (নাল) কোনওটিই নয়, এবং এটি বোধগম্য হয় কারণ সেই ক্ষেত্রে নাল কোনও কিছুর অনুপস্থিতি প্রতিনিধিত্ব করে। এখানে কোনও অস্পষ্টতা নেই।
এটি মন্তব্য করা গুরুত্বপূর্ণ যে কোনও ক্ষেত্রেই রেফারেন্সিয়াল স্বচ্ছতা নষ্ট হয় না ।
আপনার যদি সত্যই উভয় ব্যতিক্রমী সুরক্ষা এবং নাল সুরক্ষা প্রয়োগ করতে হবে এবং আপনার কোডটি সত্যই নাল এবং একটি ব্যতিক্রমের মধ্যে পার্থক্য করার প্রয়োজন নেই , আপনাকে কেবল উভয় দৃষ্টিকোনকে একত্রিত করতে হবে! কারণ ভাল, আপনি কি চান তাই না?
আপনি এটি এক উপায়ে করতে পারেন ...
scala> Try(Option(null)).getOrElse(None)
res23: Option[Null] = None
scala> Try(Option(3/0)).getOrElse(None)
res24: Option[Int] = None
scala> Try(Option(3)).getOrElse(None)
res25: Option[Int] = Some(3)
... অথবা অন্যটি ...
scala> Try(Option(null)).toOption.flatten
res26: Option[Null] = None
scala> Try(Option(3/0)).toOption.flatten
res27: Option[Int] = None
scala> Try(Option(3)).toOption.flatten
res28: Option[Int] = Some(3)
... বা হাস্যকরভাবে কুৎসিত তাদেরকে ...
scala> Option(Try(null).getOrElse(null))
res29: Option[Null] = None
scala> Option(Try(3/0).getOrElse(null))
res30: Option[Any] = None
scala> Option(Try(3).getOrElse(null))
res31: Option[Any] = Some(3)