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 .
Voorbeeld: muterende functies:
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.
Voorbeeld:
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 = ...


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow