Насколько я понимаю, нам следует избегать использования null
в Scala. И если какое-то поле логически не может иметь «нет значения», тогда мы не должны использовать Option
, чтобы избежать чрезмерного использования Option
s.
Итак, давайте посмотрим на код. у меня урок
case class User (name: String)
и я на 100% уверен, что поле name
не может быть null
, и из-за этого я использовал просто String
вместо Option[String]
.
Проблема в том, что некоторые стандартные методы Scala возвращают мне Option
s. (В моем случае метод IterableLike#find
возвращает Option)
Итак, вопрос в том, как я могу создать экземпляр 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
.
name
не может бытьNone
, но уверены ли вы на 100%, чтоname
находится вmyList
? Разве вы не хотели бы сделать егоOption[User]
, в зависимости от того, найден лиUser
по имени? - person Michael Zajac   schedule 16.04.2015orNull
хуже, чемget
.get
наNone
сразу выдает исключение, аorNull
устанавливает мину. - person Travis Brown   schedule 16.04.2015