Эвристика программирования 'поднимайте if вверх и for вниз' предполагает, что условную логику (операторы if) следует перемещать вверх, к вызывающему коду, а итеративные циклы (for) следует опускать вниз, к пакетной обработке. Это улучшает ясность и производительность за счет централизации ветвления и использования пакетных операций.
Matklad обсуждал этот принцип, демонстрируя, что подъем условных операторов вверх означает, что вызывающий код обрабатывает такие случаи, как None, в то время как функция принимает простой Walrus. Опускание циклов вниз включает откладывание циклов до после фильтрации, чтобы горячий цикл выполнялся без ветвления и был кандидатом на векторизацию. Два движения сочетаются: имея коллекцию значений Option<Walrus>, вызывающий код отбрасывает None и передает Vec<Walrus> в frobnicate_batch, которая никогда не видит None.
Этот принцип имеет более широкое применение в оптимизации запросов реляционных баз данных и функциональном программировании. В оптимизации запросов баз данных тот же принцип проявляется как 'проекции рано, соединения поздно'. Ранние проекции и выборки уменьшают ширину набора данных и фильтруют рано, в то время как соединения откладываются для выполнения на меньших входных данных. Словарь перевернут: план запроса — это дерево, где данные текут от листьев вверх, поэтому 'ниже по дереву' означает 'раньше в выполнении'.
Источник: Hacker News · Сводку подготовил HeadlinesBriefing