PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → Como funciona os INTERNAL PROCEDURES ou Procedimentos internos?
Como funciona os INTERNAL PROCEDURES ou Procedimentos internos?
Iniciado por Boller, jul., 10 2025 9:20 AM - 1 resposta
Membro registado
4.618 mensagems
Publicado em julho, 10 2025 - 9:20 AM
📌 Otimização de Procedimentos Internos no WLanguage (WX): Um Guia Completo

Publicado por Adriano Boller – Especialista WX
📆 Atualizado em julho de 2025



✳️ Introdução

Você sabia que a ordem dos procedimentos internos (internal procedures) pode impactar diretamente na performance de compilação do seu projeto no WinDev, WebDev e WinDev Mobile?

Pois é, essa é uma daquelas “pegadinhas” pouco documentadas oficialmente, mas que pode te ajudar a ganhar tempo de compilação, clareza de estrutura e evitar recompilações silenciosas no fundo do motor do WX.

Graças à publicação de Loïc HAMEL no blog oficial da PC SOFT, essa otimização agora está ao alcance de todos os desenvolvedores WX que buscam excelência e performance.



🔍 O Que São Procedimentos Internos?

Procedimentos internos são funções declaradas dentro de outros procedimentos ou eventos (como o clique de um botão, o load de uma janela ou a execução de um processo). Eles são muito úteis para organizar melhor a lógica, manter o escopo fechado e evitar a poluição global de métodos.



⚠️ O Problema

Por padrão, o compilador da PC SOFT faz uma única passagem sequencial nos códigos. Ou seja, se um procedimento interno for chamado antes de sua definição, o compilador:
1. Ignora temporariamente essa chamada.
2. Continua analisando o restante do código.
3. Ao final, detecta que havia chamadas pendentes.
4. Então recompila todo o trecho para “encaixar” a chamada com sua definição.

📉 Impacto disso:
• Compilação mais lenta.
• Possível perda de desempenho.
• Análise menos precisa em projetos grandes.



✅ A Solução: Ordem Invertida

📌 REGRA DE OURO:

Sempre declare os procedimentos internos na ordem inversa de uso no início do seu código.

Assim o compilador já conhece as definições quando as chamadas acontecem.



📘 Exemplo Didático

❌ Código com má prática (chamada antes da definição):

PROCEDURE MyMainProcess()

// Calling an internal procedure BEFORE its declaration
DisplayMessage()

// Declaration comes AFTER
INTERNAL PROCEDURE DisplayMessage()
Info("Hello, internal procedure!")

➡️ O compilador fará duas passagens aqui: uma para “ver o que é isso?” e outra depois para encaixar.



✅ Código otimizado (declaração antes da chamada):

PROCEDURE MyMainProcess()

// Declare internal procedures FIRST (reverse order of use)
INTERNAL PROCEDURE DisplayMessage()
Info("Hello, internal procedure!")

// Then, call them
DisplayMessage()

➡️ Agora, o compilador já sabe o que é DisplayMessage() e não precisa repetir o trabalho.



🧠 Exemplo Realista (CRUD em Tela)

PROCEDURE BTN_Save_Click()

// Declarações na ordem inversa
INTERNAL PROCEDURE SaveRecord()
HAdd(Customer)
Info("Record saved")

INTERNAL PROCEDURE ValidateFields()
IF Customer.Name = "" THEN
Error("Name is required")
RETURN False
END
RETURN True

// Uso em ordem natural
IF ValidateFields() THEN
SaveRecord()

🔍 Observe: As declarações SaveRecord e ValidateFields aparecem antes das chamadas. Isso é o ideal.



🧪 Benchmark de Compilação (Hipotético)

Cenário Tempo de Compilação
Ordem incorreta (2 passagens) 3.2 segundos
Ordem otimizada (1 passagem) 1.6 segundos

Valores aproximados para fins didáticos.



📎 Outras Boas Práticas
• 🔒 Escopo fechado: use internal procedures para encapsular lógicas locais, evitando vazamento de lógica para fora do evento.
• 🧩 Modularização com clareza: deixe as internal procedures no topo do evento, comentadas e agrupadas.
• 📝 Comente sempre: indique que são internos com // Internal procedure para facilitar leitura.



🤖 Dica Avançada: Usar Internal Procedures com Closure

Sim, o WX permite usar procedimentos internos como funções de callback:

PROCEDURE LoopWithCallback()

PROCEDURE OnItemFound(item is string)
Info("Found: " + item)

FOR EACH strItem OF ["A", "B", "C"]
IF strItem = "B" THEN OnItemFound(strItem)




📌 Conclusão

❗ Se você usa internal procedures, invista alguns segundos a mais para colocá-las no início do seu processamento, na ordem inversa de uso.

O ganho em performance e clareza compensa no médio e longo prazo — especialmente em projetos grandes ou em equipe.



🔗 Fontes e Referências
• 📖 Blog Oficial PC SOFT:
https://blogs.pcsoft.fr/fr/optimiser-compilation-traitements-lorsque-utilisez-procedure-internes/281474976711132/read.awp
• 🤝 Agradecimento especial: Loïc HAMEL



📤 Compartilhe com sua equipe

Se você trabalha com #Windev, #Webdev ou #WinDevMobile, compartilhe este artigo com sua equipe e garanta que todos estejam otimizando seus tratamentos com internal procedures da melhor forma possível!

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
4.618 mensagems
Publicado em julho, 10 2025 - 9:28 AM
INTERNAL PROCEDURE COMO CONSTRUIR E USAR

JEITO ERRADO DE FAZER




JEITO CERTO DE FAZER




OUTRO EXEMPLO CERTO DE FAZER




--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/