A Clipper egy programozási nyelv, amelyet leginkább DOS operációs rendszeren futó programok fejlesztésére használtak. Bár sokrétűen alkalmazható, elsősorban adatbázis-kezelő alkalmazások fejlesztésére használták.
Története
Eredetileg 1984-ben hozta létre a Nantucket cég, de csak 1985 májusában kezdték árulni. Elsődleges célja az akkoriban népszerű Ashton Tate-féle dBase II adatbázis programozási nyelvének kiváltása volt. A dBase kód lefordításának eredményeként az addig interpretált kódból pszeudokód lett, amelyet egy virtuális gép hajtott végre. A pszeudokód gyorsabb, mint az interpretálás, de még mindig nem olyan gyors, mint a natív gépi kód.
1992-ben a Computer Associates megvásárolta a Nantucket-től és CA-Clipper néven forgalmazta tovább. 2002 április 22-én a Computer Associates és a GrafX Software bejelentette, hogy elfogadtak egy Fejlesztési, Licencelési, és Marketing Egyezményt két programozási nyelvükre—a CA-Clipperre, és a CA-Visual Objects-re.
Fejlesztése során a Clipper nyelv átvett néhány elemet a C és Pascal nyelvekből és az objektumorientált programozási módszerekből. Megjelent továbbá a kódblokk adattípus, ami egy hibrid koncepció a dBase makrókból, avagy string-kiértékelésből, és a függvénymutatókból összegyúrva. Ez sokkal erőteljesebb lett az eredetinél.
2006 óta a nyelvet folyamatosan fejleszti több szervezet és szállító is. Ma már elérhető több operációs rendszer alatt is (DOS, Windows, Linux, 32 és 64 bit, Unix, és OS X) és több adatbázis-motort (RDD) támogat, melyekkel a legnépszerűbb formátumok (DBF, DBFNTX, DBFCDX, MachSix, SQL…) is kezelhetőek. Az új fejlesztések során elsődleges elv, hogy megmaradjon a kompatibilitás az alap dBase/xBase szintaxissal, miközben objektumorientált (OOP) kiegészítéseket és könnyebb lekérdező felület (sqlExecute()) biztosítson.
Megjelentek ingyenes változatok, mint a CLIP, a Harbour, az xHarbour, és nem utolsósorban a magyar fejlesztésű CCC, de vannak fizetős megoldások is, mint az XBase++ és a FlagShip.
USECustomer SHARED NEW
CLS
@ 1, 0 SAY "CustNum" GET Customer->CustNum PICTURE "999999" VALID Customer->CustNum > 0
@ 3, 0 SAY "Contact" GET Customer->Contact VALID !Empty(Customer->Contact)
@ 4, 0 SAY "Address" GET Customer->Address
READ