Когда использовать опцию#orNull
Насколько я понимаю, мы должны избегать использования null
в Scala. И если какое-то поле не является логически допустимым, чтобы иметь "нулевое значение", то мы не должны использовать Option
, чтобы избежать чрезмерного использования Option
s.
Итак, давайте посмотрим на код. У меня есть класс
case class User (name: String)
И я на 100% уверен, что name
поле не может быть null
, и из-за этого я использовал Просто String
вместо Option[String]
.
Проблема в том, что некоторые стандартные методы Scala возвращают мне Option
s. (в моем случае метод 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 было бы по меньшей мере странно.