2016-04-05 1 views
0

Рассмотрим следующие константы у меня есть в моем приложении:техническое обслуживание: Присвоение номеров для постоянных

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, 
} 

Я пытаюсь держать эти сгруппированы вместе. Но это означает, что если я добавлю его в первую группу, то мне нужно обновить числа для всех ниже. Ну, очевидно, у меня нет , я всегда мог бы просто назначить ему следующее большее число (например, дать следующей константе значение 8, независимо от того, в какую «группу» я его ввел). Но по мере увеличения количества констант будет сложнее определить наибольшее число, чтобы знать, что должно быть следующим.

В python, используя что-то вроде range(), чтобы просто сгенерировать числа для констант, полностью удаляет эту проблему. Какой хороший подход к JavaScript?

+0

'Но поскольку количество констант увеличивается, что это значит? – gurvinder372

+0

@ gurvinder372 Со временем, когда вы добавляете больше констант в приложение при изменении требований. OP хотел бы сохранить связанные константы, сгруппированные вместе, но без накладных расходов либо перенумеровать, либо запомнить/найти текущий самый высокий номер –

+0

Нужно ли им быть цифрами? – nils

ответ

3

Если вы действительно хотите просто пронумеровать их в порядке, определенном, вы можете использовать увеличивающиеся переменную сделать так:

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 

Обратите внимание, что изменение констант таким образом, должны использоваться только тогда, когда единственное место эти числа используются путем ссылки на константы - если вы храните их в другом месте и т. д., то их изменение нарушит существующие хранимые данные. Выбор сводится к тому, являются ли они постоянными во время выполнения или постоянно постоянны.

2

Если вы знаете (или может оценить) априори, насколько велика каждая группа никогда не будет, то вы можете использовать различные поддиапазоны чисел, как это:

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, 
} 

Преимущество над раствором Джеймса Торпа в том, что это назад совместим, т.е. вы не изменяете ранее определенные значения.

+0

Да, еще один хороший подход. Мой путь должен использоваться только в том случае, если константы являются единственным местом, в котором используются эти числа, - если они были сохранены в другом месте как просто цифры, он вернется, чтобы укусить вас. Добавлено примечание в этом отношении ... –

+0

Это отличное альтернативное решение, которое действительно было бы возможным, если бы меня беспокоили ценности, которые никогда не меняются. – maxedison

0

Совершенно иной подход, который может или не может быть подходящим в зависимости от того, каких значений ваших констант могут принять, но если они могут быть строками, например, вы можете использовать подход, основанный GUID:

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', 
} 

Вы могут затем добавлять новые константы в любом месте, не беспокоясь об изменении существующих значений, или вам нужно знать примерно то, сколько вам может понадобиться в будущем. Существует множество способов генерации идентификаторов GUID, таких как this online tool.

 Смежные вопросы

  • Нет связанных вопросов^_^