Swift-style-guide: Leeres Array und Dictionary-Initialisierung überdenken

Erstellt am 7. Apr. 2016  ·  3Kommentare  ·  Quelle: raywenderlich/swift-style-guide

Der aktuelle Styleguide sagt, dass Arrays und Dictionaries auf folgende Weise initialisiert werden.

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

Ich möchte dies zurückdrängen zugunsten von:

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

Hier meine Begründung:

  • [Type]() sieht fremd aus, besonders für einen Neuling. Für mich liest sich : [Type] = [] in vielen Fällen einfach besser.
  • Wenn ich ein leeres Array (oder OptionSetType) als Argument übergebe, wo Typrückschluss verfügbar ist, verwende ich immer [], kein standardmäßig initialisiertes Objekt. Hier gibt es eine gewisse Konsistenz.
  • Bei kurzen, einzeiligen Arrays kann oft auf den Typ geschlossen werden. Das ist gut und sollte genutzt werden. Bei Arrays, die sich über mehrere Zeilen erstrecken, kann der Typrückschluss jedoch kostspielig werden. Erwägen:
var stuff = [1, 2, 3, 4, 5,  // ... 100 more numbers
                  106.7, 107, "haha", nil, 108, 109]

Der Typprüfer muss alle Elemente scannen, um infer stuff richtig einzugeben. Selbst wenn es keine Tricks gibt ("haha"), habe ich gesehen, dass dies den Editor festgefahren hat. (Hallo Regenbogen.) Es scheint eine gute Idee zu sein, den Type Checker für Sie arbeiten zu lassen, um Ihre Arbeit zu überprüfen.

Was denkst du?

Hilfreichster Kommentar

@rayfix Ich bin gewachsen, um Ihr vorgeschlagenes Format zu bevorzugen, dh var names: [String] = []

Meine Begründung ist, dass dieser Ansatz konsistenter mit dem Ansatz aussieht, den Sie wählen würden, wenn Sie ein Array mit einer let -Konstante definieren möchten. (Sie würden es nicht mit einem leeren Array initialisieren, da Sie es später nicht ändern könnten.)

Zum Beispiel im Fall einer Klasse:

class SimpleClass {
    let array: [String]

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

Oder bei der Definition eines konstanten Arrays, dessen Wert von einer Bedingung abhängt.

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

Alle 3 Kommentare

@rayfix Ich bin gewachsen, um Ihr vorgeschlagenes Format zu bevorzugen, dh var names: [String] = []

Meine Begründung ist, dass dieser Ansatz konsistenter mit dem Ansatz aussieht, den Sie wählen würden, wenn Sie ein Array mit einer let -Konstante definieren möchten. (Sie würden es nicht mit einem leeren Array initialisieren, da Sie es später nicht ändern könnten.)

Zum Beispiel im Fall einer Klasse:

class SimpleClass {
    let array: [String]

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

Oder bei der Definition eines konstanten Arrays, dessen Wert von einer Bedingung abhängt.

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

Großes +1 dazu!

Ich habe für meine Kurse die var array: [Type] = [] -Notation gewählt, weil ich damit relativ früh in meinen Kursen Arrays (und Wörterbücher) unterrichten kann. Mein Unterrichtsansatz besteht darin, bei Null anzufangen, jeweils nur ein Thema hinzuzufügen und niemals Dinge unerklärt zu lassen. Diese Notation ermöglicht mir das, weil es keine Themen gibt, mit denen die Studenten zu diesem Zeitpunkt noch nicht vertraut sind, wie Initialisierer oder Generika.

Liebe es. Ich verwende Ihre vorgeschlagene Syntax in meinen eigenen Codebasen; Definition und Typ der Variable auf der einen Seite der Gleichung, Wert auf der anderen. Schön und einfach.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen