miqbaldc
07/12/2021, 8:09 AM// `cache` is an interface that has method `newToken()` & `unrecoverableSession()`
Which one do you guys prefer, on the following snippet code?
1️⃣
if (retryCount > RETRY_LIMIT) {
cache.unrecoverableSession()
return null
}
cache.newToken()?.let { newToken ->
return rewriteRequest(newToken)
}
return null
or
2️⃣
if (retryCount > RETRY_LIMIT) {
cache.unrecoverableSession()
return null
}
val newToken = cache.newToken()
return if (newToken != null) {
rewriteRequest(newToken)
} else {
cache.unrecoverableSession()
null
}
or
3️⃣
val newToken = cache.newToken()
return when {
retryCount > RETRY_LIMIT -> {
cache.unrecoverableSession()
null
}
newToken != null -> rewriteRequest(newToken)
else -> {
cache.unrecoverableSession()
null
}
}
Luke
07/12/2021, 1:53 PMcache.unrecoverableSession()
is run, unlike 1️⃣ in which you forgot one call
return cache
.takeUnless { retryCount > RETRY_LIMIT }
?.newToken()
?.let(::rewriteRequest)
.also { if (it == null) cache.unrecoverableSession() }
Tobias Berger
07/13/2021, 1:19 PMtakeIf/Unless
when I'm not checking anything o the receiver. For me that's more of a validation/filter function than something for controlling code flow. A simple it-condition is much easier to read and understand than this chain.if (retryCount <= RETRY_LIMIT) {
cache.newToken()?.let {
return rewriteRequest(it)
}
}
cache.unrecoverableSession()
return null