Harbour (perisian)

Harbour ialah sebuah bahasa pengaturcaraan komputer moden. Ia serasi dengan Clipper yang rentas-pelantar, mampu berjalan pada kebanyakan sistem pengendalian (DOS, Microsoft Windows, Linux, varian Unix, beberapa keturunan BSD, Mac OS X, MINIX 3, Windows CE, Pocket PC, Symbian, iPhone, QNX, VxWorks, OS/2/eComStation, BeOS/Haiku, AIX) menggunakan kod sumber dan pangkalan data yang sama.

Walaupun ia sebuah bahasa pengaturcaraan serbaguna yang hebat, namun ia diguna terutamanya untuk mencipta atur cara pangkalan data/perniagaan. Harbour telah diselenggarakan dengan aktif mencari kepelbagaian sambil mengekalkan keserasian kebelakang dengan gaya Clipper. Ia telah melalui pelbagai perubahan dan mendapat kepopularan meluas dalam tahun 1980-an dan 1990-an.

Lesen sumber terbuka Harbour serupa dengan Lesen Awam Am GNU, kecuali ia menyokong aplikasi hak milik, jadi sesebuah aplikasi hak milik boleh dihasilkan dengan Harbour dan diedarkan.

Contoh

Ringkas 
Contoh atur cara "hello world" biasa ialah:
 
  ? "Hello, world!"
Atau:
  QOut( "Hello, world!" )
Atau:
  Alert( "Hello, world!" )
Atau, dikurung dalam tatacara nyata:

 PROCEDURE Main()
 
    ? "Hello, world!"

 RETURN

OOP
 #include "hbclass.ch"

 PROCEDURE Main()

    LOCAL oPerson := Orang( "Dave" )

    oPerson:Eyes := "Invalid"

    oPerson:Eyes := "Blue"

    Alert( oPerson:Describe() )
 RETURN

 CLASS Person
    DATA Name INIT ""

    METHOD New() CONSTRUCTOR

    ACCESS Eyes INLINE ::pvtEyes
    ASSIGN Eyes( x ) INLINE IIF( ValType( x ) == 'C' .AND. x IN "Blue,Brown,Green", ::pvtEyes := x, Alert( "Invalid value" ) )

    // Contoh pentakrifan Method DALAM-BARIS
    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

 // Contoh pentakrifan Method biasa.
 METHOD New( cName ) CLASS Person

   ::Name := cName

 RETURN Self

Rujukan 

Bahasa pengaturcaraan bertatacara
Keluarga bahasa pengaturcaraan xBase
4GL
Bahasa pengaturcaraan penjenisan dinamik
Bahasa pertanyaan
Bahasa pengaturcaraan pengisytiharan
Perisian DOS
Peralatan pengaturcaraan Linux
Perisian Windows
Bahasa pengaturcaraan dicipta pada tahun 1999