Odre?ivanje opsega i inicijalizacija promenljivih
Razlike izme?u jezika VB6 i VB .NET
isual Basic .NET je najznačajnija nadogradnja jezika Basic još od doba kada je GW-Basic uznapredovao u Visual Basic 1.0. Kao i svaka druga potpuna novina, i ova donosi promene koje su napravljene sa namerom da vam olakšaju život, mada u početku izgleda kao da ga otežavaju. To će se desiti većini korisnika prilikom prelaska na VB .NET. Jedan od problema predstavlja i to što nije u pitanju samo prelazak na novi jezik, već i na novu platformu u .NET Framework-u. Sve što ste u proteklih četiri-pet godina naučili sa Windowsom DNA, COM-om i ASP-om sada se menja i prelazi se na nov način pisanja aplikacija. Kada sam prvi put video VB .NET, izgledao mi je čudno i nelogično; tada sam još uvek razmišljao kao VB6 projektant. Nisam razumeo zašto su svi primeri izgledali kao konzolne aplikacije; tako nešto nisam nikada radio u VB6. Teško sam savla?ivao nove pojmove klasa i princip datoteka za podršku kada sam otkrio gde odlazi sav kôd koji pišem. Brinulo me je učenje SOAP-a i XML-a, pošto se oni javljaju svuda u .NET-u. Me?utim, kao i uvek, odnekle se moralo početi. I tako, upoznavši se prvo sa promenama do kojih je došlo, a zatim pisanjem kratkih aplikacija, brzo sam shvatio da ne postoji jednostavnija stvar od VB .NET-a. Odatle ćemo početi ovo poglavlje.
Č;itajući ovu knjigu videćete da VB kôd sada neosporno drugačije izgleda. Kada počnete sa pisanjem koda, shvatićete da to nije ništa strašno. Izmene u sintaksi imaju smisla, a funkcije kao što je automatsko kompletiranje, automatske liste i dinamički sistem za pomoć čine da je pisanje koda lakše nego ikada do sada. Prva stvar koju treba da dobro upoznate su naredbe i funkcije koje su zastarele ili one koje se više ne koriste, kao i naredbe koje izgledaju isto, ali im je značenje drugačije.
.NET Framework ima klase koje definišu (obrazuju) Common Type System (sistem zajedničkih tipova) koji omogućava jednoobraznost tipova podataka u svim aplikacijama bez obzira na .NET jezik kojim su pisane. Iz tog razloga Visual Basic je morao da pretrpi izmene u oblasti tipova podataka koje podržava, kao i u numeričkim opsezima postojećih tipova podataka. U sledećim odeljcima objasnićemo te razlike.
U poglavlju 5 naći ćete kompletan opis svih tipova podataka i njihovih opsega.
U verziji VB6 podaci tipa Variant bili su podrazumevani univerzalni tip podataka; u VB .NET-u njih je zamenio tip podataka Object . Podrazumevana vrednost podataka tipa Object je Nothing (ništa), dok je podrazumevana vrednost podataka tipa Variant bila Empty (prazno).
U verziji VB6 podaci tipa Integer (ceo broj) bili su 16-bitni brojevi koji su mogli imati vrednosti od -32 767 do 32 767. Tip Integer u VB .NET-u zamenjen je tipom Short kao 32-bitnim brojem, a podaci tipa Integer sada mogu imati vrednosti od -2 147 483 648 do 2 147 483 648. Podaci tipa Long sada su 64-bitni brojevi. Za 32-bitne operacije najefikasnije je koristiti podatke tipa Integer .
Tip podataka Currency je u VB .NET-u zamenjen tipom Decimal . Pošto podaci tipa Decimal obezbe?uju tačnije zaokruživanje brojeva, tip podataka Decimal je pogodan za operacije sa novčanim iznosima. Podaci tipa Currency bili su 64-bitni podaci sa 4 cifre desno od decimalnog zareza. Nov tip podataka, Decimal je 96-bitni pozitivan ili negativan broj koji može imati 28 decimalnih mesta.
Podaci tipa Date (datumski podaci) sada su 64-bitne celobrojne vrednosti, dok su se u verziji VB6 koristili 64-bitne vrednosti tipa Double . Za prilago?avanje koda koji je radio sa podacima tipa Date na raspolaganju su vam funkcije ToOADate i FromOADate koje obavljaju pretvaranje izme?u podataka tipa Double i Date .
Znakovni nizovi fiksne dužine više ne postoje. U SDK dokumentaciji stoji da će ta mogućnost biti dodata u narednim verzijama. Postoji nivo kompatibilnosti koji omogućava rad sa znakovnim nizovima fiksne dužine, ali CLR ih ne podržava direktno.
Jedan od najvećih problema prilikom Microsoftove najave izmena u jeziku VB .NET bila je donja granica nizova. Od samog početka Visual Basic je dopuštao da donja granica niza bude 0 ili 1. Naredba Option Base , koja više ne postoji, odre?ivala je da li će niz biti obra?ivan kao niz čiji elementi počinju od nule ili od 1. Microsoft je konačno odlučio da će svi nizovi kao podrazumevanu donju granicu imati 0, što znači da se mora preraditi postojeći kôd u kome se koristi naredba Option Base 1 kako bi se obezbedilo da ne do?e do gubljenja ili oštećenja podataka, pošto će veličina niza biti različita.
Nizovi se više ne mogu definisati kao nizovi fiksne dužine zadavanjem donje i gornje granice pri projektovanju. Sada se zadaje samo gornja granica niza, dok se kao donja granica podrazumeva nula.
Dim x(0 to 5) as String ' niz od 6 elemenata
U verziji VB6, vrednost za True je -1. Isto važi i za VB .NET. Me?utim, u Common Language Runtime vrednost za True je 1. Kada se logičke promenljive prosle?uju izme?u različitih jezika u okviru .NET Frameworka, True će imati vrednost -1 u jeziku VB6 i vrednost 1 u svim ostalim jezicima.
Neke od najvažnijih jezičkih izmena u VB .NET-u nastale su u kategoriji operatora. U tabeli 2-1 nalazi se spisak novih operatora koji za programere znače manje pisanja pri radu sa operatorima. Obavezno pogledajte poglavlje 5 u kome su detaljno opisani svi operatori i dati sjajni primeri svega što sa njima možete da uradite.
Dodati su novi operatori AndAlso i OrElse koji upravljaju prespajanjem. Svi drugi operatori ostaju isti. Prespajanje znači da kada prvi deo izraza kao rezultat ima vrednost False, ostatak izraza se zanemaruje, a kao rezultat se dobija vrednost False.
VB .NET više ne podržava tipove podataka koje korisnik definiše (engl. user defined type, UDF). Njih su zamenile strukture, koje imaju sličnu sintaksu, ali su mnogo moćnije i fleksibilnije.
Prosle?ivanje Null vrednosti ne postoji. Tipovi koji imaju vrednost null prosle?uju se funkcijama kao tip podataka DBNull . Null vrednosti se više ne ispituju naredbom IsNull . Nju je zamenila naredba DBNull .
Naredba IsEmpty više ne postoji. U verziji VB6, vrednosti NULL i Empty mogle su da se koriste za proveru inicijalizovanosti promenljive ili da li promenljiva sadrži neki podatak. Pošto NULL i Empty više ne važe, funkcija IsEmpty je postala izlišna. Za ovu vrstu provere sada se koristi rezervisana reč nothing .
Promenljive se mogu deklarisati u okviru bloka naredbe i tada su dostupne samo u tom bloku. U ovom primeru promenljiva intX dostupna je samo u naredbi If...End If , dok je promenljiva intY dostupna u celoj proceduri.
Promenljivama sada možemo dodeljivali vrednosti u istom redu programskog koda u kome su deklarisane.
Objekti mogu da se instanciraju i pomoću rezervisane reči New u istom redu programskog koda u kome je deklaracija objekta. Ovo je potpuno suprotno verziji VB6 u kojoj to nije bilo dozvoljeno zbog načina na koji je COM morao da obezbedi da objekat bude formiran pre nego što počne da koristi njegova svojstva i metode.
Sada možete da u istom redu programskog koda deklarišete više promenljivih istog tipa. Pogledajte sledeći kôd:
Dim str1, str2, str3 as String
U verziji VB6, promenljive str1 i str2 bile bi promenljive tipa Variant , a promenljiva str3 tipa String . U jeziku VB .NET sve tri promenljive su tipa String .
Promenljive u nizu ParmArray više se ne prosle?uju po referenci ByRef . Sada se promenljive ParmArray prosle?uju po vrednosti, a funkcija koja ih prima može da menja vrednosti niza ParmArray kao što to čini sa običnim nizovima.
Jedan od najvećih problema prilikom prelaska na VB .NET biće učenje zamena za postojeće funkcije. Ovaj odeljak opisuje specifične funkcije koje su dobile novu sintaksu. U poglavlju 8 detaljno ćemo se upoznati sa radom sa datumima i vremenom, što je veoma važno pošto su to standardne funkcije sa kojima ćete stalno raditi.
U verziji VB6 funkcije Date$ i Time$ daju znakovni niz koji predstavlja tekući datum i vreme. One su u jeziku VB .NET zamenjene metodama DateString i TimeString .
Funkcije Atn , Sgn i Sqr zamenjene su metodama Atan , Sign i Sqrt klase System . Math .
Funkcija MsgBox zamenjena je metodom Show klase MessageBox.
MessageBox.Show "VB .NET je bolji"
Iako je funkcija MsgBox i dalje podržana pomoću biblioteke za kompatibilnost, trebalo bi da koristite nove klase MessageBox pošto je funkcija MsgBox samo omotač koji poziva klase MessageBox .
Pošto VB .NET u potpunosti podržava objektno orijentisane mogućnosti, došlo je do bitnih promena u opsezima procedura, povratnim vrednostima i tipovima procedura koje možete da koristite. Pored ovde pomenutih promena, u poglavljima 8 i 14 naći ćete detaljnije objašnjenje svega što možete da radite sa procedurama u jeziku VB .NET.
Pri pozivanju procedura, bilo tipa Sub ili funkcija, spisak argumenata se uvek piše izme?u zagrada, čak i ako procedura nema nijedan argument.
Statičke procedure više ne postoje. Ako ste koristili statičke procedure, trebalo bi da ih zamenite sa standardnim procedurama, a promenljive unutar statičkih procedura definišite kao Static .
Podrazumevano ponašanje za ByVal i ByRef je promenjeno. U jeziku VB6 podrazumevani način prosle?ivanja parametara bio je ByRef . U VB .NET-u, podrazumevani mehanizam prosle?ivanja promenljivih procedurama je ByVal . Naredba As Any u naredbi Declare poziva API funkcije, više ne postoji.
Sintaksa za deklarisanje procedura svojstava izmenjena je zbog prilago?avanja objektno orijentisanim mogućnostima VB .NET-a. U poglavlju 14 dati su primeri upotrebe svojstava i pokazana specifična sintaksa koju ćete koristiti.
Rezervisana reč Let se više ne koristi. Kada se koriste Set i Get , opseg važenja svojstva mora da bude isti u VB .NET-u. U verziji VB6 opseg procedure Get mogao je da bude Private , dok je opseg procedure Set mogao da bude Public . To se lako uočava u načinu na koji svojstvo mora da bude deklarisano.
Nijedna vrsta objekata više nema podrazumevana svojstva. U verziji VB6, klase koje ste sami napisali mogle su da imaju podrazumevana svojstva, kao i vizuelni objekti, na primer polja za tekst, obične liste i padajuće liste.
Promene u upravljanju tokom izvršavanja programa nisu tako drastične. Najveća promena je rezervisana reč GoSub , ali, kako je većina projektanata ne koristi još od verzije VB 2.0, nikome neće zaista nedostajati. Naredba Return je novi način za prosle?ivanje povratnih vrednosti iz funkcijskih procedura.
Konstrukcija While...Wend više ne postoji. Nju je zamenila konstrukcija While...End While .
Komanda GoSub...Return za prelaženje u drugu proceduru iz tekuće, više ne postoji. Sledeći kôd više ne važi:
Aplikacije u kojima se koriste obrasci Windows Forms upotrebljavaju potpuno drugačiji podsistem za iscrtavanje obrazaca na stranici, zbog čega ćete morati da se lišite odre?enih mogućnosti koje ste možda koristili za prikazivanje informacija na obrascu. Jedna od najkorisnijih novih mogućnosti u VB .NET-u je IDE za dodavanje menija na obrasce i kontrolnih objekata za štampanje obrazaca koji omogućavaju potpuni prikaz slike pre štampanja u aplikacijama u kojima se koriste obrasci tipa Windows Forms.
Metoda PrintForm više ne postoji. .NET Framework ima nov podsistem za štampanje, sa funkcijama kao što je Print Preview (prikaz pre štampanja), koje omogućavaju robustnije rukovanje slikama trenutnog stanja ekrana i štampanjem obrazaca.
Ove metode u VB .NET-u više ne postoje. Grafičke metode verzije VB6 su zamenjene sa imenskim prostorom System. Drawing koji za crtanje koristi nove klase GDI+.
Svojstvo Caption kontrolnih objekata tipa natpis i obrazaca više ne postoji, a zamenjeno je svojstvom Text .
Fontovi na VB6 obrascima mogli su da budu bilo koji fontovi koje podržava Windows sistem. Obrasci tipa Windows Forms podržavaju samo True Type i Open Type fontove.
U verziji VB6 više kontrola sa istim imenom, a različitim vrednostima svojstva Index moglo je da deli istu proceduru za obradu doga?aja. U VB .NET-u kontrole se ne mogu grupisati u nizove, ali se ista procedura može koristiti za više kontrola pomoću rezervisane reči Handles .
U verziji VB6, meni koji je dodat obrascu može da se koristi i kao glavni meni u gornjem redu obrasca i kao kontekstni meni koji se pojavljuje nakon pritiska na desni taster miša. U VB .NET-u meni može da bude glavni ili kontekstni, ali ne istovremeno i jedno i drugo.
Mehanizam DDE više nije podržan. Aplikacije mogu me?usobno da komuniciraju pomoću drugih mehanizama, kao što su OLE, Web Services ili unutarprocesne komponente.
Kada započnete novu Windows Forms aplikaciju, na paleti sa alatkama videćete neke nove zanimljive kontrolne objekte. Kontrolni objekti koje ćemo nabrojati u ovom odeljku više ne postoje i oni se ne vide na paleti sa alatkama.
Kontrolni objekat OLE Container koji je omogućavao dodavanje OLE objekata na obrasce više ne postoji.
Mnogi od šablona za aplikacije koje ste koristili u prethodnim verzijama jezika VB više ne postoje, a za neke aplikacije čak nema ni načina za nadogradnju.
Aplikacije tipa Webclasses više nisu podržane. Za pisanje Web aplikacija trebalo bi da se koriste aplikacije tipa Web Forms. Moć i funkcionalnost koje obezbe?uju aplikacije tipa Web Services i ASP .NET pružiće vam mnogo više fleksibilnosti nego što su aplikacije tipa Webclasses bile u stanju da pruže.
Aplikacije tipa ActiveX Document više nisu podržane. Naravno, možete napisati aplikaciju tipa Windows Forms koja se izvršava unutar čitača kao bezbedan kôd i tako imitirati aplikaciju tipa ActiveX Document, pri čemu ćete zadržati potpuni objektni model aplikacije tipa Windows Forms i podršku za kontrolne objekte.
DHTML aplikacije više nisu podržane. Za pisanja Web aplikacija treba koristiti aplikacije tipa Web Forms.
ADO .NET je nova biblioteka za pristup podacima iz bilo kog izvora. Više od obične nadogradnje, to je stvarno iznova napisana biblioteka u odnosu na prethodnu verziju ADO-a koju ste možda koristili. Veliki problem za nadogradnju postojećih aplikacija na VB .NET jeste uklanjanje direktnih veza izme?u kontrolnih objekata i podataka. Ukoliko vam u nadogradnji pomaže čarobnjak Upgrade Wizard, bićete upozoreni na kôd koji se ne može prepraviti ako ste na bilo koji drugi način koristili povezivanje podataka sa kontrolnim objektima.
Visual Basic je oduvek bio u samom vrhu po podršci za otklanjanje grešaka. Metoda Debug.Print je zamenjena, ali to nije ništa u pore?enju sa svim novim mogućnostima koje otklanjanje grešaka čine lakšim nego ikada. U poglavljima 18 i 42 opisane su metode za otklanjanje grešaka u Windows i Web aplikacijama.
Metoda Debug.Print je zamenjena metodom Debug.Write ili Debug.Writeline . Klasa Debug obezbe?uje potpun skup metoda i svojstava koja pomažu u otklanjanju grešaka u kodu.
Debug.Writeline Err.Number ' sadrži i znak za prelazak u novi red
Debug.Write Err.Number ' ne sadrži znak za prelazak u novi red
U ovom poglavlju upoznali smo se sa razlikama izme?u jezika VB6 i jezika VB .NET. Većina velikih promena odnose se najverovatnije na retko korišćene pozive funkcija, me?utim, prilikom nadogradnje moraćete da znate šta je dovelo do greške u kodu.
VB .NET sadrži imenski prostor Microsoft.VisualBasic koji obuhvata većinu nasle?enih funkcija jezika VB6 koje su i dalje podržane u .NET okruženju, me?utim, trebalo bi da izbegavate upotrebu imenskog prostora Microsoft.VisualBasic i da umesto njega koristite imenski prostor System koji će učiniti da vaš kôd bude kompatibilan sa svim .NET jezicima.