为什么Objective-C中方法名这么长

3
我学过C/C++、Python、Matlab和其他许多语言,但Objective-C中的方法名让我感到非常惊讶。使用长名称有什么好处?为什么其他语言没有使用长名称呢?非常感谢。

3
任何语言都可以使用长名称来清楚地表示变量/方法的用途。在 Obj-C 中,这是一种惯例,但仅限于此。如果您愿意,仍然可以使用垃圾名称编写 Obj-C。 - Wain
4个回答

4

这类似于代码规范。通常它非常有用。

但是你可以按照自己的想法命名方法。同时注意,不强制要求为所有参数命名。例如,你可以创建一个方法

- (void)makeDateFromDay:(int)day month:(int)month year:(int)year

并以此方式调用
[someObject makeDateFromDay:18 month:2 year:2014];

但你也可以给它取一个更短的名字。
- (void)makeDateFrom:(int)day :(int)month :(int)year

并像这样调用
[someObject makeDateFrom:18:2:2014];

但这样并不容易理解,是吗?

其他编程语言中是否有类似的情况? - Mr.DMS
2
@Mr.DMS 你在$language中有MakeDateFromDayMonthYear()吗?那不会更短。而且它是无用的,因为你必须计算参数并将其与名称相关联。 MakeDateFromMonthYearHourMinuteDoubleSecond()有6或7个参数吗?因为前导参数名称接近于无用,所以一些编程语言根本不使用它,你必须记住它。相反,你可以使用重载,这是一种自描述、易于使用的技术,你不必记住任何东西。;-) 当你阅读具有描述性参数的Objective-C代码时,你几乎总是知道正在发生什么。 - Amin Negm-Awad

4

简单的答案是,长方法名是自我描述的。(而且由于每个参数都通过另一个方法名部分引入,方法名会变得更长。)优点在于代码阅读非常容易,并且由于代码补全功能,手动输入整个名称并没有额外的惩罚。


我想补充一点,就是你不必像阅读没有适当文档和方法名称为 void * my_method(int a, int b, void *ctx, sothx t) 的 C 语言 .h 头文件时那样遭受相同的痛苦。 - Eugene

0

Objective-C的方法名遵循比其他语言更多规则的约定。例如,方法名的最后一个单词是第一个参数的名称。

- (id)valueForRow:(int)row Column:(int)column

用C++来说,可能会是这样的:

void getValue(int row, int column)

根据苹果公司的规定,该方法签名应该如下所示:- (id)valueForRow:(int)row column:(int)column。返回值的方法应该以描述返回值的名词或名词短语开头,因此您不应该使用 get 等动词作为前缀。 - jlehr

0

越多的方法,它们自己越长。

如果您考虑委托方法,在该方法中也有对从调用者继承的类的引用,因为这样可以对符合协议的类进行某种操作,这非常有用。

如果您假设有一个要执行大量计算的应用程序,例如商店应用程序,您不能使用相同名称(例如sum)声明所有方法,因为当您有多个具有相同名称的方法时,您开始失去对代码的控制。

许多程序员使用简短的语法来命名变量,例如:
a,b
但是当几个月后再次打开代码时,您必须重构程序逻辑以了解某个变量的作用。

给方法取一个长名称在团队合作中也很有用,以确保方法名称不被复制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接