Objective-Cの時代から、コードを読んだり命名したりするときに、そこそこの英語力、英文法力を要求される場面が多いと思います。(かつてObjective-Cで学ぶ英文法というのを社内LT会で発表しました。)SwiftのAPI Design Guidelinesを読んでみて、一層英文法力の必要性を感じたので、自分の理解のためにも「Swiftで学ぶ英文法」というテーマで書いてみようと思います。
Swiftのメソッドにはインンスタンス自身に変更を加えるもの(mutating)と、自身には変更を加えずに新しいインスタンスを作って返すもの(nonmutating)が対になって存在するものがあります。その場合、演算が動詞で表されるならば、mutatingなメソッドに命令形を使い、nonmutatingなメソッドに過去分詞形(〜ed)または現在分詞系(〜ing)を使います。
例えば配列のソート sort()
と、要素追加 append(_:)
は以下のようになっています。
Mutating | Nonmutating |
---|---|
x.sort() |
x.sorted() |
x.append(y) |
x.appending(y) |
では過去分詞と現在分詞の使い分けはどうすればいいかというと、動詞に直接目的語をとるかどうかで決まります。sort
は直接目的語を取らないので過去分詞にしてsorted
、append
は引数y
という直接目的語を取るので現在分詞にしてappending
となります。
英文として読めるようにしてみるとこんな感じでしょうか。
x.sort()
// x, sort (yourself).
// x、自分をソートして。
x.sorted()
// x, (return your copy which is) sorted.
// x、ソートされた自分のコピーを返して。
x.append(y)
// x, append y (to yourself).
// x、自分にyを追加して。
x.appending(y)
// x, (return your copy) appending y.
// x、yを追加した自分のコピーを返して。