Skip to main content

Comandos y funciones

Uso de minúsculas

Utilizar minúsculas al nombrar comandos y funciones del sistema.

Esto optimiza el desarrollo ya que los comandos y funciones provistas por el lenguaje se utilizan tan frecuentemente y no es necesario especificarlos en PascalCase.

// mal
For Each
Where CliCod = &CliCod
Msg( CliNom)
EndFor

// bien
for each
where CliCod = &CliCod

msg( CliNom)
endfor

// mal
&Fecha = YmdToD( 2017, 01, 01)

// bien
&Fecha = ymdtod( 2017, 01, 01)

Uso do case y if

Utilizar do case siempre que se pueda a fín de sustituir if anidados. Dejar un espacio entre cada bloque de case.

// mal
if &DocTipo = DocumentoTipos.Venta
...
else
if &DocTipo = DocumentoTipos.Compra
...
endif
endif

// también mal
do case
case &DocTipo = DocumentoTipos.Venta
...
case &DocTipo = DocumentoTipos.Compra
...

endcase

// bien
do case
case &DocTipo = DocumentoTipos.Venta
...

case &DocTipo = DocumentoTipos.Compra
...

otherwise
...
endcase

// también está bien - Cuando existen multiples case y la acción es de una sola línea.
// Esto facilita leer todas las opciones sin necesidad de scroll
do case
case &Action = Action.Update do 'DoUpdate'
case &Action = Action.Insert do 'DoInsert'
case &Action = Action.Regenerate do 'DoRegenerate'
case &Action = Action.Clean do 'DoClean'
case &Action = Action.Refresh do 'DoRefresh'
case &Action = Action.Reload do 'DoReload'
otherwise do 'UnexpectedAction'
endcase

Uso for each y where

Utilizar clausula where en comandos for each en lugar de usar comandos if, siempre que se trate de atributos de la tabla extendida.

Con esto logramos trasladar la condición al DBMS y hacer que forme parte de la query select evitando trabajar con grandes volumenes de datos en el servidor de aplicación ó eventualmente en el cliente.

// mal
for each Documentos
if DocTipo = DocumentoTipos.Ventas
...
endif
endfor

// bien
for each
where DocTipo = DocumentoTipos.Ventas
...
endfor

Utilizar "when" en comandos for each para simplificar la query enviada al DBMS.

// mal
for each Documentos
where DocTipo = DocumentoTipos.Ventas
where DocFch >= &FchIni or null(&FchIni)
...
endfor

// bien
for each
where DocTipo = DocumentoTipos.Ventas
where DocFch >= &FchIni when not &FchIni.IsEmpty()

...
endfor

Sintaxis

Utilizar la última sintaxis siempre que la versión lo soporte.

// mal
&Name = udp( PNameGet, &Id)

// bien
&Name = PNameGet( &Id )

// mal
call( PNameSet, &Id, &Name)

// bien
PNameSet( &Id, &Name)

// mal
&Num = val( &NumChar)

// bien
&Num = &NumChar.ToNumeric()