letでチェックしますか?


次の文章を読んで、何の見当もつかずに書いた.
https://dev.to/vlazdra/a-decompiled-story-of-kotlin-let-and-run-4k83
通常コトリンを使う人はあなたをチェックするときにletを使います.
コトリンの公式ガイドラインでも次のような案内をしているので

だから、私も時々あなたをチェックするときにletを使うことがあります.以下のコードを見てletを使ってあなたをチェックするときは、もっと慎重にすべきだと思います.
問題コードは次のとおりです.
var nullableValue: String? = ""
var nullableValue2: String? = null

nullableValue?.let {
	nullableValue2?.let {
		println("print1")
	}
}?: run {
	println("print2")
}
以上のコードの実行結果はprint 2を出力します.
runblockはnullabeValueではないと思っていたので実行できませんでしたが、予想外にrunblockはすでに実行されていました.
run blockを実行する理由はnullableValueのlet blockのnullableValueのlet blockがnullを返すためrun blockが実行されます.
正確にするためにjavaコードを使用してコンパイルします.
Unit var10000;

if (this.nullableValue != null) {
    if (this.nullableValue2 != null) {
        String var11 = "print1";
        System.out.println(var11);
        var10000 = Unit.INSTANCE;
    } else {
    	var10000 = null;
    }

	if (var10000 != null) {
    	return;
    }
    
    String var6 = "print2";
    System.out.println(var6);
    var10000 = Unit.INSTANCE;
}
ネストされたif文には、var 10000にnullを挿入してprtitを実行するコードが表示されます.
このようにコードを書くことはほとんどありませんが、このような状況が発生する可能性があります.letを盲目的に使用してチェックすると、コードが意図通りに実行されない可能性があることを知っています.
しかし、私はそのような形式であなたを検査したいです!個人的には皆さんも一緒に使うことをお勧めします
nullableValue?.also {
	
    //null이 리턴될 수 있는 block
    
}?: run {
	println("print2")
}