|
Exemple: Public Const text1 = "text public"
|
səhifə | 2/10 | tarix | 03.11.2017 | ölçüsü | 0,98 Mb. | | #29921 |
| Exemple: Public Const text1 = "text public"
Public Const numar = 10
In interiorul procedurilor si claselor,toate constantele declarate cu
Const sunt private,chiar daca se utilizeaza si specificatorul Public.
Pentru a declara mai multe constante in aceeasi linie de cod,se pot utili-
za virgule despartitoare intre definitii.
EXEMPLU: Public Const text1 = "Text1",numar1 AS Double = 2.737693
Constantele declarate in afara procedurilor si functiilor au vizibilitate
in intregul modul in care au fost declarate.
Nu are rost sa declarati constante,decat daca o anumita valoare nume-
rica,sau o expresie oarecare se va repeta de mai multe ori in program.Cu
cat numarul de repetitii este mai mare,cu atat constanta respectiva va
optimiza programul prin reducerea memoriei consumate.Nu declarati astfel
de constante fara un scop precis definit ("de rezerva"),deoarece fiecare
astfel de data declarata va ocupa un tampon de memorie si va introduce in
program un numar suplimentar de operatii (scade viteza de executie).Cu
cat un program este mai complex,cu atat este mai dificila gestionarea
acestor tipuri de data.Daca doriti sa creati module independente,este
recomandabil sa utilizati doar constante cu vizibilitate locala,pentru a
evita eventualele conflicte de denumire,atunci cand includeti modulul
intr-un program mai mare.Deasemenea este bine sa evitati denumirea unor
astfel de constante cu x si y sau a,b si c.Pentru formularea numelui este
bine sa utilizati o denumire cat mai sugestiva,formata din cel putin
patru caractere alfanumerice,astfel ca in etapa de depanare sa fie cat
mai usor de evaluat semnificatia respectivei valori.
Atunci cand formati subclase sau cand dezvoltati un obiect oarecare,
inainte de a declara constante noi,verificati ce constante are clasa de
baza.In cele mai multe cazuri,exista o constanta implicita ce poate opti-
miza codul d-voasta.De cele mai multe ori,experienta unui programator se
reflecta si in modul in care isi alege constantele de lucru.Pentru un
program de uz restrans,constantele pot fi utilizate dupa liberul arbitru,
dar in cazul programelor comerciale si profesionale,fiecare constanta
trebuie aleasa cu maximum de atentie,astfel incat codul sa fie optimizat
la maxim si sa evite orice conflict posibil cu alte module si obiecte.
Exista si o directiva de precompilare denumita #Const.Aceasta comanda
se utilizeaza pentru a selecta conditional un anumit set de constante ce
urmeaza sa formeze mediul de operare,pentru o anumita aplicatie.Acest gen
de constante sunt intotdeauna Private pentru modulul in care au fost des-
carcate (nu au vizibilitate in afara modulului).
-7-
TIPURI DE DATA
In mod curent,Visual Basic recunoaste urmatoarele tipuri de data:
Boolean,Byte,Currency,Date,Decimal,Double,Integer,Long,Object,Single,
String,User-Defined si Variant.
Pentru o descriere amanuntita a fiecarui tip de data,consultati manua-
lul Help.Trebuie remarcat insa tipul Variant.Orice variabila declarata,
pentru care nu s-a specificat expres tipul de data va fi creata automat
cu tipul Variant.Acest tip de data,poate accepta date din orice alt tip
de data (cu exceptia String cu lungime constanta si User-defined),sau cu
alte cuvinte se adapteaza la formatul datelor.Acest tip de data,este cu
o origine ceva mai recenta si a inlocuit treptat majoritatea variabilelor
utilizate intr-un program,deoarece elimina interminabilele operatii de
conversie a datelor dintr-un format in altul.Utilizatorii de C si C++,pot
aprecia acest tip de data la justa valoare.
Pentru declararea unei variabile,se utilizeaza instructiunea Dim.Daca
se utilizeaza o variabila de tip Variant,aceasta va accepta formatul
tipului de data cu care a fost initializata.De exemplu,daca primeste o
valoare de tip integer,variabila va fi creata de tip integer.Daca insa
in cursul operatiilor efectuate valoarea variabilei iese in afara dome-
niului de reprezentare,formatul de data se va schimba automat la tipul
de data imediat urmator (cel care accepta valoarea actuala).
EXEMPLU: deschideti o fereastra noua si editati urmatoarea procedura
Private Sub Form_Click()
Dim valoare1
valoare1 = 3
Form1.Print valoare1 / 5
End Sub
In exercitiul de mai sus,valoare1 a fost declarata de tip Variant,deoarece
nu am specificat nici un format anume.In momentul initializarii a primit
valoarea 3 si a devenit de tip integer,dar in urma operatiei de impartire
a fost convertita automat la tipul double.
Pentru a declara o variabila cu un tip anume se va specifica prin AS
tipul de data dorit.
EXEMPLU: deschideti o fereastra noua si editati urmatoarea procedura:
Private Sub Form_Click()
Dim text2 AS String
text2 = "Textul declarat"
Form1.Print text2
End Sub
Executati fereastra cu Run si Start si executati un click in fereastra.
Pentru conversia unui tip de data in altul se pot utiliza urmatoarele
functii: CBool(),CByte(),CCur(),CDate(),CDbl(),CDec(),CInt(),CLng(),CSng()
CVar(),CStr().
De fapt,tipul Variant nu face decat sa apeleze o procedura in care sunt
apelate toate aceste functii pana cand returneaza un rezultat exprimabil.
Astfel,indiferent de tipul initial al datei,tipul Variant va apela proce-
dura de control si va returna un rezultat reprezentabil.Pentru a putea
evita erorile de executie determinate de o incompatibilitate de format,
puteti sa creati o astfel de procedura de conversie automata,prin care
valoarea ce a determinat eroarea sa fie convertita instantaneu la un
format de data reprezentabil (procedura de tratare a erorii).
-8-
Un alt tip de data mai special,este tipul user-defined (definit de
utilizator).Acest tip de data se formeaza cu ajutorul unei instructiuni
TYPE si poate fi declarat doar la nivel de modul (nu se poate declara in
interiorul unei proceduri).Daca modulul respectiv este o clasa sau un
obiect,tipul de data trebuie sa fie precedat de specificatorul Private.
Se poate forma un astfel de tip de data,utilizand orice combinatie din
celelalte tipuri de data,pentru a forma structuri mai complexe ca tip,
asemenatoare cu cele de tip RECORD sau STRUCT.Pentru a apela unul dintre
membrii tipului de data se va utiliza operatorul punct(.),la fel ca si
in cazul obiectelor.
EXEMPLU: deschideti o fereastra noua si editati urmatorul cod:
Private Type elev
Nume As String
Prenume As String
Varsta As Integer
End Type
Private Sub Form_Click()
Dim data1 AS elev
data1.Nume = "Ionescu"
Form1.Print data1.Nume
End Sub
Observati ca tipul de data trebuie declarat in afara procedurii ce defi-
neste evenimentul Click.Apoi,se declara o variabila din tipul respectiv
si se atribuie valori sau se efectueaza operatiile dorite.
Pentru aplicatiile uzuale de mici dimensiuni,este simplu si practic sa
utilizati tipul Variant.Pentru aplicatiile specifice,tipul de data se va
alege in functie de necesitatile hardware sau software de moment.
EXEMPLE: -daca doriti sa creati o aplicatie numerica prin care comunicati
cu un terminal extern dotat cu procesor pe 8 biti (de exemplu un aparat
telefonic sau un aparat casnic),atunci este imperios necesar sa utilizati
tipul Byte (care ocupa 8 biti de memorie si accepta valori intre 0-255).
-daca doriti sa creati o aplicatie numerica in care utilizati
si valori numerice extrem de mari,va trebui sa alegeti unul dintre tipu-
rile de data Decimal,Double sau Long.
-daca doriti sa creati o aplicatie de tip multitasking,in care
grupati mai multe semnale intr-un format mai mare,puteti grupa de exemplu
doua mesaje de tip Integer (2 bytes= 16 biti) intr-un semnal de 32 de biti
-daca doriti sa utilizati semnale neobisnuit de lungi,alegeti
tipul string (mesajul poate avea 10 bytes + pana la 2 miliarde de biti)
-daca doriti sa utilizati tipuri de date variabile,utilizati
tipul Variant (ocupa 22 bytes + lungimea sirului)
Cu cat tipul de data utilizat este mai mic,cu atat intarzierea pentru
fiecare operatie este mai mica.Astfel,valoarea 1 codificata sub forma de
Byte se executa de 22 de ori mai repede decat valoarea 1 codificata sub
forma de variabila de tip Variant.Atunci cand aplicatia proceseaza mai
multe milioane de astfel de date,diferenta de durata a executiei devine
din ce in ce mai semnificativa.
Considerentele software,depind doar de celelalte elemente din program.
Exemplu: -doriti sa utilizati un modul de program mai vechi,in care date-
le sunt preluate intr-un tampon de memorie cu un anumit format (exemplu:
16 biti).Trebuie sa utilizati date reprezentate in formatul respectiv.
-9-
COMENZI - singurele comenzi utilizate in limbajul BASIC sunt directivele
de precompilare #Const si #If...Then...#Else.Directivele de precompilare,
se utilizeaza pentru a putea selectiona pentru compilare doar anumite
blocuri de cod,in functie de o anumita conditie precizata prin #IF.Cel
mai cunoscut exemplu de acest gen,este in cazul programelor ce incarca
blocuri diferite de cod in functie de tipul sistemului de operare.De
exemplu,pentru Win 3.1 se utilizeaza constanta Win16,iar pentru Windows
'95 se utilizeaza constanta Win32.Aceste constante nu pot fi resetate si
se pot utiliza pentru a selecta blocurile de cod ce urmeaza sa fie incar-
cate conditional pe tipul respectiv de platforma.
EXEMPLU: #If Win32 Then
......primul grup de coduri
#Else
.....grupul alternativ de coduri
#End If
FUNCTII -Visual Basic grupeaza un numar destul de mare de functii pre-
definite.Functiile predefinite contin cate un set de instructiuni si
returneaza o anumita valoare.Se pot grupa in functie de utilitatea lor
in: functii matematice,functii de conversie,functii de sistem,functii
financiare,functii pentru operatii cu datele calendaristice,functii
pentru operatii cu datele de tip ora,minut secunda si functii pentru ope-
ratii asupra sirurilor de caractere.In manualul Help,functiile sunt ordo-
nate alfabetic,impreuna cu o descriere destul de elocventa.Nu este nece-
sara o descriere suplimentara,dar trebuie mentionat faptul ca toate aceste
functii se pot utiliza si in ecuatii,unde vor fi inlocuite in mementul
executiei,prin valoarea pe care o returneaza(spre deosebire de proceduri).
EXEMPLU : deschideti o fereastra noua si editati un cod de genul:
Private Sub Form_Click()
Dim calcul1 As Double
calcul1 = (Sin(3.72) + Cos(3.72))/Sin(1.43)
Form1.Print "Rezultatul calculului ="
Form1.Print calcul1
End Sub
In mod similar se va utiliza oricare dintre functiile pre-definite,fie
in interiorul unei ecuatii,fie pentru a returna o anumita valoare necesara
in secventa de operatii aflata in executie.Functiile se pot si intrica,
una in alta,de genul:
calcul1 = Sin(Cos(2.34))
Pentru a declara o functie noua,se va utiliza instructiunea Function.
In limbajul BASIC,Function este asimilata a fi o procedura,la fel ca si
Sub si Property,adica un grup de coduri ce pot fi executate prin apelarea
unui anumit identificator.Spre deosebire de celelalte proceduri,o functie
returneaza intotdeuna o anumita valoare si poate fi inclusa in ecuatii.
Pentru declararea functiei se pot utiliza si specificatorii Public,Private
Friend sau Static,pentru a reglementa domeniul de vizibilitate.In rest,
functia poate avea unul sau mai multe argumente si va returna corespunza-
tor acestor argumente,valori din tipul de data declarat.Optional,se poate
specifica daca argumentul va fi returnat prin referinta (adresa sa) sau
prin valoare (valoarea de moment).Implict toate functiile sunt publice.
Functia returneaza controlul la codul imediat urmator celui de apel.
-10-
Declararea unei functii se poate face numai la nivel de modul,adica
la nivel de clasa,structura sau interfata.Declaratia functiei nu se poate
face in interiorul unei alte proceduri sau functii,fila,bloc de instruc-
tiuni sau spatiu namespace.Dupa declarare,functia poate fi apelata fie
direct,fie cu ajutorul instructiunii Call.Daca functia se apeleaza direct,
prin numele sau,va returna o valoare,iar daca functia se apeleaza prece-
data de instructiunea Call,valoarea returnata va fi ignorata (functia se
va comporta la fel ca si o procedura).
EXEMPLU: deschideti o fereastra noua si editati urmatorul cod:
Function ArieCerc(ByVal r As Double) AS Double
ArieCerc = (3.141592 * r * r) / 2
End Function
Private Sub Form_Click()
Form1.Print "Aria cercului este:"
Dim raza,arie AS Double
raza = 137.73953
arie = ArieCerc(raza)
Form1.Frint arie
End Sub
In exemplul de mai sus,am declarat functia ArieCerc cu un parametru de
tip double prin care functia accepta valoarea dorita pentru raza cercului.
Functia returneaza o valoare tot de tip double,reprezentand valoarea cal-
culata pentru parametrul preluat.Observati ca functia a fost declarata in
afara procedurii Click() si apoi a fost apelata din interiorul procedurii.
In limbajul BASIC,deosebirea dintre o functie si o procedura nu este
atat de transanta ca si in alte limbaje de programare.Astfel,o functie
declarata cu Function poate functiona exact la fel ca si o procedura,daca
este apelata prin instructiunea Call.
EXEMPLU: deschideti o fereastra si editati codul:
Function EditareText()
Form1.Print "Prima linie de text."
Form1.Print "......"
Form1.Print "Ultima linie de text"
End Function
Private Sub Form_Click()
Call EditareText
End Sub
Aceasta situatie este oarecum confuziva,mai ales pentru incepatori.Pentru
a putea face o distinctie clara intre o functie si o procedura,este bine
sa retineti urmatoarele:
1.-o functie returneaza intotdeauna o valoare (chiar daca este ignorata)
2.-o functie poate fi utilizata intr-o expresie (in membrul drept)
3.-o functie se declara cu instructiunea Function... End Function
Dupa declarare,functia poate fi utilizata la fel ca si functiile pre-
definite,cu conditia sa fie apelata in spatiul de vizibilitate prevazut
prin declaratie.Daca acesta nu este specificat expres,functia va fi de tip
Public.
Functiile pot fi recursive,adica se pot auto-apela.Trebuie sa se evite
acest gen de situatie,deoarece se creaza o bucla infinita,in care proceso-
rul repeta acelasi set de operatii la infinit.
EXEMPLU: Functia1 apeleaza Functia2,care apeleaza Functia1...la infinit.
-11-
PROCEDURI - procedurile sunt secvente de instructiuni ce pot fi executate
grupat,sub forma de unitate distincta,prin apelarea unui identificator
comun (numele procedurii).In BASIC,procedurile frecvent intalnite pot fi
de tip Sub,Property sau Function.Tipul Function este un tip particular de
procedura (returneaza o valoare) si a fost prezentat mai sus.Tipul Sub,
este tipul cel mai comun de procedura si se utilizeaza pentru orice
grupare de instructiuni ce necesita sa fie executate impreuna.Tipul Pro-
perty este un tip particular de procedura si se utilizeaza pentru a orga-
niza un set oarecare de instructiuni in interiorul unei clase sau a unei
structuri.O procedura de tip Property include una dintre procedurile spe-
cifice Get sau Set,sau amandoua,si este specifica programarii orientate
spre obiect.
PROCEDURA SUB - se declara prin instructiunea Sub....End Sub.Pentru
a specifica spatiul de vizibilitate se pot utiliza specificatorii Public,
Private sau Friend.Procedura trebuie sa includa toate codurile executabile
fara sa apeleze la date,sau blocuri externe de cod.O procedura trebuie sa
fie declarata numai la nivel de modul.Nu se poate declara o procedura in
interiorul unei alte proceduri,sau functii.Pentru iesirea prematura din
procedura se poate utiliza cuvantul cheie Exit Sub.La fel ca si functiile
si procedurile pot accepta argumente,fie prin referita,fie prin valoarea
de moment,dar spre deosebire de functii nu returneaza valori.Prin urmare,
operatiile din procedura pot sa modifice valoarea parametrilor utilizati
ca argumente,dar nu pot sa returneze o valoare noua (creata in interiorul
procedurii).
La fel ca si functiile,procedurile sunt recursive,adica se pot apela
reciproc,la infinit.Pentru a evita o bucla infinita,trebuie ca una dintre
valorile din interiorul procedurii sa se modifice dupa fiecare aplel si
sa existe o conditie de iesire din bucla (de obicei cu IF ...si Exit Sub).
Este mai bine sa evitati recursivitatea,ori de cate ori este posibil.
In interiorul unei proceduri se pot utiliza atat variabile locale (cele
declarate in interiorul procedurii cu Dim) cat si variabile globale ce au
fost declarate Public,la nivel de modul.Atunci cand se utilizeaza atat
variabile externe cat si variabile locale,trebuie sa excludeti orice con-
flict generat de numele variabilei (in cazul in care au acelasi nume).
Pentru a apela o procedura,se utilizeaza identificatorul sau (numele).
O procedura poate fi apelata si cu ajutorul instructiunii Call.Daca se
apeleaza o procedura prin Call,atunci este obligatoriu sa includeti si
argumentele procedurii.Daca procedura se apeleaza doar prin nume,lista
de argumente este optionala.
EXEMPLU: deschideti o fereastra si editati urmatorul text:
Sub Calcul()
Dim xxx
For xxx = 0 To 10
Form1.Print xxx * xxx
Next xxx
End Sub
Private Sub Form_Click()
Calcul
End Sub
In exemplul de mai sus,Calcul este o procedura definita de utilizator,iar
Form_Click() este procedura atribuita evenimentului Click.
-12-
PROCEDURA PROPERTY - se utilizeaza pentru a crea proprietati specifice
unui anumit obiect.Exista trei instructiuni special concepute pentru
acest scop: Property Get,Property Let si Property Set ( in versiunile de
la Visual Basic 6.0 in sus,Let a fost inlocuit prin Set).Daca proprietatea
urmeaza sa fie de tip read-only se defineste numai cu Get,iar daca pro-
prietatea urmeaza sa fie de tip write-only se defineste numai cu Let.In
mod curent insa,proprietatile obiectelor pot fi rescrise sau citite la
discretie.Pentru acest scop,este necesar sa se utilizeze ambele instruc-
tiuni atunci cand se declara proprietatea respectiva.Exista un set de
reguli ce trebuiesc respectate atunci cand se declara o proprietate:
1.-parametrii instructiunilor Property Get,Property Let si Property Set
trebuie sa fie perfect compatibili.
2.Property Let trebuie sa contina un parametru in plus fata de Get,iar
tipul de data al acestui parametru trebuie sa corespunda cu cel returnat
de Property Get (trebuie sa poata accepta valoarea returnata)
3.Property Set trebuie sa contina un paramatru in plus fata de Get si
anume o data de tip Variant,Object sau numele unei clase de obiecte.
In rest,cele doua proceduri trebuie sa fie astfel inlantuite incat sa
se actualizeze reciproc.Ca rezultat,proprietatea obiectului va putea
Dostları ilə paylaş: |
|
|