Logo Studenta

Compilador Harbour - Wikipedia, la enciclopedia libre

¡Este material tiene más páginas!

Vista previa del material en texto

Compilador
Harbour
lenguaje de programación
Harbour es un moderno lenguaje de
programación que nace como compilador
del lenguaje de programación Clipper (una
variante de xBase) desarrollado como
software libre. Su objetivo inicial fue
soportar todas las sentencias y
extensiones de la versión más popular del
compilador, Clipper 5.2. Harbour es
https://es.m.wikipedia.org/wiki/Wikipedia:Portada
https://es.m.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n
https://es.m.wikipedia.org/wiki/Compilador
https://es.m.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n
https://es.m.wikipedia.org/wiki/Clipper_(lenguaje_de_programaci%C3%B3n)
https://es.m.wikipedia.org/wiki/XBase
https://es.m.wikipedia.org/wiki/Software_libre
además un compilador multiplataforma,
capaz de compilar para y ejecutarse en
DOS (MS-DOS, DR-DOS, etc), Microsoft
Windows, OS/2, GNU/Linux, varias
variantes de Unix, varios descendientes de
BSD, Mac OS X, MINIX 3, Windows CE,
Pocket PC, Symbian, iPhone OS, QNX,
VxWorks, OS/2 BeOS/Haiku, AIX utilizando
el mismo código fuente y ficheros de base
de datos.
https://es.m.wikipedia.org/wiki/Multiplataforma
https://es.m.wikipedia.org/wiki/DOS
https://es.m.wikipedia.org/wiki/MS-DOS
https://es.m.wikipedia.org/wiki/DR-DOS
https://es.m.wikipedia.org/wiki/Microsoft_Windows
https://es.m.wikipedia.org/wiki/OS/2
https://es.m.wikipedia.org/wiki/GNU/Linux
https://es.m.wikipedia.org/wiki/Unix
https://es.m.wikipedia.org/wiki/BSD
https://es.m.wikipedia.org/wiki/Mac_OS_X
https://es.m.wikipedia.org/w/index.php?title=MINIX_3&action=edit&redlink=1
https://es.m.wikipedia.org/wiki/Windows_CE
https://es.m.wikipedia.org/wiki/Pocket_PC
https://es.m.wikipedia.org/wiki/Symbian
https://es.m.wikipedia.org/wiki/IPhone_OS
https://es.m.wikipedia.org/wiki/QNX
https://es.m.wikipedia.org/wiki/VxWorks
https://es.m.wikipedia.org/wiki/OS/2
https://es.m.wikipedia.org/wiki/BeOS
https://es.m.wikipedia.org/wiki/Haiku_(sistema_operativo)
https://es.m.wikipedia.org/wiki/Advanced_Interactive_Executive
https://es.m.wikipedia.org/wiki/C%C3%B3digo_fuente
Harbour Project
Desarrollador(es)
Viktor Szakáts y la comunidad Harbour
https://harbour.github.io/
Información general
Extensiones
comunes
.prg, .ch, .hbs, .dbf
Paradigma multi-paradigma:
imperativa, funcional,
orientada a objetos,
reflective
Apareció en 1999
Diseñado por Antonio Linares
Última versión
estable
3.0.0 (17 de julio de
2011 (11 años, 11
meses y 19 días))
https://harbour.github.io/
https://es.m.wikipedia.org/wiki/Extensi%C3%B3n_de_archivo
https://es.m.wikipedia.org/wiki/Paradigma_de_programaci%C3%B3n
https://es.m.wikipedia.org/wiki/Programaci%C3%B3n_imperativa
https://es.m.wikipedia.org/wiki/Programaci%C3%B3n_funcional
https://es.m.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos
https://es.m.wikipedia.org/wiki/Reflexi%C3%B3n_(inform%C3%A1tica)
https://es.m.wikipedia.org/wiki/1999
Última versión en
pruebas
3.1.x disponible en
SVN (Aunque existe
una versión llamada
"nightly" que se
genera diriamente
con las últimas
modificaciones a
Harbour o alguno de
sus componentes.
Sistema de tipos opcionalmente duck,
dinámico, seguro,
tipado fuerte parcial
Dialectos Clipper, Xbase++,
Flagship, FoxPro,
xHarbour
Influido por dBase, Clipper
Ha influido a xHarbour
Sistema operativo Multiplataforma
https://es.m.wikipedia.org/wiki/Sistema_de_tipos
https://es.m.wikipedia.org/wiki/Duck_typing
https://es.m.wikipedia.org/wiki/Tipado_fuerte
https://es.m.wikipedia.org/wiki/XHarbour
https://es.m.wikipedia.org/wiki/Sistema_operativo
https://es.m.wikipedia.org/wiki/Multiplataforma
A pesar de que es un poderoso lenguaje
de programación de propósito general , se
utiliza principalmente para crear
programas de bases de datos y negocios.
Harbour ha mantenido activamente la
adición de características mientras
mantiene compatibilidad retroactiva con el
estilo de Clipper. Ha sufrido muchos
cambios y revisiones y recuperado
ampliamente popularidad entre los
programadores de 1980 y 1990.
Licencia Open source GPL
Compatible
https://es.m.wikipedia.org/wiki/Licencia_de_software
https://es.m.wikipedia.org/wiki/Open_source
La licencia open source de Harbour[1] es
similar a la GNU General Public License,
con la excepción del soporte de
aplicaciones propietarias, por lo que las
aplicaciones propietarias pueden ser
creadas y distribuidas con Harbour.
La idea de un compilador de software libre
de Clipper había estado dando vueltas
durante mucho tiempo y era a menudo
tema de debate en comp.lang.clipper. El
proyecto fue iniciado por Antonio Linares,
creador de la biblioteca FiveWin, y fue
rápidamente secundado por otras figuras
del desarrollo en Clipper. Varias de las
Historia
https://es.m.wikipedia.org/wiki/Open_source
https://es.m.wikipedia.org/wiki/GNU_General_Public_License
https://es.m.wikipedia.org/wiki/Biblioteca_(inform%C3%A1tica)
https://es.m.wikipedia.org/w/index.php?title=FiveWin&action=edit&redlink=1
casas que desarrollan bibliotecas para
Clipper respaldaron el proyecto,
soportándolo en sus productos. El nombre
Harbour es un juego de palabras con los
barcos tipo Clipper que arribaban a un
puerto, siendo Harbour el puerto de
Clipper.
En 2009 Harbour fue rediseñado
sustancialmente, sobre todo por Viktor
Szakáts y Przemyslaw Czerpak.
Harbour extiende la definición Clipper
Replaceable Database Drivers (RDD).
Compatibilidad con base de
datos
https://es.m.wikipedia.org/wiki/Cl%C3%ADper
https://es.m.wikipedia.org/wiki/Puerto
Ofrece múltiples DDR como DBF, DBFNTX,
DBFCDX, DBFDBT y DBFFPT. En Harbour
pueden usarse múltiples RDDs en la
misma aplicación, y las nuevas lógicas de
DDR se pueden definir por la combinación
de otros DDRs. La arquitectura de los
RDDs permite la herencia, por lo que un
RDD dado puede ampliar la funcionalidad
de otro RDD existente(s). Desarrollos de
terceros, como RDDSQL, RDDSIX,
RMDBFCDX, Advantage Database Server, y
Mediator ejemplifican algunas de las
características de la arquitectura del RDD.
La implementación DBFNTX tiene casi las
mismas funciones de DBFCDX y RDDSIX.
NETIO y LetoDB[2] proporcionan acceso
https://es.m.wikipedia.org/w/index.php?title=DBF&action=edit&redlink=1
https://es.m.wikipedia.org/w/index.php?title=Advantage_Database_Server&action=edit&redlink=1
remoto a través del protocolo TCP
protocol.
Harbour también ofrece soporte ODBC por
medio de una sintaxis de programación
orientada a objetos, y soporte ADO a
través de OLE. MySQL, PostgreSQL,
SQLite, Firebird, Oracle son ejemplos de
bases de datos con las que se puede
conectar Harbour.
Las tecnologías xBase a menudo se
confunden con un RDBMS software.
Aunque esto es cierto, xBase es más que
un sistema de base de datos simple, pues
las variantes xBase que utilizan
https://es.m.wikipedia.org/wiki/Transmission_Control_Protocol
https://es.m.wikipedia.org/wiki/ODBC
https://es.m.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos
https://es.m.wikipedia.org/wiki/ActiveX_Data_Objects
https://es.m.wikipedia.org/wiki/OLE_Automation
https://es.m.wikipedia.org/wiki/MySQL
https://es.m.wikipedia.org/wiki/PostgreSQL
https://es.m.wikipedia.org/wiki/SQLite
https://es.m.wikipedia.org/wiki/Firebird_(database_server)
https://es.m.wikipedia.org/wiki/Oracle
https://es.m.wikipedia.org/wiki/RDBMS
exclusivamente DBF no pueden
proporcionar el concepto completo de un
verdadero RDBMS.
A diferencia del lenguaje de programación
Java, que está destinado a escribir una
vez, ejecutar en cualquier lugar, Harbour
aspira a ser escribir una vez, compilar en
cualquier lugar. A medida que el mismo
compilador está disponible para todos los
sistemas operativos anteriores, no hay
necesidad de recodificación para producir
productos idénticos para diferentes
plataformas, excepto cuando se utilizan
las características dependientes del
Filosofía de programación
https://es.m.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Java
sistema operativo. Se soporta la
compilación cruzada con MinGW32. En
Microsoft Windows, Harbour es más
estable pero no tan bien documentado
como Clipper,pero tiene la capacidad
multi-plataforma y es más transparente,
personalizable y se puede ejecutar desde
una Memoria USB.
En Linux y Windows Mobile, el código
fuente Clipper puede ser compilado con
Harbour, con muy poca adaptación. La
mayoría del software escrito originalmente
para funcionar con Xbase++, Flagship,
FoxPro, xHarbour y otros dialectos pueden
ser compilados con Harbour con algunas
https://es.m.wikipedia.org/wiki/MinGW
https://es.m.wikipedia.org/wiki/Microsoft_Windows
https://es.m.wikipedia.org/wiki/Memoria_USB
adaptaciones. En 2010 se han hecho
muchos esfuerzos para hacer la transición
de otros dialectos xBase más fácil.
Harbour puede utilizar los siguientes
compiladores de C, entre otros: GCC,
MinGW, Clang, ICC, Microsoft Visual C++
(6.0+), Borland C++, Watcom C, Pelles C y
Sun Studio, tanto para ser generado el
compilador Harbour y sus herramientas
auxiliares, como también para incluir
rutinas en lenguaje C, embebidas en el
código de Harbour.
https://es.m.wikipedia.org/wiki/XBase
https://es.m.wikipedia.org/wiki/GNU_Compiler_Collection
https://es.m.wikipedia.org/wiki/MinGW
https://es.m.wikipedia.org/wiki/Clang
https://es.m.wikipedia.org/wiki/Intel_C%2B%2B_Compiler
https://es.m.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B
https://es.m.wikipedia.org/wiki/Borland_C%2B%2B
https://es.m.wikipedia.org/w/index.php?title=Watcom_C&action=edit&redlink=1
https://es.m.wikipedia.org/w/index.php?title=Pelles_C&action=edit&redlink=1
https://es.m.wikipedia.org/w/index.php?title=Sun_Studio_(software)&action=edit&redlink=1
Interfaz Gráfica
Harbour puede hacer uso de múltiples
emulaciones de terminal gráfico, incluidos
los controladores de la consola, e híbridos
consola/GUIs, como GTWvt, y GTWvg.
En el modo consola (ventana DOS), la
ejecución de un programa en Harbour es
de tipo top-down el programa avanza de
arriba hacia abajo, según las directivas de
programación que va encontrando.
En cambio en el modo Gráfico, se utiliza el
paradigma por eventos y la ejecución no
necesariamente sigue con la próxima
directiva de programación.
Es muy importante tener en cuenta esto,
porque el código fuente debe ser
modificado según el tipo de interfaz que
se elija.
Harbour soporta interfaces gráficas de
usuario externas, por ejemplo:
Libres:
HBQt (Forma parte de Harbour,
basada en Qt_(biblioteca))
Qth (https://sourceforge.net/project
s/qth/) (basada en Qt_(biblioteca))
MiniGUI (http://www.harbourminigu
i.com/)
https://es.m.wikipedia.org/wiki/Qt_(biblioteca)
https://sourceforge.net/projects/qth/
https://es.m.wikipedia.org/wiki/Qt_(biblioteca)
http://www.harbourminigui.com/
OOHG (https://web.archive.org/we
b/20080811000401/http://www.oo
hg.org/)
Marinas-GUI (http://www.marinas-g
ui.org/)
HwGUI (https://sourceforge.net/pro
jects/hwgui) (basada en GTK+)
xbGTK (https://xbgtk.sourceforge.n
et/) (basada en GTK+)
xHGTK (https://xhgtk.sourceforge.n
et/index.html) (basada en GTK+)
t-gtk (https://sourceforge.net/proje
cts/t-gtk) (basada en GTK+)
https://web.archive.org/web/20080811000401/http://www.oohg.org/
http://www.marinas-gui.org/
https://sourceforge.net/projects/hwgui
https://es.m.wikipedia.org/wiki/GTK%2B
https://xbgtk.sourceforge.net/
https://es.m.wikipedia.org/wiki/GTK%2B
https://xhgtk.sourceforge.net/index.html
https://es.m.wikipedia.org/wiki/GTK%2B
https://sourceforge.net/projects/t-gtk
https://es.m.wikipedia.org/wiki/GTK%2B
Comerciales:
FiveWin
Xailer
HBQt es una biblioteca que proporciona
enlaces a Qt. La aplicación HBIDE incluida
en la distribución oficial y en el repositorio
SVN es una muestra del potencial de
HBQt.
Harbour es 100% compatible con
Clipper[3] y soporta muchas extensiones
de la sintaxis del lenguaje, incluyendo en
gran medida extensiones en tiempo de
ejecución, tales como bibliotecas OLE,
Blat, OpenSSL, FreeImage, GD, TIP, Tpathy,
PCRE, HbZip (zlib y bzip2), cURL, Cairo, su
https://es.m.wikipedia.org/w/index.php?title=Blat_(software)&action=edit&redlink=1
https://es.m.wikipedia.org/wiki/OpenSSL
https://es.m.wikipedia.org/w/index.php?title=FreeImage&action=edit&redlink=1
https://es.m.wikipedia.org/wiki/Biblioteca_de_gr%C3%A1ficos_GD
https://es.m.wikipedia.org/w/index.php?title=PCRE&action=edit&redlink=1
https://es.m.wikipedia.org/wiki/Zlib
https://es.m.wikipedia.org/wiki/Bzip2
https://es.m.wikipedia.org/wiki/CURL
https://es.m.wikipedia.org/wiki/Cairo_(biblioteca)
propia implementación de las librerías CA-
Tools y NanFor y muchos otros. Harbour
cuenta con una activa comunidad de
desarrollo y con un amplio apoyo de
terceros.
Cualquier lenguaje xBase proporciona una
manera muy productiva para construir
aplicaciones de negocios y de grandes
volúmenes de datos. Harbour no es una
excepción.
Operador de Macro (compilación en
tiempo de ejecución)
Una de las características más potentes
de los lenguajes xBase es el operador de
macro '&'. La implementación en Harbour
del operador de macro permite la
compilación en tiempo de ejecución de
cualquier expresión válida Harbour. Una
expresión compilada se puede utilizar
como un VALUE, es decir, el lado derecho
de una asignación (rvalue), pero es más
interesante, tal expresión compilada
puede utilizarse para resolver el lado
izquierdo (lvalue) de una asignación, es
https://es.m.wikipedia.org/wiki/Macro
decir, variables PRIVATE o PUBLIC, o en un
campo de base de datos.
Además, el operador de macro puede
compilar y ejecutar llamadas a funciones,
tareas completas, o incluso la lista de
argumentos, y el resultado de la macro se
puede utilizar para resolver cualquiera de
los contextos anteriores en la aplicación
compilada. En otras palabras, cualquier
aplicación Harbour puede ser extendida y
modificada en tiempo de ejecución para
compilar y ejecutar código adicional bajo
demanda.
El compilador de macro puede compilar
cualquier código Harbour válido,
incluyendo el código de pre-proceso antes
de la compilación.
Sintaxis:
 &( ... )
El valor del texto de la expresión '...' será
compilado, y el valor resultante de la
ejecución del código compilado es el
resultado.
 &SomeId
es la forma corta de &( SomeId ).
 &SomeId.postfix
es la forma corta de &( SomeId + "postfix"
).
Programación Orientada a Objetos
El estilo de programación orientada a
objetos es un tema más amplio que el de
una biblioteca específica o una interfaz
específica, pero la programación orientada
a objetos es algo que muchos
programadores Clipper han llegado a
esperar. CA-Clipper 5.2 y en especial 5.3
https://es.m.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos
añadieron una serie de clases base, y una
sintaxis de programación orientada a
objetos correspondiente. Bibliotecas,
como Class(y) (https://web.archive.org/we
b/20100704154058/http://www.appsoluti
ons.com/Classy/) , FiveWin, Clip4Win y
TopClass ofrecen funcionalidad de
programación orientada a objetos
adicionales.
Harbour tiene extensiones de
programación orientada a objetos con
soporte completo para las clases,
incluyendo la herencia, basado en la
sintaxis de Class(y). La sintaxis de
programación orientada a objetos en
https://web.archive.org/web/20100704154058/http://www.appsolutions.com/Classy/
https://es.m.wikipedia.org/w/index.php?title=FiveWin&action=edit&redlink=1
https://es.m.wikipedia.org/w/index.php?title=Clip4Win&action=edit&redlink=1
https://es.m.wikipedia.org/w/index.php?title=TopClass&action=edit&redlink=1
Harbour es muy similar a la de anteriores
bibliotecas de clases de Clipper por lo que
debería ser posible mantener el código
heredado Clipper con cambios mínimos.
Sintaxis y semántica
Código Harbour en HBIDE.
https://es.m.wikipedia.org/wiki/Archivo:Harbour_Sample_Code.png
Harbour como cada lenguaje xBase es in-
sensible a mayúsculas y, opcionalmente,
puede aceptar palabras clave escritas con
solo los cuatro primeros caracteres.
Tipos de datos incorporados
Harbour cuenta con 6 tipos escalares: Nil,
Cadena, Fecha, Lógico, Numérico, y 4 tipos
complejos: Matriz (Array), Objeto,
CodeBlock, y Hash. Un escalar tieneun
valor único, como una cadena, número o
referencia a cualquier otro tipo. Las
matrices son listas ordenadas de
escalares o tipos complejos, con un índice
por número, comenzando por el 1. Hashes,
https://es.m.wikipedia.org/wiki/Nil
https://es.m.wikipedia.org/wiki/Cadena_de_caracteres
https://es.m.wikipedia.org/wiki/Fecha
https://es.m.wikipedia.org/wiki/L%C3%B3gica_digital
https://es.m.wikipedia.org/wiki/Vector_(inform%C3%A1tica)
https://es.m.wikipedia.org/wiki/Objeto_(programaci%C3%B3n)
https://es.m.wikipedia.org/wiki/Clausura_(inform%C3%A1tica)
https://es.m.wikipedia.org/wiki/Tabla_hash
o matrices asociativas, son conjuntos no
ordenados de los valores de tipo
indexados por la clave de su asociado, que
puede ser de cualquier tipo escalar o
compleja.
Representación literal (estática) de tipos
escalares:
NIL: Este valor especial es asignado a
todas las variables no inicializadas,
excepto las públicas, y es también
pasado también como un sustituto
cuando los argumentos son omitidos en
el llamado a una función o
procedimiento.
https://es.m.wikipedia.org/w/index.php?title=Vector_asociativo&action=edit&redlink=1
Cadena de caracteres: "hola", 'hola', [hola]
Fecha: 0d20100405
Lógico: .T., .F.
Numérico: 1, 1.1, −1, 0xFF
Los tipos complejos también pueden
presentarse como valores literales:
Array: { "Cadena"", 1, { "Matriz Anidada" },
.T., FunctionCall(), @FunctionPointer() }
CodeBlock: { |Arg1, ArgN| Arg1 := ArgN +
OuterVar + FunctionCall() }
Hash: { "Nombre" => "Juan", 1 => "Clave
numérica", { "Anidado" => "Hash" } }
Los valores hash puede utilizar cualquier
tipo incluyendo otros hashes como la
Clave para cualquier elemento. Hashes y
arrays pueden contener cualquier tipo
como el valor de cualquier miembro,
incluidas las matrices de anidación, y
hashes.
Los Codeblocks pueden tener referencias
a variables del
Procedimiento/Función/Método en el que
se ha definido. Estos Codeblocks pueden
ser devueltos como un valor, o por medio
de un argumento pasado por referencia,
en tal caso el bloque de código va a
"sobrevivir" a la rutina en la que se definió,
y las variables de las que hace referencia,
será una variable INDEPENDIENTE.
https://es.m.wikipedia.org/wiki/Bloque_de_c%C3%B3digo
Las variables independientes mantendrán
su valor durante el tiempo que un bloque
de código (Codeblock) hace referencia a
ellos aún exista. Estos valores serán
compartidos con cualquier otro bloque de
código que puede tener acceso a esas
mismas variables. Si el bloque de código
no sobrevive a la rutina que contiene, y
será evaluado durante la vida de la rutina
en la que se define, los cambios en sus
variables independientes por medio de su
evaluación, se reflejan de vuelta en la
rutina de los padres.
Los Codeblocks se pueden evaluar
cualquier número de veces, por medio de
la función Eval( BlockExp ).
Variables
Todos los tipos se pueden asignar a las
variables declaradas. El nombre de una
variable tiene de 1 a 63 caracteres de
largo, comienza por [A-Z|_] y además
constará de caracteres [A-Z|0–9|_] hasta el
máximo de 63 caracteres. Los nombres de
las variables no distinguen entre
mayúsculas y minúsculas.
Las variables tienen uno de los siguientes
ámbitos:
LOCAL: Visible solo dentro de la rutina,
que lo declaró. El valor se pierde al salir
de la rutina.
STATIC: Visible solo dentro de la rutina,
que lo declaró. El valor es preservado
para las siguientes llamadas a la rutina.
Si una variable STATIC (estática) se
declara antes de que cualquier
procedimiento/función/método se
defina, tiene un alcance de MODULE
(módulo), y es visible dentro de
cualquier rutina definida dentro de ese
mismo archivo de origen, que
mantendrá su vida durante toda la
duración de la aplicación.
PRIVATE: Visible dentro de la rutina que
lo declaró, y todas las rutinas llamadas
por esa rutina.
PUBLIC: Visible por todas las rutinas en
la misma aplicación.
LOCAL y STATIC se resuelven en tiempo de
compilación, y por lo tanto son mucho
más rápidas que las variables PRIVATE y
PUBLIC que son entidades dinámicas a las
que se accede en tiempo de ejecución por
medio de la tabla de símbolos. Por esta
misma razón, las variables LOCAL y
STATIC no están disponibles para el
compilador de macros, y cualquier código
https://es.m.wikipedia.org/wiki/Tabla_de_s%C3%ADmbolos_(compilador)
de macro que intenta hacer referencia a
ellos va a generar un error de ejecución.
Debido a la naturaleza dinámica de las
variables PRIVATE y PUBLIC, que pueden
ser creados y destruidos en tiempo de
ejecución, se puede acceder y modificar
por medio de macros en tiempo de
ejecución, y pueden ser consultados y
modificados por Codeblocks creados
sobre la marcha.
Fields (Campos)
Las variables de los campos de las bases
de datos están limitados a: Carácter,
Numérico, Fecha, Lógico y un tipo especial
llamado 'MEMO' que es tratado como una
Cadena de caracteres (con algunos
caracteres especiales de control).
Estructuras de control
Las estructuras de control básicas
incluyen todas las estructuras de control
estándar de dBase y Clipper, así como
otras adicionales inspirados en las de los
lenguajes de programación C o Java :
https://es.m.wikipedia.org/wiki/DBase
https://es.m.wikipedia.org/wiki/Clipper_(lenguaje_de_programaci%C3%B3n)
https://es.m.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)
https://es.m.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_Java
Bucles
[DO] WHILE ConditionExp
 ...
 [LOOP]
 [EXIT]
END[DO]
FOR Var := InitExp TO 
EndExp [STEP StepExp]
 ...
 [LOOP]
 [EXIT]
NEXT
FOR EACH Var IN 
CollectionExp
 ...
 [HB_EnumIndex()]
 [LOOP]
 [EXIT]
NEXT
... es una secuencia de una o más
expresiones Harbour statements, y los
corchetes [] indican la sintaxis opcional.
HB_EnumIndex() puede ser utilizado
opcionalmente para recuperar el índice
de iteración actual (basado en 1).
La sentencia LOOP reinicia la iteración
actual de la estructura de bucle a que
pertenece, y si el circuito de cierre es un
bucle FOR o FOR EACH, incrementa el
contador, pasando a la siguiente
iteración del bucle.
La sentencia EXIT termina
inmediatamente la ejecución de la
estructura de bucle a que pertenece.
La sentencia NEXT cierra la estructura
de control y se traslada a la siguiente
iteración de la estructura de bucle.
En la sentencia FOR, la expresión de
asignación se evalúa antes de la repetición
del bucle en primer lugar. La expresiónTO
se evalúa y se compara con el valor de la
variable de control, antes de cada
iteración, y el bucle se termina si se evalúa
como un valor numérico mayor que el
valor numérico de la variable de control.
La expresión opcional STEP se evalúa
después de cada iteración, antes de
decidir si se debe realizar la siguiente
iteración.
En FOR EACH, la variable Var tendrá el
valor (escalar, o complejo) del elemento
respectivo en el valor de la colección. La
expresión de la colección, puede ser una
matriz (de cualquier tipo o una
combinación de tipos), una tabla hash, o
un Objeto.
Sentencias IF
IF CondExp
 ...
[ELSEIF] CondExp
 ...
[ELSE]
 ...
END[IF]
... representa 0 o más sentencias.
Las expresiones de condición tiene que
evaluar a un valor LOGICAL (lógico).
Sentencias SWITCH
Harbour admite el constructor SWITCH
inspirado en la implementación en C de
switch().
SWITCH SwitchExp
 CASE LiteralExp
 ...
 [EXIT]
 [CASE LiteralExp]
 ...
 [EXIT]
 [DEFAULT]
 ...
END
La LiteralExp debe ser una expresión
numérica que pueda resolverse en
tiempo de compilación, y puede
involucrar operadores, siempre y cuando
los operadores en cuestión afectan a un
valor en tiempo de compilación estática.
La sentencia opcional EXIT es el
equivalente de la declaración break en C,
y si está presente, la ejecución de la
estructura SWITCH termina al alcanzar
la sentencia EXIT, de lo contrario se
continuará con la primera declaración
CASE siguiente (fall through).
Sentencias BEGIN SEQUENCE
BEGIN SEQUENCE
 ...
 [BREAK][Break([Exp])]
RECOVER [USING Var]
 ...
END[SEQUENCE]
o:
BEGIN SEQUENCE
 ...
 [BREAK]
 [Break()]
END[SEQUENCE]
La estructura BEGIN SEQUENCE permite
un aborto ordenado de cualquier
secuencia, incluso cuando se utilizan
procedimientos y funciones anidadas.
Esto significa que un
procedimiento/función llamado, puede
emitir una sentencia BREAK, o una
expresión Break(), para forzar el retorno de
cualquier procedimiento/función
anidadas, todo el camino de regreso a la
primera estructura externa BEGIN
SEQUENCE, incluso después de su
respectiva declaración END, o a una
cláusula RECOVER si está presente. La
sentencia Break puede pasar
opcionalmente cualquier tipo de
expresión, que puede ser aceptado por la
sentencia RECOVER para permitir su
entrega y posterior recuperación.
Además, el Error Object (objeto de error)
de Harbour soporta las propiedades
canDefault, canRetry y canSubstitute, que
permiten a los controladores de errores
llevar a cabo algunos preparativos, y luego
solicitar una Retry Operation (operación de
reintento), un Resume, o devolver un Valor
para sustituir la expresión que dispara la
condición de error.
Alternativamente las declaraciones TRY
[CATCH] [FINALLY] están disponibles en la
biblioteca xHB trabajando como el
constructor SEQUENCE.
Procedimientos y funciones
[STATIC] PROCEDURE 
SomeProcedureName
[STATIC] PROCEDURE 
SomeProcedureName()
https://es.m.wikipedia.org/wiki/Valor_(inform%C3%A1tica)
[STATIC] PROCEDURE 
SomeProcedureName( Param1' 
[, ParamsN] )
INIT PROCEDURE 
SomeProcedureName
EXIT PROCEDURE 
SomeProcedureName
[STATIC] FUNCTION 
SomeProcedureName
[STATIC] FUNCTION 
SomeProcedureName()
[STATIC] FUNCTION 
SomeProcedureName( Param1' 
[, ParamsN] )
Procedimientos y Funciones en Harbour
puede ser especificadas con la palabra
clave PROCEDURE , o FUNCTION . Las
reglas de asignación de nombres son los
mismos que para las variables (hasta 63
caracteres que mayúsculas y minúsculas).
Procedimientos y funciones pueden ser
calificados por el calificador de ámbito
STATIC para restringir su uso al ámbito de
aplicación del módulo donde se define.
Los calificadores opcionales INIT or EXIT,
marcarán el procedimiento que se invoca
https://es.m.wikipedia.org/wiki/Subrutina
https://es.m.wikipedia.org/wiki/Palabra_clave
automáticamente justo antes de llamar al
procedimiento de inicio de la aplicación, o
justo después de salir de la aplicación,
respectivamente. Los parámetros que se
pasan a una procedure/function aparecen
en la subrutina como variables locales, y
puede aceptar cualquier tipo, incluyendo
las referencias.
Los cambios en las variables de
parámetros no se reflejan en las variables
respectivas pasadas en la llamada al
procedimiento/función/método a menos
que pasen explícitamente BY REFERENCE
(por referencia) usando el prefijo @.
https://es.m.wikipedia.org/wiki/Argumento_(inform%C3%A1tica)
Un PROCEDURE no tienen valor de retorno,
y si se utiliza en un contexto de expresión
va a producir un valor Nulo.
Una FUNCTION puede devolver cualquier
tipo por medio de la instrucción RETURN,
en cualquier parte del cuerpo de su
definición.
A continuación, una llamada a una
FUNCTION y la definición de dicha
FUNCTION :
 x := Cube( 2 )
Ejemplos de código
El típico programa hola mundo puede
implementarse como:
O:
O:
 FUNCTION Cube( n )
 RETURN n ** 3
 
  ? "¡Hola, mundo!"
 QOut( "¡Hola, mundo!" )
https://es.m.wikipedia.org/wiki/Hola_mundo
O, dentro de un procedimiento explícito:
Ejemplos de OOP
 Alert( "¡Hola, mundo!" )
 PROCEDURE Main()
 
  ? "¡Hola, mundo!"
 RETURN
 #include "hbclass.ch"
 PROCEDURE Main()
 LOCAL oPerson := 
Person():New( "Dave" )
 oPerson:Eyes := 
"Invalid"
 oPerson:Eyes := "Blue"
 Alert( 
oPerson:Describe() )
 RETURN
 CLASS Person
 DATA Name INIT ""
 METHOD New( cName ) 
CONSTRUCTOR
 ACCESS Eyes 
INLINE ::pvtEyes
 ASSIGN Eyes( x ) INLINE 
IIF( ValType( x ) == 'C' 
.AND. x IN 
"Blue,Brown,Green", ::pvtEy
es := x, Alert( "Invalid 
value" ) )
 // Ejemplo de 
definición de método IN-
LINE
 INLINE METHOD 
Describe()
 LOCAL cDescription
 IF Empty( ::Name )
 cDescription := 
"I have no name yet."
 ELSE
 cDescription := 
"My name is: " + ::Name + 
";"
 ENDIF
 IF ! Empty( ::Eyes )
 cDescription += 
"my eyes' color is: " 
+ ::Eyes
 ENDIF
 ENDMETHOD
 PRIVATE:
 DATA pvtEyes
 ENDCLASS
 // Ejemplo de definición 
de un método normal.
 METHOD New( cName ) CLASS 
Person
  ::Name := cName
 RETURN Self
HBIDE – Entorno de desarrollo integrado
para ayudar al desarrollo Harbour y
varios dialectos xBase
HBMK2 – Potente herramienta de
construcción como make
HBDoc2 e HBExtern – Crea la
documentación para Harbour
HPPP – Preprocesador, una poderosa
herramienta que evita los problemas
típicos que se encuentran en el
Preprocesador de C
HBFormat – Formatea código fuente
escrito en Harbour u otro dialecto a otro
Herramientas
https://es.m.wikipedia.org/wiki/Entorno_de_desarrollo_integrado
https://es.m.wikipedia.org/wiki/Make
https://es.m.wikipedia.org/wiki/Preprocesador_de_C
según las reglas definidas
HBi18n – Herramientas para la
localización de texto en las aplicaciones
HBRun – intérprete de Shell para
Harbour. La macro compilación permite
ejecutar cualquier código Harbour
válido, ya que se está compilando
Todas las herramientas son
multiplataforma.
Nota:
A pesar de no estar incluida la herramienta
DBU para crear y manejar tablas en
formato DBF (por cuestiones de
copyright), aún sigue siendo posible
compilar el código original DBU.PRG y
generar el ejecutable en cualquiera de las
plataformas soportadas.
Hoy en día el desarrollo de Habour está
liderado por Viktor Szakáts con gran
colaboración de Przemysław Czerpak que
lleva muchos componentes del núcleo y
Desarrollo
HBIDE look.
https://es.m.wikipedia.org/wiki/Archivo:HBIDE_Editor.png
contribuciones. HBIDE y algunos
componentes, especialmente HBQt, son
desarrollados por Pritpal Bedi. Otros
miembros aportan los cambios de menor
importancia al repositorio SVN de
Sourceforge.[4] En 2010 el desarrollo de
Harbour mantiene una vibrante actividad.
Aunque no hay manera de medir la
popularidad de Harbour o xBase, el TIOBE
Programming Community Index[5] situaba
a Microsoft Visual FoxPro, un dialecto de
alto perfil de xBase, en la 12 posición en el
ranking de popularidad de lenguajes de
programación en junio de 2006, y a
Popularidad
https://es.m.wikipedia.org/wiki/Sourceforge
https://es.m.wikipedia.org/wiki/%C3%8Dndice_TIOBE
https://es.m.wikipedia.org/wiki/Visual_FoxPro
FoxPro/xBase en el puesto 25 en agosto
de 2010. En septiembre de 2010, los
newsgroups de Usenet sobre Clipper
comp.lang.clipper (https://groups.google.c
om/group/comp.lang.clipper) todavía
está activo. En agosto de 2010 Harbour
figuraba en la posición 16 en descargas
semanales en la categoría del compilador
y en la posición 132 en la clasificación
mundial.[6] 
xHarbour es un fork[7] del primitivo
proyecto Harbour. xHarbour tiene un
enfoque más agresivo para la aplicación
de las nuevas características del lenguaje,
Comparación con xHarbour
https://es.m.wikipedia.org/wiki/FoxPro
https://es.m.wikipedia.org/wiki/XBase
https://es.m.wikipedia.org/wiki/Newsgroup
https://es.m.wikipedia.org/wiki/Usenet
https://groups.google.com/group/comp.lang.clipper
https://es.m.wikipedia.org/wiki/XHarbour
https://es.m.wikipedia.org/wiki/Fork
mientras que Harbour es más conservador
en su planteamiento, con el objetivo en
primer lugar por una réplica exacta del
comportamiento de Clipper dejando la
aplicación de las nuevas características y
extensiones como una consideración
secundaria. También hay que señalar que
Harbour es compatible con una amplia
variedad de sistemas operativos , mientras
que xHarbour solo está soportado por las
versiones de 32 bits de Microsoft
Windows y Linux.
Los desarrolladores deHarbour han
tratado de documentar todo el
comportamiento oculto en el lenguaje
Clipper y testeado código compilado con
Harbour con el mismo código compilado
con Clipper para mantener la
compatibilidad.
Los desarrolladores de Harbour rechazan
explícitamente extensiones del lenguaje
cuando las extensiones rompen la
compatibilidad Clipper. Este rechazo se
suaviza recientemente ya que la nueva
arquitectura de Harbour permite
extensiones fuera del núcleo del
compilador.
Una comparación detallada entre las
extensiones aplicadas en Harbour y
xHarbour se puede encontrar en el
repositorio SVN del proyecto en
SourceForge.[8] 
A partir de 2009-2010, Harbour ha visto un
enorme aumento en su adopción, mientras
que el declive de xHarbour puede verse en
su lista de correo.[9] [10] [11] 
xHarbour
FlagShip de multisoft
Visual FoxPro
Visual Objects
XBase++
Véase también
https://es.m.wikipedia.org/wiki/XHarbour
https://es.m.wikipedia.org/wiki/FlagShip
https://es.m.wikipedia.org/wiki/Visual_FoxPro
https://es.m.wikipedia.org/w/index.php?title=Visual_Objects&action=edit&redlink=1
https://es.m.wikipedia.org/wiki/XBase%2B%2B
1. Harbour license (https://web.archive.o
rg/web/20120309055958/http://www.
harbour-project.org/license.html)
2. LetoDB (https://sourceforge.net/proje
cts/letodb)
3. Official Harbour page (http://www.harb
our-project.org/) Archivado (https://w
eb.archive.org/web/20120605041921/
http://www.harbour-project.org/) el 5
de junio de 2012 en Wayback
Machine.
4. http://sourceforge.net/projects/harbo
ur-project/
Referencias
https://web.archive.org/web/20120309055958/http://www.harbour-project.org/license.html
https://sourceforge.net/projects/letodb
http://www.harbour-project.org/
https://web.archive.org/web/20120605041921/http://www.harbour-project.org/
https://es.m.wikipedia.org/wiki/Wayback_Machine
https://sourceforge.net/projects/harbour-project/
5. «TIOBE Programming Community
Index» (https://web.archive.org/web/2
0071129202943/http://www.tiobe.co
m/tpci.htm) . Archivado desde el
original (http://www.tiobe.com/tpci.ht
m) el 29 de noviembre de 2007.
Consultado el 4 de marzo de 2012.
�. SourceForge (https://web.archive.org/
web/20081118033645/http://sourcefo
rge.net/softwaremap/)
7. About xHarbour (http://www.xharbour.
org/index.asp?page=about/index)
�. xhb-diff.txt (http://web.archive.org/we
b/http://harbour-project.svn.sourcefor
https://web.archive.org/web/20071129202943/http://www.tiobe.com/tpci.htm
http://www.tiobe.com/tpci.htm
https://web.archive.org/web/20081118033645/http://sourceforge.net/softwaremap/
http://www.xharbour.org/index.asp?page=about/index
http://web.archive.org/web/http://harbour-project.svn.sourceforge.net/viewvc/harbour-project/trunk/harbour/doc/xhb-diff.txt
ge.net/viewvc/harbour-project/trunk/h
arbour/doc/xhb-diff.txt)
9. «Harbour developers' mailing list
statistics» (https://web.archive.org/we
b/20120313164521/http://gmane.org/
info.php?group=gmane.comp.lang.har
bour.devel) . Archivado desde el
original (http://gmane.org/info.php?gr
oup=gmane.comp.lang.harbour.devel)
el 13 de marzo de 2012. Consultado el
4 de marzo de 2012.
10. «xHarbour developers' mailing list
statistics» (https://web.archive.org/we
b/20120313164608/http://gmane.org/
info.php?group=gmane.comp.lang.xha
http://web.archive.org/web/http://harbour-project.svn.sourceforge.net/viewvc/harbour-project/trunk/harbour/doc/xhb-diff.txt
https://web.archive.org/web/20120313164521/http://gmane.org/info.php?group=gmane.comp.lang.harbour.devel
http://gmane.org/info.php?group=gmane.comp.lang.harbour.devel
https://web.archive.org/web/20120313164608/http://gmane.org/info.php?group=gmane.comp.lang.xharbour.devel
rbour.devel) . Archivado desde el
original (http://gmane.org/info.php?gr
oup=gmane.comp.lang.xharbour.deve
l) el 13 de marzo de 2012. Consultado
el 4 de marzo de 2012.
11. ohloh.net Activity comparison (https://
web.archive.org/web/2012101207545
2/http://www.ohloh.net/p/compare?m
etric=Activity&project_0=harbour+proj
ect&project_1=xHarbour+Extended+H
arbour+Compiler)
Sitio web oficial (https://harbour.github.i
o/) (inglés)
Enlaces externos
https://web.archive.org/web/20120313164608/http://gmane.org/info.php?group=gmane.comp.lang.xharbour.devel
http://gmane.org/info.php?group=gmane.comp.lang.xharbour.devel
https://web.archive.org/web/20121012075452/http://www.ohloh.net/p/compare?metric=Activity&project_0=harbour+project&project_1=xHarbour+Extended+Harbour+Compiler
https://harbour.github.io/
Repositorio en Sourceforge (https://sour
ceforge.net/projects/harbour-project/)
Diseñador de Informes para Harbour (htt
ps://web.archive.org/web/20090130032
726/http://paritetsoft.ru/frh.htm)
The Oasis (http://www.the-oasis.net/)
Repositorio de las comunidades Clipper,
FoxPro y Xbase++
HBIDE (http://hbide.vouch.info/)
Un programa musical en Harbour (http
s://www.youtube.com/watch?v=1wQMH
sqxo_s)
 Datos: Q2544816
https://sourceforge.net/projects/harbour-project/
https://web.archive.org/web/20090130032726/http://paritetsoft.ru/frh.htm
http://www.the-oasis.net/
http://hbide.vouch.info/
https://www.youtube.com/watch?v=1wQMHsqxo_s
https://es.m.wikipedia.org/wiki/Wikidata
https://www.wikidata.org/wiki/Q2544816
Esta página se editó por última vez el 12 jun 2023
a las 02:03. •
El contenido está disponible bajo la licencia CC
BY-SA 4.0 , salvo que se indique lo contrario.
Obtenido de
«https://es.wikipedia.org/w/index.php?
title=Compilador_Harbour&oldid=151793079»
https://creativecommons.org/licenses/by-sa/4.0/deed.es
https://es.wikipedia.org/w/index.php?title=Compilador_Harbour&oldid=151793079

Continuar navegando

Materiales relacionados

462 pag.
null-5

SIN SIGLA

User badge image

Stiven Fajardo

601 pag.
Java_8_Los_Fundamentos

SIN SIGLA

User badge image

luz angela Diaz

64 pag.
Programacion-y-Extencion-de-OpenOffice

SIN SIGLA

User badge image

Materiales y Contenidos

245 pag.