В настоящее время я работаю над реализацией функционального стиля программирования игры Tetris.Каждый тик или пользовательский ввод обрабатываются с использованием функций, в которых я передаю состояние игры (сетка с указателем на текущий активный блок), и эта функция возвращает новое состояние.
Если пользователь нажимает влево, но текущий активный блок уже в крайнем левом положении, что мне делать?Я хотел бы сообщить внешнему блоку кода, что он не может создать новое состояние, но какой шаблон кажется лучшим?У меня есть пара стилей, я склоняюсь к тому, чтобы просто выбросить и поймать ошибку, поскольку я чувствую, что она лучше всего читает и выражает намерение.
onLeft() {
// try catch style
try {
this.state = moveLeft(this.state);
} catch (err) {
// oh no!
}
// callback style
moveLeft(
(err) => {
// oh no!
},
(newState) => {
this.state = newState
}
);
// return false for invalid state
this.state = moveLeft(this.state) || this.state;
}