Archivo de la etiqueta: Harbour

Exprimiendo el FOR EACH de Harbour

La cláusula FOR EACH que Harbour incorporó al lenguaje CA-Clipper fue una gran mejora, pero hay mucha gente que sólo lo utiliza de su forma más básica:

FOR EACH value IN aValues
  ? value
NEXT

Sin embargo ofrece multitud de posibilidades. Vamos a enumerar unas cuantas:

  • Iterar sobre más de una variable:
    FOR EACH a, b, c IN aVal, cVal, hVal
      ? a, b, c
    NEXT
  • Establecer orden descendente:
    FOR EACH a IN aVal DESCEND
      ? a
    NEXT
  • Asignar caracteres de una cadena de forma directa: (atención a la @)
    s := "abcdefghijk"
    FOR EACH c IN @s
      IF c $ "aei"
        c := Upper( c )
      ENDIF
    NEXT
    ? s // AbcdEfghIjk
  • Control por POO sobre las variables de iterador:
    • :__enumIndex() retorna el actual ordinal en la iteración. El equivalente a nFor
    • :__enumIsFirst() retorna si es el primer elemento en la iteración
    • :__enumIsLast() retorna si es el último elemento en la iteración
    • :__enumBase() retorna la variable base que está siendo procesada. Útil cuando se procesan más de una variable.
    • :__enumValue() retorna el valor de la variable que está siendo procesada. Útil cuando se procesan más de una variable.
      FOR EACH a IN aVal
        ? a:__enumIndex()
      NEX

Harbour incluso permite modificar como se debe de recorrer la iteración utilizando los métodos :__enumStart(), :__enumSkip() y :__EnumStop(). Tenéis un ejemplo de uso en el fichero \harbour\tests\foreach2.prg.

Espero que os haya sido de utilidad.

Un saludo

Xailer para Harbour (IV)

Hace tan sólo cuatro días os comentaba que aún quedaba por pasar a Harbour el debugger integrado de Xailer. Pues bien, ya está también. En realidad, estaba terminado hace ya dos días, pero hemos dedicado este tiempo a depurarlo. Je, je, depurar el debugger, ¡qué bien suena eso!

Bueno, el caso es que ya está listo. Y con una particularidad extra… se puede utilizar el nuevo IDE, compilado con Harbour, para depurar un programa que esté compilado con xHarbour, y viceversa. Vamos, que ambos IDEs (el que está compilado con Harbour y el que está compilado con xHarbour) son intercambiables 😉

Una vez terminado esto también, sólo queda depurar los bugs que puedan salir todavía. En todo este tiempo que llevamos utilizándolo nosotros mismos, hemos podido corregir todos los problemas que nos han aparecido, que a decir verdad, tampoco han sido muchos. Visto el resultado, creo que podremos publicar la nueva versión muy muy pronto.

Y por cierto, para aquellos que se pueden encontrar con el problema de que estén utilizando alguna función o clase de xHarbour que no existe en Harbour, hemos preparado una pequeña librería para solucionarlo. De momento contiene las clases de manejo de XML, funciones de cifrado (hb_encrypt y hb_decrypt) y alguna función más. Pero el objetivo es meter ahí cualquier cosa que podamos necesitar, para que el paso de xHarbour a Harbour sea lo más sencillo posible.

Xailer para Harbour (III)

Hace ya un mes que publicamos la última noticia sobre Xailer para Harbour, y ya iba siendo hora de manteneros informados. Es culpa nuestra no haberos informado más a menudo, lo siento. Pero como podeis ver, hemos estado liados con la nueva web además del desarrollo de Xailer, y eso nos ha demorado un poco.

Pero bueno, ya podemos decir que Xailer para Harbour está al 99%. Ahora mismo está todo terminado, excepto el debugger integrado. Y cuando digo todo, es que tenemos ya funcionando incluso el IDE compilado con Harbour. Por supuesto, todos los ejemplos de ‘samples’ funcionan. Y también lo hemos estado probando con nuestros propios proyectos, y todo parece funcionar correctamente.

Es más, os puedo asegurar que es más rápido. La primera impresión al ejecutar cualquier programa es que todo parece funcionar más fluido y ágil, tanto que a veces incluso sorprende. Esto es gracias al mayor rendimiento general de Harbour. Pero también nosotros hemos puesto nuestro granito de arena optimizando nuestra ampliación del motor de objetos. En las pruebas que hemos hecho, con cronómetro, usando esta optimización es alrededor de un 50% más rápido aún. Bueno, esto es sólo en el acceso a propiedades y eventos, no todo el código que ejecute el programa, pero aún así, es significativo.

Respecto al debugger integrado, esperamos tenerlo listo en unos pocos días, y gracias a la cantidad de pruebas que estamos haciendo, esperamos que no salgan muchos bugs. Si todo va bien, muy pronto podremos publicar la nueva versión de Xailer, con soporte tanto de xHarbour como de Harbour.

Xailer para Harbour (II)

Ya está listo también el soporte para crear DLLs con Harbour, y de la misma forma que estamos acostumbrados, no como obliga a hacer Harbour.

Hasta ahora, las DLLs que hacíamos con Xailer y xHarbour se apoyaban en la VM y RTL que se enlaza en el mismo ejecutable, de forma que la DLL es muy pequeña (no contiene ni VM ni RTL), y se integran perfectamente con nuestros programas. Un buen ejemplo de ello son los plugins del IDE y XEdit y los componentes de terceros que se integran en el IDE.
Sigue leyendo

Xailer para Harbour

¡YA TENEMOS XAILER EN HARBOUR!

Bueno, casi. Quedan algunos detalles, además de depurarlo. Pero ya está funcionando al 90%. Tanto el núcleo como la ampliación del motor de objetos han sido portados con éxito, y toda la librería de Xailer, con todos los controles, datasources, etc.. Lo único que queda por ahora es el soporte para crear DLLs y el debugger, pero ya estamos trabajando en ello. También, el IDE ha sido modificado para poder compilar cualquier proyecto con xHarbour o con Harbour.
Sigue leyendo