Нелегко ответить на ваш вопрос. Конечно, вы можете dry набрать свой код.
Обратите внимание, что вы можете упростить свой вызов как:
abs(target - origin) < range
Это говорит вам, если в обоих направлениях Ваша цель находится в диапазоне origin ± range
. Теперь, когда вы это знаете, вам нужно принять меры, если ваша цель находится за пределами диапазона. Это можно снова упростить: вам просто нужно проверить, больше ли target
, чем origin
или наоборот.
Наконец, вы должны либо использовать массивы для цели и источника, либо определить функцию, которую вы можете вызов. Очевидно, диапазон каждый раз одинаков.
Вы можете использовать функцию:
f(target, origin, range) {
if (abs(target - origin) > range) {
target = (target - origin) < 0 ? target-range : target+range
}
}
Теперь похоже, что ваш код стал длиннее, но его также легче поддерживать: уменьшите риск написания >
вместо <
, измените функцию один раз, чтобы изменить все проверки и т. д.