防衛條件與函式原型設計 Guard Condition 小事
2 min readMar 30, 2018
比如說我們有個 hello(“world”)
可以印出 “hello world“
,hello(null)
則印出 “hello”
:
但是這樣是不好的函式定義,我們寧可多創一個無參數函式:
hello(); // "hello"
hello("world"); // "hello world"
另外可以盡可能把防衛條件外移化,提早化,限制不能給 null
參數,能更早就檢查,更早處理就處理,也可避免重複的檢查:
這是在 code review 的時候,看到 func(null)
就會渾身不對勁的小事。
如果外部就是已經傳 nullable 進來該怎麼辦?
void printHello(@Nullabe final String text) {
print(hello(text));
}String hello(@Nullable String text) {
String s = "hello";
if (text != null) {
s += " ";
s += text;
}
return s;
}
請一樣拆 functions 外面只剩下 if else
留在外面:
void printHello(@Nullabe final String text) {
print(text == null ? hello() : hello(text));
}String hello() { return "hello"; }
String hello(@NotNull final String text) {
return hello() + " " + text;
}