Когда использовать опцию#orNull
Насколько я понимаю, мы должны избегать использования null в Scala. И если какое-то поле не является логически допустимым, чтобы иметь "нулевое значение", то мы не должны использовать Option, чтобы избежать чрезмерного использования Options.
Итак, давайте посмотрим на код. У меня есть класс
case class User (name: String)
И я на 100% уверен, что name поле не может быть null, и из-за этого я использовал Просто String вместо Option[String].
Проблема в том, что некоторые стандартные методы Scala возвращают мне Options. (в моем случае метод IterableLike#find возвращает Вариант)
Итак, вопрос в том, как я могу создать экземпляр User, когда у меня есть name, обернутый в Option?
Чтобы быть немного ясным, это код:
val userName: Option[String] = myList.find(...)
val user = User(userName.get) // or may be I should use userName.orNull ? or throw exception?
Я слышал, что Option.get не является элегантным решением. orNullметод почти такой же, как get.
2 ответа:
orNullпредоставляется в основном для обеспечения совместимости Java. Использованиеnullв качестве значения sentinel во многих библиотеках Java широко распространено иorNullслужит небольшим кусочком синтаксического сахара. По сути, это простоmyOption.getOrElse(null), но с именем функции, которое позволяет немного более чистый код.Использование
orNullв чистом проекте Scala было бы по меньшей мере странно.