Swift Language
Stijlconventies
Zoeken…
Opmerkingen
Swift heeft een officiële stijlgids: Swift.org API Design Guidelines . Een andere populaire gids is de officiële Swift Style Guide van raywenderlich.com.
Gebruik wissen
Vermijd dubbelzinnigheid
De naam van klassen, structuren, functies en variabelen moet dubbelzinnigheid vermijden.Voorbeeld:
extension List {
public mutating func remove(at position: Index) -> Element {
// implementation
}
}
De functieaanroep naar deze functie ziet er dan als volgt uit:
list.remove(at: 42)
Op deze manier wordt dubbelzinnigheid vermeden. Als de functieaanroep gewoon list.remove(42)
zou zijn, zou het onduidelijk zijn of een Element gelijk aan 42 zou worden verwijderd of als het Element bij Index 42 zou worden verwijderd.
Vermijd redundantie
De naam van functies mag geen overbodige informatie bevatten.Een slecht voorbeeld zou zijn:
extension List {
public mutating func removeElement(element: Element) -> Element? {
// implementation
}
}
Een aanroep van de functie kan eruit zien als list.removeElement(someObject)
. De variabele someObject
geeft al aan dat een element is verwijderd. Het zou beter zijn als de functiesignatuur er zo uitziet:
extension List {
public mutating func remove(_ member: Element) -> Element? {
// implementation
}
}
De aanroep van deze functie ziet er als volgt uit: list.remove(someObject)
.
Variabelen een naam geven op basis van hun rol
Variabelen moeten een naam krijgen op basis van hun rol (bijv. Leverancier, begroeting) in plaats van hun type (bijv. Fabriek, string, enz ..)Hoge koppeling tussen protocolnaam en variabelenamen
Als de naam van het type in de meeste gevallen zijn rol beschrijft (bijvoorbeeld Iterator), moet het type een naam krijgen met het achtervoegsel `Type`. (bijv. IteratorType)Geef aanvullende informatie bij het gebruik van zwak getypte parameters
Als het type van een object het gebruik ervan in een functieaanroep niet duidelijk aangeeft, moet de functie een naam krijgen met een voorafgaand zelfstandig naamwoord voor elke zwak getypte parameter, die het gebruik ervan beschrijft.Voorbeeld:
func addObserver(_ observer: NSObject, forKeyPath path: String)
waarop een aanroep eruit zou zien als `object.addObserver (self, forKeyPath: path)
in plaats van
func add(_ observer: NSObject, for keyPath: String)
waarnaar een aanroep eruit zou zien object.add(self, for: path)
Vloeiend gebruik
Natuurlijke taal gebruiken
Functieaanroepen moeten in de buurt komen van de natuurlijke Engelse taal.Voorbeeld:
list.insert(element, at: index)
in plaats van
list.insert(element, position: index)
Naamgeving fabrieksmethoden
Fabrieksmethoden moeten beginnen met het voorvoegsel `make`.Voorbeeld:
factory.makeObject()
Naamgevingsparameters in initializers en fabrieksmethoden
De naam van het eerste argument moet niet worden betrokken bij het benoemen van een fabrieksmethode of initialisatie.Voorbeeld:
factory.makeObject(key: value)
In plaats van:
factory.makeObject(havingProperty: value)
Benoemen volgens bijwerkingen
- Functies met bijwerkingen (muterende functies) moeten een naam krijgen met werkwoorden of zelfstandige naamwoorden voorafgegaan door
form-
. - Functies zonder bijwerkingen (niet-muterende functies) moeten een naam krijgen met zelfstandige naamwoorden of werkwoorden met het achtervoegsel
-ing
of-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
Niet-muterende functies:
let sortedArray = array.sorted() // out of place sorting
let union = set.union(anotherSet) // union is now the union of set and another set
Booleaanse functies of variabelen
Verklaringen met booleans moeten worden gelezen als beweringen.Voorbeeld:
set.isEmpty
line.intersects(anotherLine)
Naamgevingsprotocollen
- Protocollen die beschrijven wat iets is, moeten worden benoemd met behulp van zelfstandige naamwoorden.
- Protocollen die mogelijkheden beschrijven moeten
-able
,-ible
of-ing
als achtervoegsel hebben.
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
Typen en eigenschappen
Typen, variabelen en eigenschappen moeten worden gelezen als zelfstandige naamwoorden.Voorbeeld:
let factory = ...
let list = [1, 2, 3, 4]
kapitalisatie
Typen en protocollen
Type- en protocolnamen moeten beginnen met een hoofdletter.
Voorbeeld:
protocol Collection {}
struct String {}
class UIView {}
struct Int {}
enum Color {}
Al de rest...
Variabelen, constanten, functies en opsommingstekens moeten beginnen met een kleine letter.
Voorbeeld:
let greeting = "Hello"
let height = 42.0
enum Color {
case red
case green
case blue
}
func print(_ string: String) {
...
}
Kameelgeval:
Bij elke naamgeving moet het juiste kameelgeval worden gebruikt. Bovenste kameelhoes voor type / protocolnamen en onderste kameelhoes voor al het andere.
Geval bovenste kameel:
protocol IteratorType { ... }
Onderste kameelgeval:
let inputView = ...
afkortingen
Afkortingen moeten worden vermeden, tenzij ze vaak worden gebruikt (bijvoorbeeld URL, ID). Als een afkorting wordt gebruikt, moeten alle letters hetzelfde hoofdlettergebruik hebben.
Voorbeeld:
let userID: UserID = ...
let urlString: URLString = ...