A heurística de programação 'empurre if para cima e for para baixo' sugere que a lógica condicional (instruções if) deve ser movida para cima, em direção ao chamador, enquanto os loops iterativos (for) devem ser empurrados para baixo, em direção ao processamento em lote. Isso melhora a clareza e o desempenho ao centralizar a ramificação e aproveitar as operações em lote.
Matklad discutiu esse princípio, demonstrando que empurrar os condicionais para cima significa que o chamador lida com casos como None, enquanto a função recebe um Walrus simples. Empurrar os loops para baixo envolve adiar os loops até depois da filtragem, para que o loop quente seja executado sem um ramo e seja candidato à vetorização. Os dois movimentos se compõem: dada uma coleção de valores Option<Walrus>, o chamador descarta os Nones e entrega um Vec<Walrus> para frobnicate_batch, que nunca vê um None.
Este princípio tem aplicações mais amplas em otimizações de consultas de bancos de dados relacionais e programação funcional. Na otimização de consultas de banco de dados, o mesmo princípio aparece como 'projeções cedo, junções tarde'. Projeções e seleções precoces reduzem a largura do conjunto de dados e filtram cedo, enquanto as junções são adiadas para serem executadas em entradas menores. O vocabulário está de cabeça para baixo: um plano de consulta é uma árvore onde os dados fluem das folhas para cima, então 'abaixo da árvore' significa 'mais cedo na execução'.
Fonte: Hacker News · Resumido por HeadlinesBriefing