Прямое упрощение вашего кода:
while (
some_very_long_computation &&
another_very_long_computation
) {
...
}
Если вы хотите сохранить переменные a
и b
:
bool a, b;
while (
(a = some_very_long_computation) &&
(b = another_very_long_computation)
) {
...
}
Если вы не хотите чтобы поместить условия в условие while
:
while (true) {
bool a = some_very_long_computation;
bool b = another_very_long_computation;
if (!(a && b)) {
break;
}
...
}
Вы также можете создать вспомогательные лямбды (которые имеют доступ к локальным переменным):
auto fa = [&]() { return some_very_long_computation; };
auto fb = [&]() { return another_very_long_computation; };
while (fa() && fb()) {
...
}
Возможно, этот вопрос должен состоять в том, где начать абстрагировать.
Примером, который Вы заключаете в кавычки, является классический пример недостаточной мысли о том, каковы объекты на самом деле, поскольку они - все в значительной степени то же - и вероятно были бы лучше выражены как единственный "GameObject".
Я также избегаю классификации sub свойствами объектов. Поскольку StaticGameObject и DynamicGameObject могут казаться logica, но вероятно лучше представлены контейнерным размещением - т.е. два списка один для статических объектов и один для динамического, таким образом позволив другой логике определить действия, а не сам объект, являющийся ответственным за управление чем-то за пределами, он - объем.
Иногда более трудно разработать то, что совместно используется группой вещей, которые Вы хотите представить в объекте - но это стоит сделать.
Я полагаю, что критерии могут быть выведены из четкого определения того, какова абстракция.
Вы обращаетесь к абстракции в Объектно-ориентированной парадигме программирования, где у Вас есть в Вашем распоряжении эти три принципа: 'абстракция' - 'инкапсуляция' - 'сокрытие информации или видимость'.
Абстракция является процессом выбора, какие атрибуты объекта относятся к Вашей системе, и который должен быть полностью проигнорирован.
Это означает, предел абстракции не касается так много количество понятий, которые Вы определяете (Плеер, Оружие, Маркеры...), но что Вы принимаете решение вставить те понятия.
Это - в основном медицинская сортировка, откуда Вы рассмотрите только понятия, что полезно для сервисов, которые необходимо определить.
Так польза критерии, чтобы начать писать нормальный код могли бы быть API, как программа затмения предполагает: API сначала.
Действительно, "Хорошие API требуют повторения дизайна", означая список объектов, Вы упоминающий в Вашем вопросе будете усовершенствованы, как необходимый API самостоятельно усовершенствован.
Плюс, API, средние, чтобы иметь четко определенные границы компонента и зависимости (как в 'Ядре - Плеере - по сравнению с UI - RenderableObject -'), означая очень подробный список Вы, упоминание не может быть просмотрено как длинный бесконечный список понятий, но должно быть ясно сгруппировано в различные функциональные периметры (или функциональные компоненты) от применимой архитектуры.
Так как API существуют для удовлетворения потребностей клиентов, Вы сохраните те объекты только потому, что они имеют смысл для клиента. Другие возражают, должен быть во 'внутренних' пакетах и никогда не относиться непосредственно никакими другими частями Вашего приложения.
Имея это в виду, советы @phjr имеют смысл ;)