Это скорее теоретический вопрос, но я чувствую, что должен быть способ сделать это.Чистый Функциональный подход для генерации уникального идентификатора
У меня есть компоненты JS, для которых, когда они созданы, им необходимо назначить уникальный идентификатор элементу html, который не был использован ни в одном другом компоненте. Это довольно тривиальное правило:
let currentId = 0;
function getNextId() {
currentId += 1;
return currentId;
}
function MyComponent() {
this.id = getNextId();
// Code which uses id
}
let c1 = new MyComponent();
// c1.id === 1
let c2 = new MyComponent();
// c2.id === 2
Я задаюсь вопросом, есть ли способ сделать такого рода вещи, используя только чистые функции, как я пытаюсь обернуть мою голову вокруг некоторых более продвинутых чистых функциональных идей. Насколько я могу судить, для этого потребуются Монады или что-то в этом роде, но я не знаю, как это сделать.
Спасибо!
Глобальное состояние моделируется 1) пропусканием состояние в качестве дополнительного аргумента каждые 2) возврат (возможно, обновленное) состояние в качестве дополнительного возвращаемого значения и 3) обеспечение правильной последовательности всех потребителей состояния, чтобы обновленное состояние от одной функции передавалось следующей функции. В Haskell это инкапсулируется монадой «State». – chepner
@chepner Это уже почти ответ. – duplode
Эй, @чепнер! Спасибо за информацию! Не могли бы вы предоставить ответ StackOverflow, возможно, который продемонстрировал бы эту идею на практике, используя приведенный выше пример? Если вы это сделаете, и это сработает, я был бы рад принять ответ! –