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.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.
var items: [Type] = []
. https://twitter.com/_jackhl/status/646480946619805697¿Qué piensas?
@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.
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:
O al definir una matriz constante cuyo valor depende de una condición.