viernes, noviembre 27, 2009

Harbour VS xHarbour, Las diferencias verdaderas (Parte 12)

Uso del operador [] para elementos en cadenas de caracteres (strings).

xHarbour soporta el uso del operador [] para acceder a cada elemento dentro de una cadena de caracteres. Harbour no lo hace por default, pero tiene un API de POO suficientemente robusto para permitir la introducción de dicha extensión sin tocar el código central, aún a nivel PRG. Esto se implementón en Harbour en la librería XHB.LIB.

Este código puede ser compilado y ejecutado por ambos compiladores:
      #ifndef __XHARBOUR__
#include "xhb.ch" // add xHarbour emulation to Harbour
#endif
proc main()
local s := "ABCDEFG"
? s, "=>", s[2], s[4], s[6]
s[2] := lower( s[2] )
s[4] := lower( s[4] )
s[6] := lower( s[6] )
?? " =>", s
return
¡Advertencia!: Existe una diferencia en la implementación anterior, introducida intencionalmente en Harbour. xHarbour nunca genera errores para índices incorrectos en el operador [] cuando es usado en cadenas de caracteres, si el índice es incorrecto, simplemente devuelve "", por ejemplo agregando esto al código anterior:
      ? ">" + s[0] + "<", ">" + s[1000] + "<"
Si el operador [ ] es usado por otro tipo de elementos se genera un RTE. Harbour genera RTE en todos los casos. Si alguien necesita compatibilidad estricta XHB, entonces deberá usar código para sobrecargar el operador[] para cadenas de caracteres en la XHB.LIB para sus propias preferencias, removiendo el RTE.

Continuará...

No hay comentarios.: