2016-07-24 8 views
2

注:私はここでスイフト2について話しています。外部パラメータ名をメソッドの最初のパラメータに追加する必要がありますか?どうして?

私はメソッドの命名規則の2種類の見てきました:

func animateWithDuration(duration: NSTimeInterval, animation:() -> Void) 

func animate(withDuration duration: NSTimeInterval, animation:() -> Void) 

を私はこれらのいずれかが、より "swifty" であることを聞きました。しかし、私はそれを覚えていない。しかし、なぜ人々はこれについて気にしますか? 2つの規則呼び出されたときとほぼ同じになります。

animateWithDuration(10) { ... } 

animate(withDuration: 10) { ... } 

あなたが大声メソッドを読み出すしようとすると、それはまったく同じ言葉です。期間を持つ

アニメーション10

これはもっと賢明で、なぜですか?

答えて

1

は、かつての構文はスウィフト2に対する好ましい/デフォルトの構文であり、後者は、WWDC 2016のビデオ、Swift API Design Guidelinesでスウィフト3.

のための優先/デフォルトの構文で、彼らはこの古い、かつての自分の感想を述べますココアAPI内の構文:

Objective-C用に書かれたこれらのAPIをすべてSwiftにそのまま適用すると、少し外れているように見えます。彼らはちょっと気分が悪いと感じる。

アップル自身の見積も​​りでは、新しい構文がSwiftyになっています。

あなたがSwift 2.xを検討することに自分自身を制限しているなら、一貫性のために伝統的な構文を固執する議論を簡単に行うことができます。また、Swift 3の移行パスを簡単にするために、自然に行うことができる新しい構文を採用することもできます(私の意見では、もっと説得力があります)。

しかし、「メソッド名にパラメータの名前を常に入れる」や「しない」などとは単純ではないと思います。 Swift 3には、最初のパラメータが外部パラメータ名を持たないメソッドを定義するケースがあります(Swift 2の場合と同様に、最初のパラメータの外部名を指定する場合があります)。 in that video(またはoutlined on the swift.org site)の原理をメソッドの命名規則に適用する方がよいでしょう。

+0

「Swift 3の移行パスを簡単にするために、自然に行うことができる新しい構文の採用を開始することができます」。間違いなくこれ。一貫性における一時的な限界利益は、数ヶ月でリファクタリングに値するものではありません。 – Alexander

1

コーディングスタイルについて議論するのはちょっと余計ですが、それに対して多くの議論があります。多少問題は、Swift 3 APIが第2のスタイルを使用するため、Swiftコードに使用することをお勧めします。

秒スタイルのために話すいくつかの引数が、それは別の引数が、それはキーワード引数一貫性のある、例えばになるということであるように

animate(withDuration: 10, andEffect: .Blend) 

として、複数の引数を持つ、より一貫性があるということですinitで:

let a = Animation(withDuration: 10, andEffect: .Blend) 

すべて()呼び出し構文の後、最初の場所での文章スタイルのメソッド呼び出しでそのうまく再生されません。 SmalltalkまたはObjCはこれではるかに優れています(IMO)。

関連する問題