Objective-C 的一些函数名为什么都这么长?

https://blog.csdn.net/mvpyao/article/details/42425877

原文来自知乎:
Objective-C 的一些函数名为什么都这么长,有些长的甚至不可思议,某些方法的函数名带个参数的话甚至超过一行!为什么不能像 C 语言那样多一些成员函数的包涵,使得程序员能轻易的记住并通过.name的提示方法简单的找到?

可读性。比如你设计一个邀请朋友参加聚会的方法,除了指定姓名外,还可选择是否提前预约:

public void inviteFriend(String name, boolean appointment);


然后别人调用起来是这样的:
somebody.inviteFriend("LiLei", true);


问题就来了,写程序时即便不会搞错,等到阅读这段代码的时候,这个布尔参数的理解就非常有歧义,除了「是否预约」之外,还可能理解为「是否贵宾待遇」,「是否接送」,「是否发请帖」……。如果不看文档中参数的描述,根本就无法理解正确。所以为什么有人提倡不建议使用布尔参数,就是因为可读性麻烦,一种解决方案是用枚举:
public void inviteFriend(String name, Appointment appointment);


但引入了新的类型,似乎更麻烦了……来看看 Objective C 是怎样的:
-(void) inviteFriend:(NSString *)name appointment:(BOOL)appoint;


看起来挺麻烦的,但调用起来呢?
[someBody inviteFriend:@"LiLei" appointment:YES];


看起来是不是既方便,又一目了然?------------更新回答,也是对@朱众 方案的回应。如果看到这样一个方法:
dongxin.send("iPhone 5s", zhuzhong, 2, "顺丰快递", 20, 20, true, false, true)


不看文档的话,前面估计还能猜出来是 dongxin 给 zhuzhong 用顺丰发了两部 iPhone 5s,但后面那些玩意呢?而 Objective C 的代码:

[dongxin send:@"iPhone 5s" toContacts:zhuzhong,
                           quantity:2,
                           expressCompany:@"顺丰快递",
                           insureValue:20,
                           freight:20,
                           atDestination:YES,
                           shippingNotice:NO,
                           arrivalNotice:YES];                          

                  

你很容易就能知道,这是在说,dongxin 给 zhuzhong 用顺丰快递发了两部 iPhone 5s,并且保价费用20,运费20到付,没有发货通知,最后要求收到手机时打个招呼(自动略去英文水平吧)。很显然这个方法非常长……不过个人认为,在编写程序基本不受影响(有完善的自动补全)的前提下,可读性应该尽可能的好。在这样的场合,分拆方法基本上行不通,太复杂了。至于为什么不使用命名参数,因为和文档一样,都不是强制性的要求,而且命名参数在代码编写时恐怕不是很方便,可能会被偷懒的人自动略过。而 Objective C 是真正把可读性要求写进了语法里,而不是文档里。
————————————————
版权声明:本文为CSDN博主「mvpyao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mvpyao/article/details/42425877

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值