Swift Language
Convenciones de estilo
Buscar..
Observaciones
Swift tiene una guía de estilo oficial: Swift.org API Design Guidelines . Otra guía popular es The Official raywenderlich.com Swift Style Guide.
Claro uso
Evitar la ambigüedad
El nombre de las clases, estructuras, funciones y variables debe evitar la ambigüedad.Ejemplo:
extension List {
public mutating func remove(at position: Index) -> Element {
// implementation
}
}
La llamada a la función a esta función se verá así:
list.remove(at: 42)
De esta manera, se evita la ambigüedad. Si la llamada a la función sería simplemente list.remove(42)
no estaría claro, si se eliminaría un Elemento igual a 42 o si se eliminaría el Elemento en el Índice 42.
Evitar la redundancia
El nombre de las funciones no debe contener información redundante.Un mal ejemplo sería:
extension List {
public mutating func removeElement(element: Element) -> Element? {
// implementation
}
}
Una llamada a la función puede verse como list.removeElement(someObject)
. La variable someObject
ya indica que se ha eliminado un elemento. Sería mejor que la firma de función se vea así:
extension List {
public mutating func remove(_ member: Element) -> Element? {
// implementation
}
}
La llamada a esta función se ve así: list.remove(someObject)
.
Nombrando variables de acuerdo a su rol.
Las variables deben ser nombradas por su rol (por ejemplo, proveedor, saludo) en lugar de su tipo (por ejemplo, fábrica, cadena, etc.)Alto acoplamiento entre nombre de protocolo y nombres de variable
Si el nombre del tipo describe su rol en la mayoría de los casos (por ejemplo, Iterator), el tipo debe nombrarse con el sufijo `Type`. (por ejemplo, IteratorType)Proporcionar detalles adicionales cuando se utilizan parámetros de tipo débil
Si el tipo de un objeto no indica claramente su uso en una llamada de función, la función debe nombrarse con un nombre precedente para cada parámetro de tipo débil, describiendo su uso.Ejemplo:
func addObserver(_ observer: NSObject, forKeyPath path: String)
a la que se vería una llamada como `object.addObserver (self, forKeyPath: path)
en lugar de
func add(_ observer: NSObject, for keyPath: String)
a la que una llamada se vería como object.add(self, for: path)
Uso fluido
Usando lenguaje natural
Las llamadas de funciones deben estar cerca del idioma inglés natural.Ejemplo:
list.insert(element, at: index)
en lugar de
list.insert(element, position: index)
Métodos de fábrica de nombres
Los métodos de fábrica deben comenzar con el prefijo `make`.Ejemplo:
factory.makeObject()
Nombrando Parámetros en Inicializadores y Métodos de Fábrica
El nombre del primer argumento no debe involucrarse al nombrar un método de fábrica o un inicializador.Ejemplo:
factory.makeObject(key: value)
En lugar de:
factory.makeObject(havingProperty: value)
Nombrar de acuerdo a los efectos secundarios
- Las funciones con efectos secundarios (funciones de mutación) deben nombrarse usando verbos o sustantivos con el prefijo
form-
. - Las funciones sin efectos secundarios (funciones no mutantes) deben nombrarse usando sustantivos o verbos con el sufijo
-ing
o-ed
.
print(value)
array.sort() // in place sorting
list.add(value) // mutates list
set.formUnion(anotherSet) // set is now the union of set and anotherSet
Funciones no mutantes:
let sortedArray = array.sorted() // out of place sorting
let union = set.union(anotherSet) // union is now the union of set and another set
Funciones o variables booleanas
Las declaraciones que involucran booleanos deben leerse como afirmaciones.Ejemplo:
set.isEmpty
line.intersects(anotherLine)
Protocolos de denominación
- Los protocolos que describen qué es algo se deben nombrar usando sustantivos.
- Los protocolos que describen las capacidades deben tener
-able
,-ible
o-ing
como sufijo.
Collection // describes that something is a collection
ProgressReporting // describes that something has the capability of reporting progress
Equatable // describes that something has the capability of being equal to something
Tipos y propiedades
Tipos, variables y propiedades deben leerse como sustantivos.Ejemplo:
let factory = ...
let list = [1, 2, 3, 4]
Capitalización
Tipos y Protocolos
Los nombres de tipo y protocolo deben comenzar con una letra mayúscula.
Ejemplo:
protocol Collection {}
struct String {}
class UIView {}
struct Int {}
enum Color {}
Todo lo demas...
Las variables, constantes, funciones y casos de enumeración deben comenzar con una letra minúscula.
Ejemplo:
let greeting = "Hello"
let height = 42.0
enum Color {
case red
case green
case blue
}
func print(_ string: String) {
...
}
El caso de Carmel:
Todos los nombres deben utilizar el caso de camello apropiado. Estuche de camello superior para nombres de tipo / protocolo y estuche de camello inferior para todo lo demás.
Estuche de camello superior:
protocol IteratorType { ... }
Funda de camello inferior:
let inputView = ...
Abreviaturas
Deben evitarse las abreviaturas a menos que se usen comúnmente (por ejemplo, URL, ID). Si se usa una abreviatura, todas las letras deben tener el mismo caso.
Ejemplo:
let userID: UserID = ...
let urlString: URLString = ...