2017-04-18 7 views
1

Swiftイデオロギーに続くメソッドはどれですか?Swiftメソッドの最初の引数ラベル

  • func addChapter(_ chapter: Chapter)
  • func add(chapter chapter: Chapter)
  • func add(_ chapter: Chapter)
+5

私は最後の方がSwift 3 APIデザインガイドラインに従っていると思います – Sweeper

答えて

1

TLDR:chapter情報は、あなたが第1又は第3のオプションを使用する必要があり、他の方法/意味と区別することが重要であるかどうかに応じて

。 2番目のオプションではありません。

名前が使用されているコードを読んでいる人のあいまいさを避けるために必要なすべての単語を含めます。

...、文法的なフレーズの最初の引数の一部を形成する場合、ベース名にいずれかの単語を追加し、そのラベルを省略し、例えばx.addSubview(y)

API Design Guidelinesから)


これは、クラスを知らずに決定するのは容易ではありません。

class Book { 
    var chapters: [Chapter] 
    var pages: [Page] 
    var metadata: [MetaData] 
} 

あなたがobj-Cのメソッドがインポートされている方法についてのSwift Evolution 0005に見れば、あなたはメソッド[UIView addGestureRecognizer:]をインポートするための好ましい方法はaddGestureRecognizer(_:UIGestureRecognizer)であることを学ぶことができます。

だが、これはクラスで考えてみましょう。

注根拠:

我々はGestureRecognizerをドロップした場合、単に追加残し、我々は概念的gestureRecognizersプロパティを変更しますが、そうすることを過度に一般的な名前を使用する方法で終わります。あなたの最初のオプションは、その後で

:ルール

がある理由を囲むクラスのプロパティと一致する方法のベース名からサフィックスを剪定決してます

正しい解決策。一方

、クラスは、次の形式がある場合:

class Chapters { 
    private var chapters: [Chapter] 
} 

(例えばアレイ状容器)

を次にadd(_:)が正しい解です。

第2のオプションadd(chapter:)は決して使用しないでください。

0

私はそれは、状況に依存だと思います。

たとえば、User構造体があります。

struct User { 
    static func add(with userId: String) { 
     // ... 
    } 

    static func addFollower(for userId: String, _ followerId: String) { 
     // ... 
    } 
} 

そして、あなたはそれを使用します。

User.add(with: newUserId) // Like sentense: User add with new user Id 

そして

User.addFollower(for: currentUserId, followerId) // Like sentense: User add follower for current user Id 

はそれがAPI Design guidelinesから

1

をホープ、最初のものは正しいようだ:

// Clear 
func addChapter(_ chapter: Chapter) 
variable.addChapter(x) 

// Not clear 
func add(chapter chapter: Chapter) 
variable.add(chapter: x) 

// Not clear 
func add(_ chapter: Chapter) 
variable.add(x) 

注:Sulthanさんのコメント後に答えを変更しました。彼の答えを参考にしてください。

+0

2番目は、あなたが引用しているAPIデザインガイドラインから正しくありません。 – Sulthan

+0

私はあなたが「不必要な単語を省略する」と言っていると思いますが、変数型自体に依存しています。例の「要素」は非常に一般的なものなので、変数名自体に型が指定されています。 "cancelButton";答えの章の場合は一般的なものではないので、変数名は "first"、 "second"などのようなものではありません。その場合、メソッド定義にコンテキストを提供することを好みます。 –

+0

私が参照してください* "それ以外の場合、最初の引数が文法的なフレーズの一部を構成する場合は、そのラベルを省略し、先行する単語をベース名に追加します" * – Sulthan

0

個人的に私は、このソリューションは、私には明確なように思える

func add(chapter: Chapter) 

となるだろう。

関連する問題