Swift-style-guide: Inkonsistenz beim Initialisieren leerer Arrays und Wörterbücher

Erstellt am 7. Apr. 2017  ·  4Kommentare  ·  Quelle: raywenderlich/swift-style-guide

Ich muss sagen, ich stimme den meisten Aussagen in den Richtlinien zu, aber diese scheint inkonsistent zu sein:

https://github.com/raywenderlich/swift-style-guide#type -annotation-for-empty-arrays-and-dictionaries

Die Anleitung gibt an:

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

wird bevorzugt

// not preferred
var names = [String]()
var lookup = [String: Int]()

Der Leitfaden bevorzugt jedoch im Interesse eines kompakten Codes in der Regel abgeleitete Typen:

// preferred
let message = "Click the button"
let currentBounds = computeViewBounds()

```schnell
// nicht bevorzugt
let message: String = "Klicken Sie auf die Schaltfläche"
let currentBounds: CGRect = computeViewBounds()

If we were being consistent, shouldn't we always prefer inferred types over explicit declaration?  I would think this is more consistent
```swift
// should be preferred
var names = [String]();
var lookup = [String: Int]();

Hilfreichster Kommentar

Meiner Meinung nach ist die Anleitung hier richtig. Es sagt einfach, wenn erforderlich, geben Sie den Typ an. Wenn nicht, lass es fallen.

Ok, aber ist das nicht wirklich eine Stilwahl? Nein nicht wirklich. Schauen wir uns einige Beispiele an:

// preferred
var colors: [UIColor]?
var colors: [UIColor] = []
var colors: [UIColor] = [.red, .green, .blue]

Lassen Sie uns nun diese 3 Beispiele in Ihre vorgeschlagene Präferenz umwandeln.

var colors: [UIColor]?
var colors = [UIColor]()
var colors = [UIColor.red, UIColor.green, UIColor.blue]

Sehen Sie, was dort passiert ist? Für die letzte Zeile müssen wir jetzt UIColor für jedes Element im Array wiederholen. Sie können auch argumentieren, dass die Deklarationen jetzt weniger konsistent sind.

Wie wäre es dann mit einer Methode? Aus Gründen der Konsistenz können Sie natürlich immer den Typ angeben. Ich kann mir jedoch vorstellen, dass die meisten Entwickler auf redundanten Code verzichten möchten.

// do we need to specify type?
var colors: [UIColor] = rainbowColors()
// no we don't
var colors = rainbowColors()

Ist das sinnvoll?

_Edit: Fairerweise können Sie auch ein Array wie dieses ableiten, aber da wir über Konsistenz sprechen, ziehe ich dieses vom Tisch. Dachte nur, ich liege richtig._

// preferred
var colors: [UIColor] = [.red, .green, .blue]
// not preferred
var colors = [.red, UIColor.green, .blue]

Alle 4 Kommentare

Meiner Meinung nach ist die Anleitung hier richtig. Es sagt einfach, wenn erforderlich, geben Sie den Typ an. Wenn nicht, lass es fallen.

Ok, aber ist das nicht wirklich eine Stilwahl? Nein nicht wirklich. Schauen wir uns einige Beispiele an:

// preferred
var colors: [UIColor]?
var colors: [UIColor] = []
var colors: [UIColor] = [.red, .green, .blue]

Lassen Sie uns nun diese 3 Beispiele in Ihre vorgeschlagene Präferenz umwandeln.

var colors: [UIColor]?
var colors = [UIColor]()
var colors = [UIColor.red, UIColor.green, UIColor.blue]

Sehen Sie, was dort passiert ist? Für die letzte Zeile müssen wir jetzt UIColor für jedes Element im Array wiederholen. Sie können auch argumentieren, dass die Deklarationen jetzt weniger konsistent sind.

Wie wäre es dann mit einer Methode? Aus Gründen der Konsistenz können Sie natürlich immer den Typ angeben. Ich kann mir jedoch vorstellen, dass die meisten Entwickler auf redundanten Code verzichten möchten.

// do we need to specify type?
var colors: [UIColor] = rainbowColors()
// no we don't
var colors = rainbowColors()

Ist das sinnvoll?

_Edit: Fairerweise können Sie auch ein Array wie dieses ableiten, aber da wir über Konsistenz sprechen, ziehe ich dieses vom Tisch. Dachte nur, ich liege richtig._

// preferred
var colors: [UIColor] = [.red, .green, .blue]
// not preferred
var colors = [.red, UIColor.green, .blue]

ich wäre mitgegangen

var colors: [UIColor]?
var colors = [UIColor]()
var colors: [UIColor] = [.red, .green, .blue]

Anstatt was du oben gemacht hast. Ziehen wir es nicht vor, den abgeleiteten Typ zu verwenden, außer wenn eine explizite Deklaration erforderlich ist? In diesem Sinne scheint die dritte Zeile konsistent.

Sie haben insofern Recht, als ich die Regel wahrscheinlich zu stark vereinfacht habe. Trotzdem ist an beiden Ansätzen nichts auszusetzen, es kommt nur auf die Präferenz an. In meinem Fall finde ich das Folgende konsistenter, lesbarer und praktischer, wenn man zwischen leeren / nicht leeren Zuständen hin- und hergeht. Ich finde, wir sollten andere mitreden lassen.

// preferred
var colors: [UIColor]?
var colors: [UIColor] = []
var colors: [UIColor] = [.red]
// not preferred (in my opinion)
var colors: [UIColor]?
var colors = [UIColor]()
var colors: [UIColor] = [.red]

Das Problem, das Sie damit haben, ist diese Inkonsistenz:

// inconsistent?
var colors: [UIColor] = []
var colors = rainbowColors()
// your preference
var colors = [UIColor]()
var colors = rainbowColors()

@RobertGummesson , Sie

var ints: Set = [1, 1, 2, 2]
var ints = Set([1, 1, 2, 2])
var ints = Set(arrayLiteral: 1, 1, 2, 2)

Nachdem Sie sich also für die erste Wahl entschieden haben, die für nicht leere Mengen besser geeignet ist, können eine leere Version und entsprechende Array-Konventionen rückgeformt werden.

var ints: Set<Int> = []
var ints = Set<Int>() // instead of this, which, without the above, seems fine.

var ints = [1, 1, 2, 2]
var ints: [Int] = []
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

samkim102 picture samkim102  ·  6Kommentare

jackwu95 picture jackwu95  ·  6Kommentare

rwenderlich picture rwenderlich  ·  29Kommentare

agirault picture agirault  ·  3Kommentare

grosch picture grosch  ·  6Kommentare