内容简介:However, if we get too much into it, it complicates the readability of the code.
K
otlin provide us a lot of handy utilities, like takeIf
etc. It could help make code so much concise, removed temporary variable etc.
However, if we get too much into it, it complicates the readability of the code.
Take for example the below.
savedStateHandle.get<String>(KEY).takeIf {
!it.isNullOrEmpty()
}?.let { setValue(it) } ?: removeValue()
One doing this might feel great as it
- eliminates if-else,
- chain the code together,
- eliminate temporary variable.
However the down side of this code is,
- It would takes a some time for one to understand the flow of the code. It obscure the simple logic behind the code.
- If we decompile the code, look at the number of temporary variable it generates.
Object var2 = this.savedStateHandle.get("Key");
boolean var3 = false;
boolean var4 = false;
String it = (String)var2;
int var6 = false;
CharSequence var7 = (CharSequence)it;
boolean var8 = false;
boolean var9 = false;
String var10000 = (String)(var7 != null && var7.length() != 0 ? var2 : null);
if (var10000 != null) {
String var10 = var10000;
var3 = false;
var4 = false;
var6 = false;
Intrinsics.checkExpressionValueIsNotNull(var10, "it");
this.setValue(var10);
} else {
this.removeValue();
}
The simplified version
Let’s get back to it’s old Java way of writing, simple IF-ELSE. Doesn’t look that elegant, but one look, everything is understood.
val savedMessage = savedStateHandle.get<String>(KEY)
if (savedMessage.isNullOrBlank()) {
removeValue()
} else {
setValue(savedMessage)
}
Beside if we decompile, it looks neat too, with only little generated variables.
String savedMessage = (String)this.savedStateHandle.get("Key");
CharSequence var3 = (CharSequence)savedMessage;
boolean var4 = false;
boolean var5 = false;
if (var3 == null || StringsKt.isBlank(var3)) {
this.removeValue();
} else {
this.setValue(savedMessage);
}
Using When
Of course, if we like, we could improve it a little with when
, shorten it by one line compare with IF-ELSE
val savedMessage = savedStateHandle.get<String>(KEY)
when {
savedMessage.isNullOrBlank() -> removeValue()
else -> setValue(savedMessage)
}
The decompiled code looks good too.
String savedMessage = (String)this.savedStateHandle.get("Key");
CharSequence var3 = (CharSequence)savedMessage;
boolean var4 = false;
boolean var5 = false;
if (var3 == null || StringsKt.isBlank(var3)) {
this.removeValue();
} else {
this.setValue(savedMessage);
}
Using run
But if one complaint we need to code the temporary variable savedMessage
, we could eliminate it using run
(or some other Scope function). Like below…
savedStateHandle.get<String?>(KEY).run {
when {
this.isNullOrBlank() -> removeValue()
else -> setValue(this)
}
}
The decompile code looks like below. Not as nice, but it’s still better than the first one.
Object var2 = this.savedStateHandle.get("Key");
boolean var3 = false;
boolean var4 = false;
String $this$run = (String)var2;
int var6 = false;
CharSequence var7 = (CharSequence)$this$run;
boolean var8 = false;
boolean var9 = false;
if (var7 == null || StringsKt.isBlank(var7)) {
this.removeValue();
} else {
this.setValue($this$run);
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
操作系统基础教程
戴维斯 / 第1版 (2006年7月1日) / 2006-7 / 34.0
这是一本关于操作系统基本原理的教科书,其最大特点就是从操作系统的分层概念出发,深入浅出地介绍了操作系统的基本概念和基本框架。本书可以作为高等院校非计算机专业相关课程的教材或参考书,也适合具有高中以上数学基础的计算机用户自学,还可以作为社会上计算机培训机构的教材。对所有想了解计算机操作系统,但又不需要或不打算深入学习其理论和实现细节的读者来说,本书是一本极具价值的入门指导书。一起来看看 《操作系统基础教程》 这本书的介绍吧!
XML、JSON 在线转换
在线XML、JSON转换工具
RGB HSV 转换
RGB HSV 互转工具