Swift-style-guide: Reconsiderando matriz vazia e inicialização de dicionário

Criado em 7 abr. 2016  ·  3Comentários  ·  Fonte: raywenderlich/swift-style-guide

O guia de estilo atual diz que arrays e dicionários devem ser inicializados da seguinte maneira.

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

Eu gostaria de empurrar isso para trás em favor de:

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

Segue meu raciocínio:

  • [Type]() parece estrangeiro, especialmente para um recém-chegado. Para mim, : [Type] = [] simplesmente lê melhor em muitos casos.
  • Quando passo um array vazio (ou OptionSetType) como argumento onde a inferência de tipo está disponível, estou sempre usando [], não um objeto inicializado padrão. Há alguma consistência aqui.
  • Para matrizes de linha única curtas, o tipo pode ser frequentemente inferido. Isso é bom e deve ser utilizado. No entanto, para matrizes que abrangem várias linhas, a inferência de tipo pode se tornar cara. Considerar:
var stuff = [1, 2, 3, 4, 5,  // ... 100 more numbers
                  106.7, 107, "haha", nil, 108, 109]

O verificador de tipos precisa varrer todos os elementos para digitar corretamente stuff . Mesmo quando não há truques ("haha"), já vi isso atolar o editor. (Olá arco-íris.) Fazer o verificador de tipos funcionar para você verificar novamente seu trabalho parece uma boa ideia.

O que você acha?

Comentários muito úteis

@rayfix Eu passei a preferir seu formato sugerido, ou seja var names: [String] = []

Meu raciocínio é que essa abordagem parece mais consistente com a abordagem que você usaria quando deseja definir uma matriz com uma constante let . (Você não inicializaria em uma matriz vazia, pois não seria capaz de alterá-la posteriormente)

Por exemplo, no caso de uma classe:

class SimpleClass {
    let array: [String]

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

Ou ao definir uma matriz constante cujo valor depende de uma condição.

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

Todos 3 comentários

@rayfix Eu passei a preferir seu formato sugerido, ou seja var names: [String] = []

Meu raciocínio é que essa abordagem parece mais consistente com a abordagem que você usaria quando deseja definir uma matriz com uma constante let . (Você não inicializaria em uma matriz vazia, pois não seria capaz de alterá-la posteriormente)

Por exemplo, no caso de uma classe:

class SimpleClass {
    let array: [String]

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

Ou ao definir uma matriz constante cujo valor depende de uma condição.

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

Grande +1 nisso!

Eu escolhi a notação var array: [Type] = [] para meus cursos porque ela me permite ensinar arrays (e dicionários) bem cedo em meus cursos. Minha abordagem de ensino é começar do zero, adicionar apenas um tópico por vez e nunca deixar as coisas sem explicação. Essa notação me permite fazer isso porque não envolve nenhum tópico com o qual os alunos ainda não estejam familiarizados no momento, como inicializadores ou genéricos.

Adoro. Eu uso sua sintaxe sugerida em minhas próprias bases de código; definição e tipo do var de um lado da equação, valor do outro. Bonito e simples.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

rwenderlich picture rwenderlich  ·  29Comentários

grosch picture grosch  ·  6Comentários

gokselkoksal picture gokselkoksal  ·  9Comentários

sima-11 picture sima-11  ·  5Comentários

hollance picture hollance  ·  28Comentários