2014-06-16 6 views
49

In Swift scheint es, dass globale Konstanten CamelCase sein sollten.Swift: globale Konstante Namenskonvention?

Zum Beispiel:

let maximumNumberOfLoginAttempts = 10 

Ist das richtig?

Ich bin an alle Caps, z. B. MAXIMUM_NUMBER_OF_LOGIN_ATTEMPTS, von C gewöhnt, aber ich möchte Swift Konventionen einhalten.

+1

Ich bin auch darauf neugierig. Wenn es keinen Swift-Namensführer von Apple gibt, müssen sie ihn bald freigeben. – dasblinkenlight

+7

Der Grund für die C-Konvention, Makros (nicht Konstanten) in Großbuchstaben zu benennen, war, dass Makros ein besonders gefährliches Konstrukt sind und es sehr nützlich war, Code für Makros schnell zu scannen, da Makroexpansion in unvorhergesehenen Kontexten oft die Ursache war Fehler. Ich bin nicht sicher, ob es einen Wert für eine Benennungskonvention gibt, zwischen Konstanten und Variablen in einer statisch typisierten Sprache mit integrierter Unterstützung für Unveränderlichkeit zu unterscheiden. – Ferruccio

+0

@Ferruccio, stammt die Konvention von C, aber einige spätere Sprache (Python, Java) nahm nur die gleiche Konvention, vielleicht um Übergang von C. –

Antwort

3

Apple zeigt uns Konstanten mit CamelCase.

Ich benutze die besser lesbare Variante. So für Ihr Beispiel:

let maximumNumberOfLoginAttempts = 10 
let MAXIMUM_NUMBER_OF_LOGIN_ATTEMPTS = 10 

‚MAXIMUM_NUMBER_OF_LOGIN_ATTEMPTS‘ ist bether lesbar für mich und es zeigt sofort, dass es eine Konstante var ist.

+11

Besser lesbar: Nein. Zeigt an, dass es eine Konstante ist: Ja. Aber das ist nicht die Antwort von Apples Best Practice für Swift. – zaph

+7

Apples beste Praxis ist CamelCase. Sonst würden sie "caps-style" im Buch verwenden (oder ich habe es noch nicht gesehen).Aber in solchen nicht-kritischen Fragen gehe ich mit meinen Instinkten - auch muss ich mich nicht um Kontextwechselfehler kümmern, wie Java <> swift. Aber das ist nur mein Gedanke dazu. Manche Leute denken vielleicht anders. – Javatar

+1

Ich würde eher mit Apple-Konvention gehen, oder mit der Konvention der Arbeitsgruppe on-the-job oder Beitrag zu Open Source. In letzterem würde ich wahrscheinlich versuchen, auf die Apple Convention Einfluss zu nehmen, da sie die Standards setzen, obwohl ich den Vorschlag von @Javatar (netter Griff, btw) verstehen kann. – rholmes

5

Apple befürwortet die CamelCase. Das heißt, viele verwenden _camelCase, nur um es zu unterscheiden, vor allem, wenn Sie wahrscheinlich den gleichen Namen bei einem niedrigeren Umfang haben.

19

Ich diskutiere mit camel case mit einem führenden Kapital für Konstanten auf Klassenebene. Zum Beispiel:

static let MaximumNumberOfLoginAttempts = 10 

Es ist immer noch Kamel-Fall (wie Apple empfehlen erscheint), aber die aktivierte Hauptfigur macht deutlich, dass der Wert unveränderlich ist.

+0

Ich mag diese Antwort sehr, es erlaubt Ihnen immer noch, CamelCase streng zu folgen, während Sie zeigen, dass es eine Konstante ist. – Austin

+1

Ich habe gerade neulich festgestellt, dass dieser Ansatz auch mit Apples Benennungskonvention für Enum-Werte konsistent ist (die auch camel case mit führenden caps verwenden). –

+0

FYI Dies nennt man [Pascal Case] ​​(http://c2.com/cgi/wiki?PascalCase) –

4

Ich sehe häufig Konstanten mit einem k erklärt, etwa so:

static let kLoginAttemptsMax = value 

Dies ergibt sich auch Kamel Gehäuse mit einem "T".

+2

Zumindest im Obj-C Apple Code sehe ich die "k" Konvention sehr. – wcochran

+3

Dies ist eine alte Konvention, die Apple in Swift nicht mehr verwendet. – jowie

+0

Das "k" wird verwendet, um anzuzeigen, dass es ein Schlüssel zu einer Art Wörterbuch ist. Wie die Namen von JSON-Entitäten. –

34

Swift 3 API-Richtlinien sagen, dass "Namen der Typen und Protokolle UpperCamelCase sind. Alles andere ist niedrigerCamelCase."

https://swift.org/documentation/api-design-guidelines/

Im Idealfall werden Sie Ihre globalen Konstanten innerhalb einer Struktur von einer Art angeordnet sein, die Uppercamelcase sein würde, und alle Eigenschaften in dieser Struktur würde

struct LoginConstants { 
    static let maxAttempts = 10 
} 

Und wie so, zugegriffen lowerCamelCase werden

if attempts > LoginConstants.maxAttempts { ...} 
+2

der Ansatz mit den Strukturen ist episch –

Verwandte Themen