Description
Read about null safety and safe calls in Kotlin and rewrite the following Java code using only one
if
expression:
Kotlinの null安全と安全呼び出しを読み、次のJavaコードを1つの
if
式に書き換えてください。
public void sendMessageToClient(
@Nullable Client client,
@Nullable String message,
@NotNull Mailer mailer
) {
if (client == null || message == null) return;
PersonalInfo personalInfo = client.getPersonalInfo();
if (personalInfo == null) return;
String email = personalInfo.getEmail();
if (email == null) return;
mailer.sendMessage(email, message);
}
Code
fun sendMessageToClient(
client: Client?, message: String?, mailer: Mailer
){
val email = client?.personalInfo?.email
if (email != null && message != null) {
mailer.sendMessage(email, message)
}
}
class Client (val personalInfo: PersonalInfo?)
class PersonalInfo (val email: String?)
interface Mailer {
fun sendMessage(email: String, message: String)
}
Memo
-
null安全
- null許容(nullable)な変数宣言は
var name* String? = ""
のように型定義の後ろに?
を付与する - nullableな変数へのアクセスは
?
か!!
?
...Safe call
。変数がnullの場合は、nullを返す!!
... 変数がnullの場合は、NPE(NullPointerException)をthrowする
- null許容(nullable)な変数宣言は
-
エルビス(Elvis)演算子
?:
- Kotlinには三項演算子がない
- 変数がnullの場合、右側の式を返す
val l = b?.length ?: -1
Rubyっぽい(という表現が正しいのかわかりませんが)と思いました。
null安全というより、変数がnullの場合のコードをKotlinではすっきり書けるようになった、という印象です。
変数がnullの場合の挙動をオペレータで変えれたり、エルビス演算子があることは、Javaのかゆいところをいい感じに抑えてくれていて、うれしい。