Olá,
Estava realizando alguns testes (nada para produção ou cliente, apenas estudo) tentando realizar a criação de um #xcommand para simular um FOREACH em AdvPL. Entretanto, não é possível realizar a criação de variáveis locais após comandos executáveis (isso já vem do Clipper acredito: Clipper Error Messages) logo, não é possível abstrair a necessidade de informar o INDEX.
Lembrando que já existe funcionalidade semelhante no projeto xHarbour: FOR EACH xHarbour
Se alguém tiver alguma ideia para contribuir neste teste, agradeço!
Exemplo:
#include 'totvs.ch'
// Comando para criar o for e atribuir valor na variavel passada
#xcommand FOREACH <varname1> IN <varname2> INDEX <varname3> =>;
For <varname3> := 1 To GetLen(<varname2>);;
<varname1> := <varname2>\[<varname3>\]
// função Len é blacklisted na geração do PPO. Utilizando essa função consigo
// contornar por enquanto
Static Function GetLen(aVar)
Return Len(aVar)
// função de teste
User Function TstForEach()
Local nIndex as numeric
Local nItem as numeric
Local aTeste as array
aTeste := {1, 2, 3}
FOREACH nItem IN aTeste INDEX nIndex
Conout(cValToChar(nItem))
Next
Return
Que bacana! Eu já tentei fazer o JS virar ADVPL via diretivas, vou tentar dar uma olhada.
— Daniel Mendes 18 de Jan de 2021