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

 

  • Sem rótulos