|
GRUPOS DE DISCUSSÃO PROFISSIONAL WINDEV, WEBDEV 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 - Sem 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/ |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|