objective-c - 为什么不用 "with"启动便利构造函数?

标签 objective-c cocoa

我最喜欢 Cocoa 的一个原因是可读性因素。

最让我烦恼的事情之一是便利构造函数强制重复的约定。

举个例子:

[NSString stringWithString:s]

[NSNumber numberWithDouble:d]

[NSValue valueWithInt:i]

[NSDictionary dictionaryWithObjectsAndKeys:<blah>]

等等

为什么约定不简单地以单词“with”开始便利构造函数?那么我们将有:

[NSString withString:s]

[NSNumber withDouble:d]

[NSValue withInt:i]

[NSDictionary withObjectsAndKeys:<blah>]

等等

这是一个次要的讨论点,但我想我应该抛出一个,看看是否有比我更有影响力的人可以解释我脑海中的所有回声。

显然,我不会请求 AAPL 重写 appKit 以支持我的建议,但是是否有任何理由反对这样命名我自己的便利构造函数?

当然,我可以在自己的代码中使用任何我想要的约定,但我讨厌盲目地逆流而上。

最佳答案

实际上,这样做是有技术原因的。如果每个 shoelaceWithString: 类型的方法都更改为仅 withString:,我们最终会得到大量具有相同名称方法和不同签名的类。这对编译器的静态类型检查起到了欺骗作用,并可能导致它抛出各种烦人和不必要的警告。

Cocoa 文化还有一个方面,即开发人员喜欢他们的代码是 self 记录的。这意味着方法名称表明它们的参数是什么以及它们返回什么。 Apple 的编码指南实际上警告了名称模糊的方法,建议在名称中添加单词以明确方法的作用是可取的。

关于objective-c - 为什么不用 "with"启动便利构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1017652/

相关文章:

ios - float 自动布局 iOS/OSX

ios - 用文本填充单元格中的标签

ios - 为什么点击搜索栏时 UISearchController 上有一条白线?

objective-c - 获取启动卷上所有分区及其名称的列表

objective-c - NSWindow,按下 ENTER 键 : how to limit the key listening to the focused NSControl?

objective-c - 在 Objective-C 中使用异常的代价是什么?

ios - 检查 NSString 是否为本地文件

ios - 与自定义 MKAnnotationView 不兼容的指针

objective-c - NSLocalizedString 中的注释标准

ios - NSNetService dictionaryFromTXTRecord 对无效输入的断言失败