2016-04-05 8 views
0

Betrachten Sie die folgenden Konstanten ich in meiner app haben:Wartung: Zuordnung von Zahlen Konstanten

const Actions = { 
    SONGS_CHANGED: 0, 
    PREVIEW_TAG_CHANGES: 1, 
    END_PREVIEW: 2, 
    SAVE_TAGS: 3, 

    PATTERNS_UPDATED: 4, 
    PATTERN_MAPPED: 5, 
    PATTERN_UNMAPPED: 6, 

    CHANGE_NUMBER_OF_PARENT_DIRECTORIES: 7, 
} 

Ich versuche, diese zusammen gruppiert zu halten. Aber das heißt, wenn ich einen zur ersten Gruppe hinzufüge, muss ich die Zahlen für alles darunter aktualisieren. Nun, natürlich habe ich nicht haben zu, ich könnte immer nur die nächsthöhere Zahl zuweisen (z. B. gebe die nächste Konstante einen Wert von 8 unabhängig davon, welche "Gruppe" ich es in). Aber wenn die Anzahl der Konstanten zunimmt, wird es schwieriger, die höchste Zahl zu identifizieren, um zu wissen, was der nächste sein sollte.

In Python, mit etwas wie range(), um nur Zahlen für die Konstanten zu generieren, entfernt dieses Problem vollständig. Was ist ein guter JavaScript-Ansatz?

+0

'Aber wie die Menge der Konstanten steigt 'was bedeutet das? – gurvinder372

+0

@ gurvinder372 Mit der Zeit, wenn Sie der Anwendung weitere Konstanten hinzufügen, wenn sich die Anforderungen ändern. OP möchte verwandte Konstanten gruppiert zusammenhalten, aber ohne den Aufwand, die Nummer –

+0

neu zu nummerieren oder zu merken/zu finden. Müssen sie Zahlen sein? – nils

Antwort

3

Wenn Sie wirklich wollen, zu nummerieren sie nur in der Reihenfolge definiert, können Sie eine Inkrementierung Variable verwenden, dies zu tun:

var x = 0; 
const Actions = { 
    SONGS_CHANGED: x++, 
    PREVIEW_TAG_CHANGES: x++, 
    END_PREVIEW: x++, 
    SAVE_TAGS: x++, 

    PATTERNS_UPDATED: x++, 
    PATTERN_MAPPED: x++, 
    PATTERN_UNMAPPED: x++, 

    CHANGE_NUMBER_OF_PARENT_DIRECTORIES: x++, 
} 
console.log(Actions.END_PREVIEW); //2 
console.log(Actions.SAVE_TAGS); //3 

Beachten Sie, dass Konstanten in dieser Art und Weise zu ändern, nur wenn der einzige Ort verwendet werden soll Diese Zahlen werden verwendet, indem auf die Konstanten Bezug genommen wird - wenn Sie sie woanders speichern, dann wird das Ändern bestehender gespeicherter Daten durch sie geändert. Die Wahl hängt davon ab, ob sie zur Laufzeit konstant sind oder dauerhaft konstant sein sollen.

2

Wenn wissen Sie (oder schätzt) a priori, wie groß jede Gruppe jemals sein wird, dann können Sie verschiedene Teilbereiche von Zahlen wie folgt verwenden:

const Actions = { 
    SONGS_CHANGED: 0, 
    PREVIEW_TAG_CHANGES: 1, 
    END_PREVIEW: 2, 
    SAVE_TAGS: 3, 

    PATTERNS_UPDATED: 10, 
    PATTERN_MAPPED: 11, 
    PATTERN_UNMAPPED: 12, 

    CHANGE_NUMBER_OF_PARENT_DIRECTORIES: 50, 
} 

Der Vorteil gegenüber James Thorpe-Lösung ist, dass es nach hinten kompatibel, dh Sie ändern nie zuvor definierte Werte.

+0

Ja, ein weiterer guter Ansatz. Mein Weg sollte nur wirklich verwendet werden, wenn die Konstanten der einzige Ort sind, an dem diese Zahlen verwendet werden - wenn sie an anderer Stelle nur als Zahlen gespeichert wurden, kommt sie zurück, um dich zu beißen. In dieser Hinsicht eine Notiz hinzugefügt ... –

+0

Dies ist eine großartige alternative Lösung, die in der Tat der Weg zu gehen wäre, wenn ich über die Werte besorgt wäre, die sich nie ändern. – maxedison

0

einen völlig anderen Ansatz, der möglicherweise nicht sein kann, je nachdem, welche Werte Ihre Konstanten nehmen können, aber wenn sie Strings sein könnte, zum Beispiel, könnten Sie eine GUID basierten Ansatz verwenden:

const Actions = { 
    SONGS_CHANGED:      '4e6c355f-d684-4544-8320-529f20c89ce7', 
    PREVIEW_TAG_CHANGES:     '39a34b2b-0467-46f9-9d21-f407f89ae3c7', 
    END_PREVIEW:       '350e1d61-e6f9-4cc5-9364-bbdc14fd7063', 
    SAVE_TAGS:       '32e85a98-e13c-480c-9449-0a5bec7ec13c', 

    PATTERNS_UPDATED:     '16536175-e421-40d9-9d5d-962bcd0f0771', 
    PATTERN_MAPPED:      '0fd2bbd8-91f4-413b-8010-736bcacd1d88', 
    PATTERN_UNMAPPED:     'b946d566-d951-4695-a0ce-56b0bf987eb6', 

    CHANGE_NUMBER_OF_PARENT_DIRECTORIES: '5b0736f5-e5e9-48f3-a9a1-bed8d0882beb', 
} 

Sie Sie können dann überall neue Konstanten hinzufügen, ohne sich darum sorgen zu müssen, vorhandene Werte zu ändern oder ungefähr zu wissen, wie viele Sie in Zukunft benötigen. Es gibt viele Möglichkeiten zum Generieren von GUIDs, z. B. this online tool.