BASIC

**BASIC** (nuo 'B**eginner’s **A**ll – purpose **S**ymbolic **I**nstruction **C*'ode*) – programavimo kalbų šeima. Sukurta kaip lengvai naudojama programavimo kalba ji buvo plačiai naudojama kompiuteriuose devintame XX a. dešimtmetyje ir išlieka populiari iki šių dienų su daugeliu išvystytų kalbos atmainų.

## Istorija
Kalbą 1963 metais aprašė Dartmuto koledžo profesoriai Džonas Dž. Kemenis (*John G. Kemeny*) ir Tomas E. Kurcas (*Thomas E. Kurtz*), o įgyvendino jų vadovaujami koledžo studentai (vėliau šis įgyvendinimas pradėtas vadinti *Dartmouth BASIC*).

Pagrindinė kalbos paskirtis – sudaryti galimybę studentams paskirstyto laiko kompiuterio terminaluose rašyti programas. Kitaip nei iki tol kurtos kalbos, BASIC labiau orientuota į rašymo paprastumą, o ne vykdymo greitį.
Pirminiame BASIC projekte apibrėžta, kad kalba turi būti:
* paprasta pradedančiam vartotojui,
* bendros paskirties,
* su galimybe papildyti pažangesnėmis savybėmis,
* interaktyvi,
* pateikianti aiškius ir suprantamus klaidų pranešimus,
* greita vykdant nedideles programas,
* nereikalaujanti kompiuterio techninės įrangos žinių,
* atskirta nuo operacinės sistemos.

Kalba iš dalies rėmėsi FORTRAN II ir ALGOL 60 kalbomis, pritaikant paskirstyto laiko programavimui (kai vienas kompiuteris aptarnauja daugelį terminalų), vėliau pridedant teksto apdorojimo ir matricų aritmetikos galimybes. Pirmoji BASIC versija įgyvendinta GE-265 stotyje, palaikančioje daug terminalų, tai buvo kompiliuojama kalba.

Kalba sparčiai išpopuliarėjo aukštosiose mokyklose, įgyvendinta nemažai versijų, BASIC pritaikyta naujiems minikompiuteriams, vėliau ir mikrokompiuteriams. 1975 metais Polas Alenas ir Bilas Geitsas sukūrė *Altair BASIC* interpretatorių, kuris tapo pirmąja „Microsoft“ kompanijos sukurta įranga. Vėliau BASIC tapo bazine Apple II kompiuterių kalba. Aštuntojo dešimtmečio pabaigoje – devintojo pradžioje dauguma namų kompiuterių gamintojų pradėjo diegti BASIC kalbą kaip standartinę.

XX amžiaus devintojo dešimtmečio antroje pusėje kompiuteriams tampant vis sudėtingesniais, diegiant naujų savybių, BASIC kalba vis mažiau tiko visaverčiam programavimui. Po truputį BASIC kalbą pradėjo keisti kitos, pažangesnės kalbos.

Ir vėliau naudotos ir kurtos įvairios BASIC versijos, taip pat sukurtos kelios naujos pažangios kalbos, kurių sintaksė remiasi BASIC kalbos sintakse:
* 1991–2002 metais „Microsoft“ kurta Visual Basic (nuo 2002 metų – VB.NET), kuria kuriamos programos sudaro didesnę dalį visų komercinių programų.
* Visual Basic for Applications (VBA) – skirta kai kurioms Microsoft Office paketo programoms kaip skriptų kalba.
* VBScript interpretatorius, kuris gali būti naudojamas Internet Explorer naršyklėje vietoje JScript

## Vartotojo sąsaja
Skirtingai nuo daugelio kitų programavimo kalbų, BASIC programos vykdymo posistemė kartu buvo ir vartotojo sąsaja, neskirianti programos vykdomųjų sakinių nuo vartotojo komandų. Įvesta eilutės numerį turinti komanda tapdavo programos dalimi, o be eilutės numerio – buvo įvykdoma nedelsiant. Eilučių trynimo, programos paleidimo, programos eilučių skaitymo iš išorinių atminties įrenginių bei įvairios kitos panašios komandos prireikus galėjo būti vykdomos ir kaip programos dalis. Iš kitos pusės, tiesiogiai renkami ir iškart vykdomi programos sakiniai leido naudoti sistemą kaip gana patogų kalkuliatorių.

