原文來自知乎:
Objective-C 的一些函數名爲什麼都這麼長,有些長的甚至不可思議,某些方法的函數名帶個參數的話甚至超過一行!爲什麼不能像 C 語言那樣多一些成員函數的包涵,使得程序員能輕易的記住並通過.name的提示方法簡單的找到?
可讀性。
比如你設計一個邀請朋友參加聚會的方法,除了指定姓名外,還可選擇是否提前預約:
public void inviteFriend(String name, boolean appointment);
somebody.inviteFriend("LiLei", true);
所以爲什麼有人提倡不建議使用布爾參數,就是因爲可讀性麻煩,一種解決方案是用枚舉:
public void inviteFriend(String name, Appointment appointment);
-(void) inviteFriend:(NSString *)name appointment:(BOOL)appoint;
[someBody inviteFriend:@"LiLei" appointment:YES];
------------
更新回答,也是對@朱衆 方案的迴應。
如果看到這樣一個方法:
dongxin.send("iPhone 5s", zhuzhong, 2, "順豐快遞", 20, 20, true, false, true)
而 Objective C 的代碼:
[dongxin send:@"iPhone 5s" toContacts:zhuzhong,
quantity:2,
expressCompany:@"順豐快遞",
insureValue:20,
freight:20,
atDestination:YES,
shippingNotice:NO,
arrivalNotice:YES];
很顯然這個方法非常長……不過個人認爲,在編寫程序基本不受影響(有完善的自動補全)的前提下,可讀性應該儘可能的好。
在這樣的場合,分拆方法基本上行不通,太複雜了。至於爲什麼不使用命名參數,因爲和文檔一樣,都不是強制性的要求,而且命名參數在代碼編寫時恐怕不是很方便,可能會被偷懶的人自動略過。而 Objective C 是真正把可讀性要求寫進了語法裏,而不是文檔裏。