Swift-style-guide: 空の配列と辞書の初期化を再検討する

作成日 2016年04月07日  ·  3コメント  ·  ソース: raywenderlich/swift-style-guide

現在のスタイルガイドでは、配列と辞書は次の方法で初期化されるとされています。

var names = [String]()
var lookup = [String: Int]()

私はこれを押し戻して、次のことを支持したいと思います。

var names: [String] = []
var lookup: [String: Int] = [:]

これが私の理論的根拠です:

  • [Type]()は、特に新参者にとっては異質に見えます。 私にとって、 : [Type] = []は、多くの場合、単に読みやすくなっています。
  • 型推論が利用可能な引数として空の配列(またはOptionSetType)を渡すとき、デフォルトの初期化されたオブジェクトではなく、常に[]を使用しています。 ここには一貫性があります。
  • 短い単一ラインアレイの場合、タイプを推測できることがよくあります。 これは良いことであり、利用する必要があります。 ただし、複数の行にまたがる配列の場合、型推論にコストがかかる可能性があります。 検討:
var stuff = [1, 2, 3, 4, 5,  // ... 100 more numbers
                  106.7, 107, "haha", nil, 108, 109]

型チェッカーは、すべての要素をスキャンして、 stuffを正しく型推論する必要があります。 トリックがない場合でも(「はは」)、私はこれがエディターの行き詰まりを見てきました。 (こんにちはレインボー。)タイプチェッカーを機能させて、作業を再確認するのは良い考えのようです。

どう思いますか?

最も参考になるコメント

@rayfix私はあなたの提案したフォーマット、すなわちvar names: [String] = []を好むように成長しました

私の合理的な理由は、このアプローチは、 let定数を使用して配列を定義する場合に採用するアプローチとより一貫性があるように見えるということです。 (後で変更できないため、空の配列に初期化することはありません)

たとえば、クラスの場合:

class SimpleClass {
    let array: [String]

    init(array: [String]) {
        self.array = array
    }    
}

または、値が条件に依存する定数配列を定義する場合。

let array: [String]
if condition {
    array = array1
} else {
    array = array2
}

全てのコメント3件

@rayfix私はあなたの提案したフォーマット、すなわちvar names: [String] = []を好むように成長しました

私の合理的な理由は、このアプローチは、 let定数を使用して配列を定義する場合に採用するアプローチとより一貫性があるように見えるということです。 (後で変更できないため、空の配列に初期化することはありません)

たとえば、クラスの場合:

class SimpleClass {
    let array: [String]

    init(array: [String]) {
        self.array = array
    }    
}

または、値が条件に依存する定数配列を定義する場合。

let array: [String]
if condition {
    array = array1
} else {
    array = array2
}

これで大きな+1!

コースのかなり早い段階で配列(および辞書)を教えることができるため、コースにvar array: [Type] = []表記を選択しました。 私の教授法は、最初から始めて、一度に1つのトピックだけを追加し、説明のつかないままにしないことです。 この表記法では、初期化子やジェネリックスなど、その時点で学生がまだ慣れていないトピックが含まれていないため、これを行うことができます。

大好きです。 私はあなたの提案した構文を私自身のコードベースで使用します。 方程式の一方の側に変数の定義とタイプ、もう一方の側に値。 素晴らしくてシンプル。

このページは役に立ちましたか?
0 / 5 - 0 評価