Blocos de código podem ser aplicados para diversas situações, desde fórmulas, até processamentos complexos.
Na maioria dos casos o uso de bloco de código não é recomendado, pois dificulta o entendimento da tarefa que se deseja efetuar.
A exceção aplicada, é na utilização do bloco de código como uma função de callback, ou seja, um grupo de comandos que serão chamados dentro de outra função.
A biblioteca de funções e componentes gráficos do ADVPL apresenta corretamente onde os blocos de códigos são eficazes, como por exemplo nas funções:
- AEval();
- DbEval();
- Sort();
- AScan();
- Propriedades de callback de componentes gráficos:
1. bClicked
2. bAction
Essa técnica de programação é conhecida também pelo nome de “Inversão de dependência”, ou seja, a função ou método que recebe o bloco de código prepara ou controla a execução no momento certo do bloco de código, deixando a responsabilidade do que fazer para o bloco de código.
Exemplo:
// CodeBlockExamples.prw
#INCLUDE "TOTVS.CH"
Function CodeBlockExamples()
Local aUnsortedArray := { 1, 5, 3, 7, 8, 9, 2, 4, 6, 10 }
Local aTags := { "TAGA", "TAGB", "TAGC" }
Local aDescSortedArray := {}
Local cOut := ""
Local nCount := 0
aDescSortedArray := ASort(aUnsortedArray, , , {|x,y| x > y })
For nCount := 1 To Len(aDescSortedArray)
cOut += CValToChar(aDescSortedArray[nCount]) + " "
Next
ConOut("Array em ordem decrescente: " + cOut)
nPos := AScan(aTags, {|x| x == "TAGA"})
If nPos > 0
ConOut("Found TAGA")
EndIf
Return