1
Boolean parameters to API functions considered harmful. [2011] (jlebar.com)
IngramChen 積分 0 編輯於

語言有支援 name parameter -like 的話很好解決:

// Dart:
myService.open(cache:true, write:false);

// Objectivce C:
[myService openWithCache:YES withWrite:NO];

Java 就沒有 name parameter 了,幾種妥協法:

// 1. enum,但有點麻煩
myService.open(Cache.ENABLE, Mode.READ)

// 2. 加在 method 上,但此法不能 scale
myService.openWithReadonlyCache()

// 3. 遇到 API 設計很爛時,寫的人還是可以維持易讀性
boolean cache = true;
boolean readonly = false;
myService.open(cache, readonly);
  1. 方法一我通常要兩個以上地方會用到這個 enum 我才會想抽。
  2. 方法二只有一個 boolean 變數才會用。像此例有兩個 boolean 就不會這樣寫了。
  3. 方法三是對付設計差或舊的 API,多了無謂的幾行,但好歹看的懂在做什麼。