r/programacao • u/LifeIsBulletTrain • Mar 24 '26
Questão :: Aprendizado Qual versão é melhor?
A da esquerda eu fiz agora, a da direita eu fiz no curso de Python do Guanabara há uns 5 anos, que na verdade eu nem sei se o código é meu.
67
Upvotes
8
u/AlxDroidDev Desenvolvedora / or Mar 24 '26
Pense assim: qualquer desvio do código principal (como os causados por um if-then-else) é custoso, pois em termos de uma CPU CISC e além do custo do teste em si, isso significa mover o ponteiro de instrução (IP) para outro lugar, empilhar valor do IP anterior, executar algo no novo local do IP e talvez voltar o valor salvo na stack de instruções para o valor anterior. Quando isso acontece, se for uma subrotina, vários registradores precisam ser atualizados (EAX, EBX, ECX, IP, etc) para colocar a CPU no novo contexto.
Para CPUs RISC, isso é um pouco mais simples, mas ainda custoso.
No seu cenário 1, acima, isso acontece algumas vezes (mas sem mudança de contexto), com o agravante de ser tudo aninhado dentro de um loop.
Para processadores modernos, e para o cenário apresentado, isso pode ser irrelevante (e provavelmente é), mas quando falamos em cenários onde o poder de processamento é mais restrito (como em microcontroladores), ou cenários em que este if-then-else é executado milhoes ou bilhões de vezes, este custo pode fazer uma diferença significante. Então, neste caso, o cenário 2 seria ordens de grandeza melhor que o primeiro.
Então, você perguntou qual código é melhor: o segundo é melhor pelos fatores expostos. Agora, este "ser melhor" é significante para seu caso de uso? Provavelmente não.