Jedan od najčešće korišćenih složenih tipova podataka jeste nizovni tip. Niz je konačan i uređen skup podataka istog tipa koje se nazivaju elementi niza. Elementima niza se pristupa preko zajedničkog imena (naziv nizovne promenljive) i fiksnog broja indeksa. Stoga se niz može posmatrati kao grupa indeksiranih promenljivih istog tipa sa zajedničkim imenom.
U zavisnosti od broja indeksa niz može biti jednodimenzionalan i višedimenzionalan, a broj indeksa koji se koristi za pristupanje elementu se naziva dimenzija niza. Ovde će biti reči isklxučivo o jednodimenzionalnim nizovima.
U slučaju jednodimenzionalnih nizova veličina niza se poistovećuje sa brojem njegovih elemenata, a indeks elementa se svodi na redni broj elementa u nizu. Pritom prvi indeks može biti nula (podrazumevano) ili jedinica. Ukoliko se na početku modula koristi naredba
Option Base 1
redni broj prvog elementa svakog deklarisanog niza u tom modulu biće 1.
Nizovi mogu biti statički i dinamički. Kod statičkih nizova veličina niza mora biti poznata pre kompilacije, tj. u deklaraciji statičkih nizova veličina mora biti konstantna vrednost (literal ili imenovana konstanta). U navedenom primeru i prviNiz i drugiNiz su deklarisani kao statički nizovi od po 10 elemenata:
Const MAX_VELICINA As Integer = 10 Dim prviNiz(10) as String 'niz od 10 elemenata tipa String Dim drugiNiz(MAX_VELICINA) as String 'niz od MAX_VELICINA elemenata tipa String
Dinamički nizovi se deklarišu bez navođenja veličine, a tokom izvršavanja programa se može zadati njihova veličina primenom naredbe ReDim:
Dim dinNiz() as String … 'n je celobrojna promenljiva dobijena nekim izračunavanjem Redim dinNiz(n)
Elementu niza se pristupa preko imena nizovne promenljive i indeksa. Npr.
Dim niz(10) as Integer 'niz od 10 elemenata tipa Integer (tj. celobrojni niz od 10 elemenata) niz(5) = 16 'inicijalizacija 5. elementa niza (ako je Option Base 1) x = 2 * niz(4) + 1 'element niza se koristi u izrazu kao bilo koja celobrojna vrednostPri radu sa nizovima najčešće se koriste petlje pošto je to najefikasniji način da se nad svakim elementom niza obavi isti niz radnji (npr. For petlja za inicijalizaciju i ispisivanje elemenata niza).
U slučaju da se u izrazu pojavljuju operandi različitih tipova, postavlja se pitanje kog tipa će biti rezultat, tj. vrednost celokupnog izraza. Takođe je potrebno razjasniti kako se izvršava naredba dodele u slučaju da su tip promenljiva sa leve strane dodele (znaka jednakosti) i tip izraza sa desne strane znaka jednakosti različiti. Npr.
Dim ix As Integer, ry As Double, s As String 'operandi Dim iz As Integer, iv As Integer, rw As Double, s2 As String 'rezultati Dim poruka As String ix = 5 'inicijalizacija ry = 4.3 'inicijalizacija s = "123" 'inicijalizacija iz = ix * ry ' 5 * 4.3 => 5.0 * 4.3 => 21.5 => 21 rw = ix * ry ' 5 * 4.3 => 5.0 * 4.3 => 21.5 s2 = s & ix ' "123" & 5 => "123" & "5" => "1235" iv = ix + s ' 5 + "123" => 5 + 123 => 128 MsgBox ix + s ' 5 + "123" => 5 + 123 => 128 => "128" s = "a123" iv = ix + s ' Greška!! "a123" ne može da se konvertuje u broj MsgBox ix + s ' Greška!! "a123" ne može da se konvertuje u broj s = "123.4" rw = ix + s ' ' 5 + "123.4" => 5 + 123.4 => 5.0 + 123.4 = 128.4 iv = ix + s ' ' 5 + "123.4" => 5 + 123.4 => 5.0 + 123.4 = 128.4 => 128 MsgBox ix + s ' 5 + "123.4" => 5 + 123.4 => 5.0 + 123.4 = 128.4 => "128.4"
Navedeni primeri pokazuju da se podrazumevaju pravila poput:
Za slučaj String + Integer vidimo da rezultat zavisi od vrednosti tipa String:
Ovakva podrazumevana pravila se još nazivaju pravila implicitne konverzije tipova. Iako deluje da je zahvaljujući njima sintaksa jednostavnija, višestruke "skrivene" konverzije u izrazu mogu dovesti do grešaka koje se teško otkrivaju. Osim toga potrebno je pamtiti i mnogobrojne izuzetke od pravila. Stoga je bolje eksplicitno izvršiti konverziju kako bismo bili sigurni u tip izračunate vrednosti primenom funkcija za za eksplicitnu konverziju tipova:
s = "123.4" iv = CInt(s) + ix ' CInt("123.4") + 5 => 123 + 5 => 128 MsgBox CDbl(s) + ix ' CDbl("123.4") + 5 => 123.4 + 5 => 128.4 => "128.4" 'CInt('a123') i CDbl('a123.4') prijavljuju grešku!