@MaM

Есть ли функции с управляемым контекстом?

Написал код bool some_function(int key,bool), по сути key bool хранит лишь состояния 1\0 и не несет смысла, и грубо говоря мешает расширять код. Тогда я подумал, а есть ли такая фишка, что бы, каждый раз, для разных аргументов вызовов, создавался свой контекст, который бы сохранялся до следующего вызова. Далее подумал еще и пришел к мысле, что было бы неплохо оптимизировать функции вычисление которых возможно на этапе выполнения, тоесть функция реализуют концепцию мемоизации и проверяет, изменились ли данные, если нет то возвращает прошлое значение. Потом еще подумал, не плохо бы иметь данные с индикатором изменения(то-есть, производим, изменяем его) и если он изменился, функция считается, иначе возврат предыдущего. Далее пришел к мысли, что можно пойти еще дальше, и для одинаковых аргументов(экземпляров объектов, функций), создавать и закреплять за ними контекст, или к примеру другие сложные правила, хранения. Вопрос вот в чем, есть ли языки с этим?
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
lexxpavlov
@lexxpavlov
Программист, преподаватель
Используй словарь Dictionary<KeyCode, bool> вместо нескольких переменных. Это если флаги нужны ещё где-то. А если эти флаги нужны только в Update(), то они и не нужны:
int GetKey(KeyCode key) // 1 or 0
{
    return Input.GetKeyDown(key) ? 1 : 0;
}
void Update()
{
    int hor = GetKey(KeyCode.A) - GetKey(KeyCode.D);
    int ver = GetKey(KeyCode.W) - GetKey(KeyCode.S);
    transform.position += new Vector3(hor, ver, 0) * CameraSpeed;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tomnolane
@tomnolane
профессиональный разработчик
*тут взрыв мозга*
можно короче, и по сути - без размышлений?
п.с. лучше покажите код которые сейчас, и что хотите в итоге - хотя бы словами в самом коде, если хотите чтобы вам помогли

upd

чем код "проще" && меньше && без заморочек, тем он = лучше.
Как вы описали в комментарии - при нажатии на какую-нибудь клавишу с клавиатуры - меняется значение key очень удобно и прагматичнее. В любом случае, вам нужно задавать || указывать условия для key ... и способов много, как можно реализовать. Хоть используя рандом.
Не совсем понятно по поводу "смысловой нагрузки" ключа... в коде должны быть только те вещи, которые используются, либо "понапихать" всякого, чтобы для ревёрсиров было тяжелее его понять. Key (если нужен) можно задавать хоть через switch или по timer'у или через if и по сути, это не так важно, нежели действительно его потребность.

я бы сделал (для себя) примерно так:
if (Input.GetKeyDown (KeyCode)) {
KeyFlag=true;
}
else if (Input.GetKeyUp (KeyCode)) {
KeyFlag=false;
//или через switch

if(KeyFlag==false) {
 // тут код, когда <b>key</b> = false
}
else {
  // тут код, когда <b>key</b> = true
}

просто, не заморочено и легко понять/отлаживать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы