Antes que nada un saludo a todos, hace días que no venía por aquí. :$
Aprovecho para saludar especialmente a Cadetill, de quien tengo muy gratos recuerdos de otro lugar y época. Cómo los he echado de menos a ti y a el resto de la pandilla de aquellos viejos tiempos. Los relaciono mucho con mi feliz estancia en Cuernavaca del 2004 a pesar de estar a miles de jornadas de mula. Aquellas noches de descubrimiento de Firebird, romance y filosofía eran increíbles.
Bueno, aquí mi aportación:
Function Uno (Const Valor :Boolean) :Integer; Begin Result := (Byte (Valor) * 2) - 1; End;
Esta función convierte un valor Boolean, False o True, en un entero de valor -1 o +1, respectivamente.
¿Utilidad? Podría ser el transferir una bandera que indica ir hacia adelante —True— o hacia atrás —False— en el valor entero (+1 o -1) que habría que sumar a una propiedad para realizar la acción en el sentido indicado.
Internamente False es 0 y True 1. Lo que hace esta función es darle simetría aritmética a esos valores lógicos. De otra forma, si sólo intentáramos un clásico molde de tipo como "Byte (Valor)", con False sumaríamos 0 (no se movería para ningún lado) y sólo con True se movería.
Sucede que a veces una rutina recibe un parámetro Boolean llamado, por ejemplo, "GoForward", para indicar si queremos que avance o retroceda (True o False). Dentro de la función, si ese avance o retroceso implica un incremento o decremento de igual magnitud pero de signo contrario a un contador, propiedad de posición, etc., dicha función puede llamar a Uno para obtener el incremento en sí o el factor por el cual haya que multiplicar el incremento.
Position := Position + Uno (GoForward);
Perdón si fue mucho rollo. (~)
Uno (abrazo);
Al González.