Swift-style-guide: Reconsidérer l'initialisation d'un tableau vide et d'un dictionnaire

Créé le 7 avr. 2016  ·  3Commentaires  ·  Source: raywenderlich/swift-style-guide

Le guide de style actuel indique que les tableaux et les dictionnaires doivent être initialisés de la manière suivante.

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

Je voudrais repousser cela en faveur de:

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

Voici mon raisonnement :

  • [Type]() semble étranger, surtout pour un nouveau venu. Pour moi, : [Type] = [] se lit simplement mieux dans de nombreux cas.
  • Lorsque je passe un tableau vide (ou OptionSetType) comme argument où l'inférence de type est disponible, j'utilise toujours [], pas un objet initialisé par défaut. Il y a une certaine cohérence ici.
  • Pour les tableaux courts à une seule ligne, le type peut souvent être déduit. C'est bien et devrait être utilisé. Cependant, pour les tableaux qui s'étendent sur plusieurs lignes, l'inférence de type peut devenir coûteuse. Envisager:
var stuff = [1, 2, 3, 4, 5,  // ... 100 more numbers
                  106.7, 107, "haha", nil, 108, 109]

Le vérificateur de type doit analyser tous les éléments pour saisir correctement stuff . Même lorsqu'il n'y a pas d'astuces ("haha"), j'ai vu cela enliser l'éditeur. (Bonjour arc-en-ciel.) Faire fonctionner le vérificateur de type pour que vous puissiez vérifier votre travail semble être une bonne idée.

Qu'en penses-tu?

Commentaire le plus utile

@rayfix J'ai appris à préférer votre format suggéré, c'est-à-dire var names: [String] = []

Mon raisonnement est que cette approche semble plus cohérente avec l'approche que vous adopteriez lorsque vous souhaitez définir un tableau avec une constante let . (Vous ne l'initialiseriez pas dans un tableau vide car vous ne pourriez pas le modifier ultérieurement)

Par exemple dans le cas d'une classe :

class SimpleClass {
    let array: [String]

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

Ou lors de la définition d'un tableau constant dont la valeur dépend d'une condition.

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

Tous les 3 commentaires

@rayfix J'ai appris à préférer votre format suggéré, c'est-à-dire var names: [String] = []

Mon raisonnement est que cette approche semble plus cohérente avec l'approche que vous adopteriez lorsque vous souhaitez définir un tableau avec une constante let . (Vous ne l'initialiseriez pas dans un tableau vide car vous ne pourriez pas le modifier ultérieurement)

Par exemple dans le cas d'une classe :

class SimpleClass {
    let array: [String]

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

Ou lors de la définition d'un tableau constant dont la valeur dépend d'une condition.

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

Gros +1 là dessus !

J'ai choisi la notation var array: [Type] = [] pour mes cours car elle me permet d'enseigner les tableaux (et les dictionnaires) assez tôt dans mes cours. Mon approche pédagogique est de partir de zéro, d'ajouter un seul sujet à la fois et de ne jamais laisser les choses inexpliquées. Cette notation me permet de le faire car elle n'implique aucun sujet avec lequel les étudiants ne sont pas encore familiarisés à ce stade, comme les initialiseurs ou les génériques.

Aimer. J'utilise votre syntaxe suggérée dans mes propres bases de code ; définition et type de la var d'un côté de l'équation, valeur de l'autre. Agréable et simple.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

aramezk picture aramezk  ·  9Commentaires

hollance picture hollance  ·  28Commentaires

ghost picture ghost  ·  26Commentaires

sima-11 picture sima-11  ·  5Commentaires

fabienwarniez picture fabienwarniez  ·  9Commentaires