Efi*_* MK 2 kotlin kotlin-null-safety
你会如何以更科学的方式编写以下代码?
var returnValue = ...
val s3data = presignedUrl.body()
if (s3data != null) {
val uploadImage = api.uploadImage(s3data.bucketUrl, s3data.awsAccessKeyId, s3data.policy, s3data.key, s3data.signature, body).execute()
if (!uploadImage.isSuccessful) {
crashReporterService.sendIssue("Failed uploading file", "Failed uploading file ${uploadImage.raw()}")
returnValue = Result.FAILURE
} else {
returnValue = Result.SUCCESS
}
} else {
crashReporterService.sendIssue("Failed uploading image", "Error - ${presignedUrl.raw()}")
returnValue = Result.FAILURE
}
return returnValue
Run Code Online (Sandbox Code Playgroud)
我可以使用let,但我觉得它使代码更难理解
s3data可空性(在这种情况下,可以为空)通常可以用返回的?:elvis运算符替换.s3data),一个run块是合适的.如果感到困惑,请参阅Kotlin中的"接收器"是什么?因此,我会发现以下实现最具思想性,但要正确命名本地函数的参数:
fun foo() {
fun failure(p0: String, p1: String) = crashReporterService.sendIssue(p0, p1).let { Result.FAILURE }
val s3data = presignedUrl.body() ?: return failure("Failed uploading image", "Error - ${presignedUrl.raw()}")
val uploadImage = s3data.run { api.uploadImage(bucketUrl, awsAccessKeyId, policy, key, signature, body).execute() }
return if (uploadImage.isSuccessful) {
Result.SUCCESS
} else {
failure("Failed uploading file", "Failed uploading file ${uploadImage.raw()}")
}
}
Run Code Online (Sandbox Code Playgroud)
您的问题接近代码审查,因此您可能也很高兴知道有专门的Stack Exchange网络.但是,请先阅读Stack Overflow用户的Code Review指南.
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |