d.b*_*erg 9 naming-conventions swift
在Ruby中,变体方法(即修改self的方法)按照惯例标记为bang(!),以将它们与不修改self的类似命名方法分开.
例如,Array#sort返回一个已排序的数组,但Array#sort!会修改调用它的数组.
我现在开始研究Swift.我如何命名一种变异方法将它与非变异双胞胎分开?
我知道,Python有sorted(list)VS list.sort().这是一个好的模式,即.sorted()(非变异)和.sort()(变异)?
那些不容易以这种方式转变的名字怎么样,比如String#nextvs String#next!?
关于发布官方指南,这里是:https: //swift.org/documentation/api-design-guidelines/#name-according-to-side-effects
名称突变/非突变方法对一致.变异方法通常具有类似语义的非突变变体,但返回新值而不是就地更新实例.
当动词由动词自然描述时,使用动词对变异方法的命令,并应用"ed"或"ing"后缀来命名其非变形对应物.
Run Code Online (Sandbox Code Playgroud)Mutating Nonmutating x.sort() z = x.sorted() x.append(y) z = x.appending(y)喜欢用动词的过去来命名nonmutating变形词(通常是追加"ED"):
Run Code Online (Sandbox Code Playgroud)/// Reverses `self` in-place. mutating func reverse() /// Returns a reversed copy of `self`. func reversed() -> Self ... x.reverse() let y = x.reversed()当加入"ED"是不是语法,因为动词有直接的对象,用动词的现在命名nonmutating变异词,通过附加"ING".
Run Code Online (Sandbox Code Playgroud)/// Strips all the newlines from `self` mutating func stripNewlines() /// Returns a copy of `self` with all the newlines stripped. func strippingNewlines() -> String ... s.stripNewlines() let oneLine = t.strippingNewlines()当操作由名词自然描述时,使用名词作为非突变方法,并应用"形式"前缀来命名其变异对应物.
Run Code Online (Sandbox Code Playgroud)Nonmutating Mutating x = y.union(z) y.formUnion(z) j = c.successor(i) c.formSuccessor(&i)
Ray Wenderlich在自己的Swift风格指南中总结了这一点:
动词方法遵循非变异版本的-ed,-ing规则
名词方法遵循非变异版本的formX规则
请注意,根据提案:Dave Abrahams的 SE-0059 ,更新API命名指南和重写集API,官方指南已针对Swift 3进行了更新.因此,在2016年4月18日获得批准后.
但是在五天前,即2016年4月13日,Erica Sadun在她的文章" 停止疯狂"和修复Swift API指南中表达了一些不同的观点.让我们补充一点,埃里卡以前写过她自己的文章,命名方法和函数,也可以在她的书Swift Style中找到.为了好玩,她试图用表情符号解释变异命名.
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |