原文来自知乎:
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 是真正把可读性要求写进了语法里,而不是文档里。