Swift-style-guide: Reconsiderando la matriz vacía y la inicialización del diccionario

Creado en 7 abr. 2016  ·  3Comentarios  ·  Fuente: raywenderlich/swift-style-guide

La guía de estilo actual dice que las matrices y los diccionarios se inicializan de la siguiente manera.

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

Me gustaría rechazar esto a favor de:

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

Aquí está mi razón:

  • [Type]() parece extranjero, especialmente para un recién llegado. Para mí, : [Type] = [] simplemente se lee mejor en muchos casos.
  • Cuando paso una matriz vacía (u OptionSetType) como argumento donde la inferencia de tipo está disponible, siempre estoy usando [], no un objeto inicializado predeterminado. Hay algo de consistencia aquí.
  • Para matrices cortas de una sola línea, a menudo se puede inferir el tipo. Esto es bueno y debe ser utilizado. Sin embargo, para matrices que abarcan varias líneas, la inferencia de tipo puede volverse costosa. Considerar:
var stuff = [1, 2, 3, 4, 5,  // ... 100 more numbers
                  106.7, 107, "haha", nil, 108, 109]

El verificador de tipos necesita escanear todos los elementos para escribir correctamente inferir stuff . Incluso cuando no hay trucos ("jaja"), he visto que esto empantana el editor. (Hola, arcoíris). Hacer que el verificador de tipos funcione para que verifique dos veces su trabajo parece una buena idea.

¿Qué piensas?

Comentario más útil

@rayfix He llegado a preferir su formato sugerido, es decir var names: [String] = []

Mi razonamiento es que este enfoque parece más coherente con el enfoque que tomaría cuando desee definir una matriz con una constante let . (No lo inicializaría en una matriz vacía ya que no podría cambiarlo más tarde)

Por ejemplo en el caso de una clase:

class SimpleClass {
    let array: [String]

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

O al definir una matriz constante cuyo valor depende de una condición.

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

Todos 3 comentarios

@rayfix He llegado a preferir su formato sugerido, es decir var names: [String] = []

Mi razonamiento es que este enfoque parece más coherente con el enfoque que tomaría cuando desee definir una matriz con una constante let . (No lo inicializaría en una matriz vacía ya que no podría cambiarlo más tarde)

Por ejemplo en el caso de una clase:

class SimpleClass {
    let array: [String]

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

O al definir una matriz constante cuyo valor depende de una condición.

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

¡Gran +1 en esto!

Elegí la notación var array: [Type] = [] para mis cursos porque me permite enseñar matrices (y diccionarios) bastante temprano en mis cursos. Mi enfoque de enseñanza es comenzar desde cero, agregar solo un tema a la vez y nunca dejar las cosas sin explicar. Esta notación me permite hacer eso porque no involucra ningún tema con el que los estudiantes aún no estén familiarizados en este punto, como inicializadores o genéricos.

Me encanta. Uso su sintaxis sugerida en mis propias bases de código; definición y tipo de la var en un lado de la ecuación, valor en el otro. Bonito y sencillo.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

designatednerd picture designatednerd  ·  22Comentarios

fabienwarniez picture fabienwarniez  ·  9Comentarios

luki picture luki  ·  3Comentarios

rwenderlich picture rwenderlich  ·  29Comentarios

grosch picture grosch  ·  6Comentarios