Is your method "getUserIfItExists(username)" or "doesUserExist(username)"?
def getUserGreeting(userDao: UserDAO)(username: String): String =
userDao.getOptionalUser(username) match {
case Some(user) => "Hello, " + user.getFullName
case None => "Not logged in"
}
than: def getUserGreeting(userDao: UserDAO)(username: String): String =
if(userDao.doesUserExist(username)) match {
"Hello, " + userDao.get(username).getFullName
} else {
"Not logged in"
}
For one thing, the first function probably only makes one database call, while the second (absent caching) makes two. Secondly, the second carries with it the (unlikely) possibility that the user is deleted between your DAO calls. Thirdly, I would argue that the first function is easier to read.probably more idiomatic for the 1st version would be:
userDao.getOptionalUser(username).map(u=>
s"Hello, ${u.getFullName}"
).getOrElse("Not logged in")
i.e. string interpolate and map instead of match over Option.Another word I use a lot is "lookup".