2
Informacje wstępneBASIC (Beginners All-Purpose Symbolic Instruction Code)
Rok powstania: 1963 r.
Cel realizacji:nauczanie studentów programowania
umożliwienie programowania osobom nie zajmującym się programowaniem profesjonalnie
3
Informacje wstępne
VB (Visual Basic)
Rok powstania: 1991 r.
Cel realizacji:przystosowanie języka BASIC do programowania w środowisku wizualnym
umożliwienie łatwego tworzenia aplikacji dla środowiska Windows przez osoby nie zajmujące się profesjonalnym programowaniem
4
Informacje wstępne
VBA (Visual Basic for Applications)interpreter języka Visual Basic dołączony pierwotnie do aplikacji Microsoft Office
później również inne firmy komputerowe skorzystały z tego rozwiązania w swoich aplikacjach
Cel realizacji:samodzielne rozszerzania przez użytkownika funkcji aplikacji
łatwa automatyzacja pracy w danej aplikacji
5
Informacje wstępne
VB.NET (VisualBasic.NET)adaptacja języka Visual Basic do platformy .NET
ma funkcjonalność platformy .NET
Cel realizacji (platformy .NET):dostarczenie dla aplikacji standardowej funkcjonalności, niezależnej od wyboru języka kodu
zapewnienie przenośności między różnymi procesorami oraz wykorzystanie wszystkich możliwości procesora
zapewnienie przenośności między wersjami systemu
6
Ścieżki programowania
Algorytm
Kod źródłowy
Program w kodzie maszynowym
Interpreter
Kompilator
Krok I Ścieżka kompilacji(VB.NET)
Ścieżka interpretacji
(VBA)
Rozkazy do procesora
8
Uwagi co do notacji koduSłowa Kluczowe Języka Basic
słowa zastrzeżone, najczęściej oznaczają rozkaz, instrukcję lub oznaczenie typu danych
pozostałe fragmenty kodu
słowa niezastrzeżone, najczęściej nazwy stałych, zmiennych lub elementów strukturalnych (procedur, funkcji)
[w nawiasach kwadratowych]
opcjonalne fragmenty kodujeśli występują, to bez nawiasów!
{w nawiasach klamrowych}
alternatywne fragmenty kodu
przedzielane są znakiem alternatywy |, np. Option Base {0|1}
oczywiście w kodzie jedno z alternatywy, już bez {}
9
Struktura koduModuł
oddzielny funkcjonalnie fragment kodu programu zawierający własne deklaracje stałych, zmiennych, procedur i funkcji (również często typów wartości i klas)
Procedura zbiór instrukcji wykonywanych w całości poprzez jedno wywołanie
Funkcja procedura zwracająca wartość (jak zmienna, rezerwuje pamięć na jej przechowanie)
Instrukcja pojedyncza linia procedury lub funkcjiw języku Basic możliwe jest umieszczenie w linii kilku instrukcji (zazwyczaj prostych) oddzielonych :
10
Struktura modułuTrzy rodzaje modułów:
moduł klasy – zawiera definicję klasy, czyli szablonu obiektu; wszystkie procedury w nim zapisane są metodami obiektów tej klasymoduł formularza – zawiera kod formularza, czyli okna dialogowego; służy do projektowania własnych formularzymoduł kodu źródłowego – zawiera właściwy kod programu lub inne funkcje i procedury nie będące metodami (można np. cały zbiór takich funkcji i procedur zdefiniować w osobnym module)
Struktura: oprócz deklaracji procedur i funkcji moduł może na początku zawierać w pierwszych liniach deklaracje opcjiOption ExplicitOption Base 1a w kolejnych deklaracje zmiennych
11
ProceduryZalety stosowania procedur: Zalety stosowania procedur:
możliwość wielokrotnego użycia tego samego fragmentu kodu
większa przejrzystość koduDeklaracja procedury:
[Public|Private|Friend] Sub nazwa_proc([lista argumentów])deklaracje zmiennych lokalnych (jeśli są)kod procedury[Exit Sub]kod procedury
End Sub
W najprostszej postaci:Sub nazwa_proc()
kod proceduryEnd Sub
Wywołanie procedury:nazwa_proc [wart_arg1, wart_arg2, ...]
lubCall nazwa_proc[(wart_arg1, wart_arg2, ...)]
12
FunkcjeW odróżnieniu od procedur zwracają wartość.W odróżnieniu od procedur zwracają wartość.Deklaracja funkcji:[Public|Private|Friend] Function nazw_fun([lista argumentów])As typ
deklaracje zmiennych lokalnych (jeśli są)kod funkcjinazw_fun = wyrażeniekod funkcji[Exit Function]kod funkcjiEnd Function
W najprostszej postaci:Function nazw_fun()
kod funkcjinazw_fun = wyrażeniekod funkcji
End Function
Wywołanie funkcji:nazwa_zmiennej = nazw_fun[(wart_arg1, wart_arg2, ...)]
13
Zmienne
Zmienna:miejsca w pamięci (identyfikowane nazwą), w którym przechowywana jest wartość określonego typu
przechowywana wartość może się zmieniać w trakcie działania programu.
Nazwa zmiennej: musi być unikatowa w obrębie swojego zakresu (wielkość liter nie ma znaczenia)może zawierać do 255 znaków nie może zawierać znaku deklarującego typ (%, &, !, #, @, $) oraz spacji, przecinka i kropkimusi zaczynać się od litery nie może być słowem kluczowym
14
Deklaracje zmiennych
Deklaracja zmiennejmiejsce i fakt deklaracji ustala w danym zakresie nazwę i typ zmiennejwywołanie zmiennej niezadeklarowanej ustala jedynie zakres jej nazwy, a jej typem jest wtedy domyślnie Variantw języku Basic deklaracja zmiennej nie jest obowiązkowa, ale zalecana, głównie ze względu na oszczędność pamięci
Deklarację zmiennych można wymusić w obrębie modułu opcją:składnia opcji: Option Explicit
15
Deklaracje zmiennych
Składnia deklaracji zmiennych: Dim nazwa_zmiennej As typ
Deklaracja skrócona
przy użyciu znaku deklaracji typu po nazwie zmiennej:% Integer& Long! Single# Double@ Currency$ String
przykład: Dim nazwa$
16
Zmienne tablicoweZmienne tablicowe są uporządkowanym zbiorem wartości tego Zmienne tablicowe są uporządkowanym zbiorem wartości tego samego typu samego typu
Elementy tablicy są zmiennymi tego samego typuElementy tablicy są zmiennymi tego samego typu
Dostęp do elementów tablicy jest możliwy poprzez Dostęp do elementów tablicy jest możliwy poprzez indeksowanie, czyli podanie położenia elementu w tablicyindeksowanie, czyli podanie położenia elementu w tablicy
Każdy element tablicy ma swój unikalny zestaw indeksówKażdy element tablicy ma swój unikalny zestaw indeksów
Tablice mogą mieć do 60 wymiarów Tablice mogą mieć do 60 wymiarów
Deklaracja zmiennej tablicowej rezerwuje w pamięci miejsce Deklaracja zmiennej tablicowej rezerwuje w pamięci miejsce dla wszystkich jej elementów.dla wszystkich jej elementów.
17
Deklaracja zmiennych tablicowychDeklaracja w najprostszej formie:Deklaracja w najprostszej formie:
Dim nazwa_tab(indeks_górny) As typ_zm
tu indeks dolny tablicy wynosi 0 lub 1 (jeśli tak zadeklarowaliśmy w Option Base).
Deklaracja z podaniem indeksu dolnego:Deklaracja z podaniem indeksu dolnego:Dim nazwa_tab(ind_dolny To ind_górny) As typ_zm
Dla tablic wielowymiarowych (do 60 wymiarów), kolejne Dla tablic wielowymiarowych (do 60 wymiarów), kolejne indeksowania oddzielamy przecinkamiindeksowania oddzielamy przecinkami
Tablice wypełniamy wartościami odwołując się do ich Tablice wypełniamy wartościami odwołując się do ich elementów poprzez indeksowanie.elementów poprzez indeksowanie.
Czyszczenie zawartości tablicy: Czyszczenie zawartości tablicy: Erase(nazwa_tab)nazwa_tab)
18
Deklaracja zmiennych tablicowych dynamicznych
Deklarację zmiennych tablicowych dynamicznych stosuje się aby uniknąć Deklarację zmiennych tablicowych dynamicznych stosuje się aby uniknąć wstępnej rezerwacji pamięciwstępnej rezerwacji pamięci
deklaruje się je bez podania wymiarów:
Dim nazwa_tab() As typ_zm
rozmiar tablicy trzeba podać przed pierwszym indeksowaniem:
ReDim nazwa_tab(indeksy)
czynność tę można wykonać wiele razy, ale niszczy ona za każdym razem zawartość tablicy
zachowanie zawartości tablicy należy zadeklarować:
ReDim Preserve nazwa_tab(indeksy)
w tym wypadku można zmieniać tylko górny indeks ostatniego wymiaru
funkcja Erase zwalnia pamięć zajmowaną przez tablicę dynamiczną
19
Stałe
Stała:tak jak zmienna, jest to miejsce w pamięci (identyfikowane nazwą), w którym przechowywana jest wartość określonego typu
w odróżnieniu do zmiennej, przechowywana wartość nie może się zmieniać w trakcie działania programu
reguły nadawania nazw są takie same jak dla zmiennych
Deklaracje stałych: Const nazwa_stalej = wartość_stałej As typ Const As typ nazwa_stalej = wartość_stalej
Const nazwa_stalej As typ = wartość_stalej
20
Widoczność zmiennych, stałych, procedur i funkcji
Jest oJest określana za pomocą słów kluczowych:kreślana za pomocą słów kluczowych:[Public|Private|Friend]
Trzy poziomy zasięgu: Trzy poziomy zasięgu:
poziom Public – obiekt jest widoczny na wszystkich poziomach aplikacji
poziom Private – obiekt jest widoczny jedynie w obrębie poziomu deklaracji
poziom Friend – obiekt jest widoczny na wszystkich poziomach AcadDocument, ale nie w innych dokumentach aplikacji
21
Czas życia zmiennych
Zmienna lokalna jest niszczona (zwalniana jest jej pamięć) Zmienna lokalna jest niszczona (zwalniana jest jej pamięć) automatycznie po wyjściu sterowania poza zasięg jej automatycznie po wyjściu sterowania poza zasięg jej widoczności (wyjściu z procedury) widoczności (wyjściu z procedury)
Aby ich wartości pozostały po ustaniu wykonywania procedury, Aby ich wartości pozostały po ustaniu wykonywania procedury, trzeba zadeklarować je jako trzeba zadeklarować je jako Static
Użycie słowa kluczowego Użycie słowa kluczowego Static przed nazwą procedury przed nazwą procedury zachowuje wszystkie zmienne po jej opuszczeniu.zachowuje wszystkie zmienne po jej opuszczeniu.
22
Typy danychLiczby całkowite:Liczby całkowite: Byte - 1 bajt; wartości od 0 do 255 - 1 bajt; wartości od 0 do 255 Integer - 2 bajty; od -32768 do 32767 - 2 bajty; od -32768 do 32767 Long - 4 bajty; od ok. -20 mld do ok. 20 mld - 4 bajty; od ok. -20 mld do ok. 20 mld Decimal - 14 bajtów; do 28 cyfr z przecinkiem - 14 bajtów; do 28 cyfr z przecinkiem
Liczby „rzeczywiste” (właściwie zmiennoprzecinkowe):Liczby „rzeczywiste” (właściwie zmiennoprzecinkowe): Single - 4 bajty; od ok. -3.4e38 do ok. 1.4e45 - 4 bajty; od ok. -3.4e38 do ok. 1.4e45 Double - 8 bajtów; rzędu +/-1.8e308 - 8 bajtów; rzędu +/-1.8e308 Currency - 8 bajtów; +/-9.2e14 (+4 miejsca po przecinku) - 8 bajtów; +/-9.2e14 (+4 miejsca po przecinku)
Wartości logiczne:Wartości logiczne: Boolean - True/False
Daty:Daty: Date - od 1/1/100 do 31/12/9999 - od 1/1/100 do 31/12/9999
Łańcuchy znakowe:Łańcuchy znakowe: String (ustalonej długości) - od 0 do 65535 znaków (ustalonej długości) - od 0 do 65535 znaków String (zmiennej długości) - od 0 do ok. 2 mld znaków (zmiennej długości) - od 0 do ok. 2 mld znaków
23
Łańcuchy znakowe
Dowolne znaki ujęte w cudzysłowach Pusty łańcuch (o długości 0): ""
Deklaracja zmiennej łańcuchowej o stałej długościDim nazwisko As String * 30
Deklaracja zmiennej łańcuchowej o zmiennej długościDim nazwisko As String
Łańcuchy znakowe łączy się operatorem &
Łańcuch może zawierać znaki sterujące, takie jak: vbNewLine – znak nowego wiersza vbTab – tabulator
24
Instrukcje
Instrukcje przypisania zmiennej wartościInstrukcje przypisania zmiennej wartościinnej zmiennej:
nazwa_zm = nazwa_innej_zm
funkcji:
nazwa_zm = nazwa_fun(argumenty)
wyrażenia:
nazwa_zm = wyrażenie
Zmiennej tablicowej przypisujemy wartości odwołując się do Zmiennej tablicowej przypisujemy wartości odwołując się do jej elementów za pomocą indeksowania jej elementów za pomocą indeksowania
nazwa_tab(indeksy) = wyrażenie
25
Instrukcje warunkowe
Służą do sterowania wykonywaniem instrukcji w zależności od Służą do sterowania wykonywaniem instrukcji w zależności od spełnienia warunków zapisanych w postaci wyrażeń spełnienia warunków zapisanych w postaci wyrażeń warunkowychwarunkowych
Wyrażenia warunkowe przyjmują wartości logiczne (Wyrażenia warunkowe przyjmują wartości logiczne (booleanboolean):):prawdy (True)
fałszu (False)
Wyrażenia warunkowe tworzy się przy użyciu Wyrażenia warunkowe tworzy się przy użyciu operatorów porównania i operatorów logicznychoperatorów porównania i operatorów logicznych
26
Operatory porównania i logiczne
Operatory porównania Operatory porównania
= równości, <> nierówności, > większości,
< mniejszości, >= niemniejszości,
<= niewiększości
Is tożsamości
Like podobieństwa
Operatory logiczne Operatory logiczne
AND koniunkcji
OR alternatywy
27
Instrukcja warunkowa If
If warunek Then instrukcja
lub dla kilku krótkich instrukcji:
If warunek Then instrukcja1 : instrukcja2 : ...
lub w postaci blokowej:
If warunek Then
blok instrukcji
End If
Instrukcje są wykonywane tylko wtedy, gdy warunek jest
spełniony.
28
Instrukcja warunkowa If … Else
If warunek Then instrukcja1 Else instrukcja2
Można użyć kilku krótkich instrukcji w jednej linii oddzielając
je dwukropkami – analogicznie jak na poprzednim slajdzie.
Postać blokowa:
If warunek Then
blok instrukcji1
Else
blok instrukcji2
End If
Instrukcje po Then są wykonywane, gdy warunek jest
spełniony; po Else, gdy warunek nie jest spełniony.
29
Instrukcja If … ElseIfStosowana jest przy zagnieżdżeniu warunków:
If warunek1 Then
blok instrukcji1
ElseIf warunek2 Then
blok instrukcji2
[ElseIf warunek_n Then
blok instrukcji_n]
[Else
blok instrukcji_pozost]
End If
Warunki sprawdzane są po kolei i wykonywany jest tylko jeden blok instrukcji.
30
Instrukcja Select CaseW tym wypadku sprawdzane jest, czy W tym wypadku sprawdzane jest, czy wyrażenie przyjmuje przyjmuje podane wartościpodane wartości
Select Case wyrażenie Case wartość1 blok instrukcji1 [Case wartość_n blok instrukcji_n] ... [Case Else blok instrukcji_else]End Select
W przypadku, gdy jakiś blok_instrukcji wykonywany jest dla kilku wartości, używa się konstrukcji:Case wartość1, wartość2, ...
31
Instrukcja Select Case IsW przypadku, kiedy nie chodzi o równość W przypadku, kiedy nie chodzi o równość wyrażenie = wartość, ale o inną relację, wtedy używana , ale o inną relację, wtedy używana jest konstrukcja:jest konstrukcja:
Select Case wyrażenie Case Is relacja1 blok instrukcji1 ... End Select
Tego typu konstrukcja może występować razem ze zwykłymi wyrażeniami typu Select Case
32
Instrukcja Select Case…To…W przypadku, kiedy chodzi o zakres pomiędzy dwiema W przypadku, kiedy chodzi o zakres pomiędzy dwiema wartościami, używana jest konstrukcja:wartościami, używana jest konstrukcja:
Select Case wyrażenie Case wartość1 To wartość2 blok instrukcji ... End Select
Tego typu konstrukcja również może występować razem ze zwykłymi wyrażeniami typu Select Case
33
PętleSą to wyrażenia strukturalne pozwalające wykonywać blok Są to wyrażenia strukturalne pozwalające wykonywać blok instrukcji (instrukcję) wielokrotnie.instrukcji (instrukcję) wielokrotnie.
Konieczne jest podanie warunek zakończenia wykonywania Konieczne jest podanie warunek zakończenia wykonywania instrukcji (warunku wyjścia z pętli).instrukcji (warunku wyjścia z pętli).
W przypadku błędnej definicji warunku wyjścia może dojść do W przypadku błędnej definicji warunku wyjścia może dojść do sytuacji, kiedy pętla będzie wykonywana bez możliwości jej sytuacji, kiedy pętla będzie wykonywana bez możliwości jej zakończenia.zakończenia.Pętlę taką można przerwać kombinacją klawiszy Pętlę taką można przerwać kombinacją klawiszy Ctrl+BreakCtrl+Break
34
Pętla DoDo
If warunek Then Exit Do
blok_instrukcji
Loop
Wykonywanie instrukcji pętli kończy się, gdy podczas sprawdzania warunek jego wartość jest równa True
35
Pętla Do UntilDo Until warunek
blok_instrukcji
Loop
Instrukcje w bloku są wykonywane, dopóki warunek nie uzyska wartości True
Jeśli przed pierwszym wykonaniem pętli warunek będzie miał wartość True, instrukcje nigdy nie zostaną wykonane
Warunek jest sprawdzany przed każdym wykonaniem instrukcji
36
Pętla Do WhileDo While warunek blok_instrukcji Loop
Instrukcje w bloku są wykonywane tak długo, jak długo warunek ma wartość True
Jeśli przed pierwszym wykonaniem pętli warunek ma wartość
False, instrukcje nie będą wykonane
Warunek jest sprawdzany przed każdym wykonaniem instrukcji
37
Pętla Do…Loop Until
Do blok_instrukcji Loop Until warunek
Instrukcje w bloku są wykonywane, dopóki warunek nie
uzyska wartości True
Bez względu na wartość początkową warunku pierwszy przebieg pętli będzie wykonanyWarunek jest sprawdzany po każdym wykonaniu instrukcji
38
Pętla Do…Loop While
Do blok_instrukcji Loop While warunek
Instrukcje w bloku są wykonywane, jak długo warunek ma
wartość True
Bez względu na wartość początkową warunku pierwszy przebieg pętli będzie wykonanyWarunek jest sprawdzany po każdym wykonaniu instrukcji
39
Pętla While WendWhile While warunekwarunek
blok_instrukcjiWendWend
Instrukcje są wykonywane o ile Instrukcje są wykonywane o ile warunekwarunek ma wartość ma wartość TrueTrue
Jeśli na początku Jeśli na początku warunekwarunek ma wartość ma wartość FalseFalse, instrukcje nie , instrukcje nie są wykonywane są wykonywane
Warunek jest sprawdzany przed każdym wykonaniem instrukcji Warunek jest sprawdzany przed każdym wykonaniem instrukcji
40
Pętla ForFor For liczniklicznik = = wart_poczwart_pocz To To wart_konc wart_konc [[Step Step krokkrok]] blok_instrukcjiNext Next liczniklicznik
Pętla wykonywana jest określoną liczbę razy dla Pętla wykonywana jest określoną liczbę razy dla licznikalicznika narastającego po każdym przebiegu pętli co narastającego po każdym przebiegu pętli co krokkrok od od wart_poczwart_pocz do do wart_koncwart_konc
Człon Człon Step Step krokkrok występuje w kodzie, gdy wartość występuje w kodzie, gdy wartość krokkrok różni różni się od 1 (wartość ta może być ujemna).się od 1 (wartość ta może być ujemna).
Pętla kończy się, kiedy licznik przekroczy Pętla kończy się, kiedy licznik przekroczy wart_koncwart_konc
41
Pętla For EachFor Each element In kolekcja
blok_instrukcji
Next element
Pętla wykonywana jest tyle razy, jaka jest liczność kolekcjiInstrukcje są wykonywane dla każdego elementu kolekcji
42
Obsługa plikówAby na pliku wykonać jakąś operację (odczyt, zapis), należy Aby na pliku wykonać jakąś operację (odczyt, zapis), należy wykonać następujące czynności:wykonać następujące czynności:
1. Otworzyć plik z deklaracją w jakim celu.
2. Dokonać na nim operacji odczytu lub zapisu.
3. Zamknąć plik.
43
Otwarcie plikuSkładnia:Składnia:
Open ścieżka For tryb As [#]NrPliku
Parametr Parametr ścieżka, to ścieżka dostępu do pliku w systemie. , to ścieżka dostępu do pliku w systemie. Podajemy ją w postaci łańcucha znakowego (w cudzysłowach Podajemy ją w postaci łańcucha znakowego (w cudzysłowach " ") lub w postaci zmiennej łańcuchowej przechowującej " ") lub w postaci zmiennej łańcuchowej przechowującej wartość tego łańcucha.wartość tego łańcucha.
Parametr Parametr tryb, to cel otwarcia pliku: , to cel otwarcia pliku: Input – do odczytu, – do odczytu, Output – do zapisu (niszczy zawartość pliku), – do zapisu (niszczy zawartość pliku), Append – do – do dopisania na końcu pliku. Te trzy tryby używane są do plików dopisania na końcu pliku. Te trzy tryby używane są do plików tekstowych, pozostałe to: tekstowych, pozostałe to: Binary i i Random..
NrPliku, to pierwszy dostępny (nie zajęty!) numer w zakresie , to pierwszy dostępny (nie zajęty!) numer w zakresie 1–511.1–511.
44
Odczyt z plikuSkładnia:Składnia:
Input [#]NrPliku, Lista zmiennych
Kolejne wartości w pliku muszą odpowiadać sekwencyjnie Kolejne wartości w pliku muszą odpowiadać sekwencyjnie typom zmiennych z podanej listy.typom zmiennych z podanej listy.
Składnia:Składnia:LineInput [#]NrPliku, Zm_łańcuchowa
Do zmiennej zwracana jest wartość całej linii (do znaku Do zmiennej zwracana jest wartość całej linii (do znaku powrotu karetki Chr(13) lub sekwencji znaków powrotu karetki powrotu karetki Chr(13) lub sekwencji znaków powrotu karetki i końca linii iChr(13)+Chr(10)) w postaci łańcucha znakowego.i końca linii iChr(13)+Chr(10)) w postaci łańcucha znakowego.
45
Zapis do plikuSkładnia:Składnia:
Write [#]NrPliku[, Lista wartości]
Pominięcie listy wartości powoduje zapisanie pustej linii. Pominięcie listy wartości powoduje zapisanie pustej linii. Wartości w pliku oddzielane są przecinkami, a łańcuchy Wartości w pliku oddzielane są przecinkami, a łańcuchy znakowe wpisywane w cudzysłowach. Na końcu każdej listy znakowe wpisywane w cudzysłowach. Na końcu każdej listy wartości wstawiany jest znak końca linii. Lista wartości może wartości wstawiany jest znak końca linii. Lista wartości może być podana bezpośrednio, albo za pośrednictwem zmiennych.być podana bezpośrednio, albo za pośrednictwem zmiennych.
Składnia:Składnia:Print [#]NrPliku[, Lista wyrażeń]
W tym wypadku dostępne są większe możliwości sterowania W tym wypadku dostępne są większe możliwości sterowania sposobem zapisu (wstawianie spacji, tabulatorów, ustawianie sposobem zapisu (wstawianie spacji, tabulatorów, ustawianie miejsca wpisu w linii, itd.).miejsca wpisu w linii, itd.).