XHarbour

xHarbour es un compilador extendido de Clipper en múltiples plataformas de ordenador ( DOS, Microsoft Windows, Linux (32 y 64 bits), Unix (32 y 64 bits), Mac OS X), ofreciendo múltiples terminales gráficas y drivers de consola, GUIs (libres como HWGui, MiniGUI, ooHG, t-gtk y comerciales como Visual xHarbour, FiveWin, Xailer), e híbridos entre consola y GUIs (Graphic User Interface o Interfaz Gráfica de Usuario) como GTWvt y GTWvw. xHarbour es 100% compatible Clipper y soporta muchas síntaxis de extensiones del lenguaje, ampliamente extendidas librerías runtime como OLE, ODBC, MySQL, PostgreSQL, TIpt, TXml, RegEx, HbZip, xbScript y un amplio soporte de terceras partes.

xHarbour es un proyecto Open Source, se distribuye bajo licencia GPL y por tanto es gratuito. Se incluye una excepción a la GPL para poder soportar aplicaciones comerciales. El proyecto fue dado a la luz por Ron Pikas a finales del 2001.

Como la mayoría de los lenguajes dinámicos, xHarbour está también disponible como un lenguaje de script (uso independiente, biblioteca enlazable, motor de MS ActiveScript [Windows Script Host, HTML, ASP]) utilizando un intérprete escrito en el lenguaje xHarbour.

Tipos de datos incorporados

xHarbour tiene 6 tipos escalares : Null, String, Fecha, FechaHora, Lógico, Numérico, Puntero, y 4 tipos complejos: Array, Objeto, CodeBlock, y Hash. Un escalar almacena un valor sencillo, como una cadena de caracteres, número, o referencia a cualquier otro tipo. Las matrices (Arrays) son listas ordenadas de escalares o tipos complejos, indexadas por un número, comenzando en 1. Los Hashs, o arrays asociativos, son colecciones ordenadas por su clave asociada, que puede ser de tipo String, Fecha o Numérico, y el valor contenido puede ser cualquier tipo escalar o complejo.

Representación (estática) literal de tipos escalares:

  • Null: NIL
  • String: "hola", 'hola', [hola], or E"hola\n"
  • Fecha: ctod("2005-03-17" )
  • FechaHora: ctot("2005-03-17 09:30:00.000")
  • Lógico: .T., .F.
  • Numérico: 1, 1.1, -1, 0xFF

Los tipos complejos pueden también representarse como valores literales:

  • Array: { "String"", 1, { "Array anidado" }, .T., LlamadaFunction(), @PunteroFunction() }
  • CodeBlock: { |Arg1, ArgN| Arg1 := ArgN + OuterVar + LlamadaFunction() }
  • Hash: { "Nombre" => "Juan", 1 => "Clave numérica", { "Anidado" => "Hash" } }

Los Hashs sólo pueden utilizar tipos String, Fecha o Número como la clave para cualquier elemento. Hashs y Arrays pueden contener cualquier tipo como el Valor de cualquier miembro, incluyendo otros arrays anidados y Hashs.

Los Codeblocks pueden tener referencias a Variables de la Procedure/Function>method (Procedimiento/Función>método) en que fueron definidos. Esos Codeblocks pueden devolver un valor, o mediante un argumento pasado por referencia, en cuyo caso el Codeblock "sobrevive" a la rutina en que fue definido, y cualquier variable que referencie, será una variable SEPARADA.

Las variables separadas mantendrán su valor mientras que todavía exista un Codeblock que las referencie. Tales valores serán compartidos con cualquier otro Codeblock que pueda tener acceso a esas mismas variables. Si el Codeblock no sobrevive a la rutina que contenía, y es evaluado durante el periodo de vida de la rutinaen que es definida, los cambios a sus Variables Separadas por medio de su evaluación, se reflejarán de vuelta en la rutina padre.

Los Codeblocks pueden evaluarse cuantas veces se necesario, por medio de la función Eval( BlockExp ).

Other Languages
English: XHarbour
italiano: XHarbour
Bahasa Melayu: XHarbour
português: XHarbour