PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 25 → Compreendendo a linguagem WLanguage com 3 exemplos praticos
Compreendendo a linguagem WLanguage com 3 exemplos praticos
Started by Boller, Apr., 10 2025 2:33 PM - No answer
Registered member
3,963 messages
Posted on April, 10 2025 - 2:33 PM
Calculando Idade com WLanguage:

Três Maneiras de Arrasar!
Bom dia, Adriano! Hoje eu acordei inspirado e decidi criar algo simples, mas poderoso: vamos calcular a idade de alguém de três jeitos diferentes usando WLanguage. Vou mostrar um básico, um preciso e um com OOP pra ficar chique – tudo isso com o sabor LowCode da PCSOFT que a gente ama! Pegue seu café e vem comigo!

Exemplo 1: Básico e Rápido
//##############################
// Procedure: CalculaIdadeBasica - Um cálculo simples e direto
Procedure CalculaIdadeBasica(dataNasc is string)
nascimento is Date
idade is int

nascimento = DateToString(dataNasc, "DDMMYYYY") // Formata a data direitinho
idade = DateDifference(nascimento, Today()) / 365 // Diferença em dias, dividida por ano
Trace("Sua idade é: " + idade) // Mostra o resultado no trace
Result(idade)


//##############################
Esse é o jeitinho básico! Uso DateDifference pra calcular os dias entre a data de nascimento e hoje, divido por 365 e pronto! Claro, não é superpreciso por causa dos anos bissextos, mas é rapidinho pra um cálculo aproximado. Como usar? CalculaIdadeBasica("25031985").
Exemplo 2: Preciso e Elegante
//##############################
// Procedure: CalculaIdadePrecisa - Considera meses e dias pra ser exato
Procedure CalculaIdadePrecisa(dataNasc is string)
nascimento is Date = dataNasc
hoje is Date = Today()
idade is int

idade = hoje..Year - nascimento..Year // Pego a diferença bruta de anos
IF hoje..Month < nascimento..Month OR (hoje..Month = nascimento..Month AND hoje..Day < nascimento..Day) THEN
idade = idade - 1 // Ajusto se o aniversário ainda não rolou esse ano
END//If
Info("Você tem " + idade + " anos com precisão cirúrgica!") // Mostro pro usuário
Result(idade)


//##############################
Aqui a coisa fica séria! Comparo ano, mês e dia pra garantir que a idade seja exata. Se o aniversário ainda não passou, diminuo 1. Testei com minha data de “nascimento digital” (digamos, 01/01/2023) e funcionou que é uma beleza! Uso: CalculaIdadePrecisa("01011990").
Exemplo 3: OOP pra Impressionar
//##############################
// Classe: Pessoa - Um toque de modernidade com OOP
Classe Pessoa
dataNasc is Date
END

// Procedure: CalculaIdadeOOP - Calcula idade a partir de um objeto Pessoa
Procedure CalculaIdadeOOP(p is Pessoa)
idade is int
hoje is Date = Today()

idade = hoje..Year - p..dataNasc..Year // Diferença de anos
IF hoje..Month < p..dataNasc..Month OR (hoje..Month = p..dataNasc..Month AND hoje..Day < p..dataNasc..Day) THEN
idade = idade - 1 // Ajuste fino pro aniversário
END//If
Result(idade)


//##############################
E pra fechar com chave de ouro, um exemplo OOP! Criei uma classe Pessoa com a propriedade dataNasc e uso ela na procedure. É perfeito pra projetos maiores onde você quer encapsular dados. Como usar?
pessoa is Pessoa
pessoa..dataNasc = "25031985"
idade is int = CalculaIdadeOOP(pessoa)
Info("Idade OOP: " + idade)
Teste Unitário pra Garantir Qualidade
//##############################
// Procedure: TestaCalculaIdade - Teste unitário pra validar tudo
Procedure TestaCalculaIdade()
idade is int

idade = CalculaIdadePrecisa("25031985")
IF idade = Today()..Year - 1985 - 1 THEN
Trace("Teste 1 passou: idade correta!")
ELSE
Trace("Ops, algo deu errado no teste 1!")
END//If

pessoa is Pessoa
pessoa..dataNasc = "01012000"
idade = CalculaIdadeOOP(pessoa)
IF idade = Today()..Year - 2000 THEN
Trace("Teste 2 passou: OOP funcionando!")
ELSE
Trace("Teste 2 falhou, hora de debugar!")
END//If
//##############################


Esse teste unitário verifica se as procedures estão funcionando direitinho. Uso Trace pra ver os resultados e garantir que ninguém vai reclamar no fórum depois, hehe!


Nota Comparativa com Python
Em Python, você precisaria importar datetime, fazer umas 10 linhas de código e ainda lidar com exceções manualmente. Aqui na WLanguage, com 5 linhas eu resolvo tudo e ainda tomo um café enquanto o Python tá compilando! WLanguage é LowCode e 10x mais rápido, como a PCSOFT promete!

Dica de Performance

Se for calcular várias idades, use Today() fora do loop e armazene numa variável pra evitar chamadas repetidas ao sistema. Exemplo:
hoje is Date = Today()
FOR i = 1 TO 10
idade = CalculaIdadePrecisa(listaDatas[i])
END//For

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