Paprastai naujoje programoje eilutės buvo numeruojamos dešimties intervalu. Nauja eilutė buvo įterpiama tiesiog suteikiant jai tarp dviejų gretimų eilučių numerių esantį naują numerį. „Klasikiniame“ BASIC eilutės turinys galėjo būti pakeistas tik surenkant naują tą patį numerį turinčią eilutę. Norint vienoje vietoje įterpti daugiau devynių eilučių, tekdavo pernumeruoti programą, pakeičiant ir nuorodas GOTO bei GOSUB sakiniuose. Vėlesnės versijos turėjo automatiniam pernumeravimui skirtą komandą RENUM (arba RESEQ) bei komandą EDIT redaguoti esamai eilutei neperrenkant jos visos iš naujo.

## Sintaksė
BASIC sakiniai baigiami (atskiriami) perkeliant į kitą eilutę arba dvitaškiu (:). Jei sakinys tęsiasi per kelias eilutes, kiekvienos eilutės (išskyrus paskutiniąją) gale dedamas eilutės pratęsimo simbolis (_).

Minimaliai BASIC sintaksei užtenka LET, PRINT, IF ir GOTO komandų, naudojant tik šias valdymo struktūras kompiliatoriui nereikalingas stekas. Kompiliatoriuose, naudojančiose steką, galima pridėti ciklus bei GOSUB komandą. Turint tokį komandų rinkinį, eilutės turi būti numeruojamos.

Kai kurie vėlesni BASIC kalbos dialektai atsisakė eilučių numeravimo ir pridėjo kitoms kalboms (Pascal, C) būdingas valdymo struktūras `Repeat… Loop Until`, `While`, `Select… Case`

Moderniausios BASIC kalbos (pavyzdžiui, Visual Basic nuo 4 versijos) papildytos ir objektinėmis savybėmis, pavyzdžiui, `For Each… Next` valdymo struktūra, leidžiančia cikle perrinkti rinkinio ar masyvo elementus, taip pat paveldėjimu.

Atminties valdymas yra paprastas – dažniausiai naudojama šiukšlių surinkimo technologija.

BASIC kalboms nebūdingos standartinės išorinės bibliotekos (kaip C kalboje), tačiau kompiliatoriuje yra įdiegtos standartinės matematinės, teksto manipuliavimo ir kitos svarbiausios funkcijos. Dalis BASIC dialektų neleidžia rašyti funkcijų ar procedūrų, šiose kalbose programos eiga kontroliuojama gausiai naudojamais GOTO sakiniais. Dialektai, kuriuose įvesta GOSUB komanda, leidžia rašyti primityvias subprogramas. Kiti dialektai visiškai palaiko subprogramas ir funkcijas (kaip ir Pascal kalboje, subprograma, negrąžinanti reikšmės skiriama nuo funkcijų, gražinančių reikšmę).

### Duomenų tipai
Ankstyvosios BASIC versijos palaikė tik tekstinius ir skaitinius duomenų tipus, taip pat vienmačius ir dvimačius šių tipų masyvus. Skaičiams buvo naudojamas vienas – racionalaus skaičiaus tipas, o tekstiniams duomenims – dinaminio ilgio eilutės.

### Pavyzdžiai
Šie pavyzdžiai yra pateikti GW-BASIC dialektu, tačiau be jokių arba su labai menkais pakeitimais gali būti sukompiliuoti bet kokiu BASIC kompiliatoriumi.

Paprasčiausios programos pavyzdys:

```qbasic
10 PRINT "Sveikas, pasauli!"
20 END
```


Sudėtingesnės programos pavyzdys:

```qbasic
10 INPUT "Jūsų vardas: "; U$
20 PRINT "Labas, "; U$
30 INPUT "Kiek norėtumėte žvaigždžių: "; N
35 S$ = ""
40 FOR I = 1 TO N
50 S$ = S$ + "*"
55 NEXT I
60 PRINT S$
70 INPUT "Ar norite dar žvaigždžių? "; A$
80 IF LEN(A$) = 0 THEN GOTO 70
90 A$ = LEFT$(A$, 1)
100 IF (A$ = "T") OR (A$ = "t") THEN GOTO 30
110 PRINT "Viso geriausio ";
120 FOR I = 1 TO 200
130 PRINT U$; " ";
140 NEXT I
150 PRINT
```


## Šaltiniai