Seguramente al igual que yo, como usuario de Harbour, a veces sentirás que te pierdes las novedades que día a día se incorporan. Más allá de la sacudida interna que significó la reorganización de las librerias, también aparecieron muchas cosas interesantes, como es el caso de los extended codeblocks.
¿Y eso que es?
Es una funcionalidad que ya existía en xHarbour, al menos muy similar, aunque con una sintaxis levemente diferente. Lo que permite es poder declarar un codeblock que se extienda más de una linea, con variables locales, y con la posibilidad de usar todo el juego de instrucciones. Seguramente alguna vez te ha pasado que el código de un codeblock era tan complejo que era ilegible, y terminabas escribiendo una función que lo reemplazaba. Por ejemplo en un programa en el que trabajo en este momento, con Harbour y FiveWin, si quiero añadirle una hotkey a un GET para que llame a una función de búsqueda, escribía algo así:oBancoGet:bKeyDown:= {|nKey, uVal| If( nKey == VK_F2,If( !Empty(uVal:= Buscar(cDbfBancos, 'Codigo')), (oRB:Banco:= uVal,oDlg:Update()),) ,) }
En una línea tienes que montar todo: Verificar que la tecla es la que quieres, llamar a la función de búsqueda, y si esa función retorna un valor, asignarlo a la variable y actualizar el control.
Con extended codeblocks...
La cosa se ve mucho más clara:
oHC['Banco']:bKeyDown:= {|nKey|
LOCAL uVal
If nKey == VK_F2
If !Empty(uVal:= Buscar(cDbfBancos, 'Codigo'))
oRB:Banco:= uVal
oDlg:Update()
EndIf
EndIf
Return NIL
}
mucho más claro, verdad? Además se pueden declarar variables locales, usar IFs o cualquier otra instrucción. Es obligatorio que incluya una instrucción RETURN.
Hasta la próxima, espero que no pase tanto tiempo.
2 comentarios:
Carlos,
Me gustó el artículo. Creo que te referias a la version 3.0.
No entiendo porque es obligatorio el Return. El llegar a } deberia bastar para retornar el flujo.
Saludos
Hola Carlos,
Me alegro de que vuelvas a escribir. Te voy a estar siguiendo ;-)
Saludos
Publicar un comentario