Szydełkowanie skryptu
Pętle to konstrukcje umożliwiające wielokrotne wykonanie wybranego fragmentu kodu. W przypadku skryptów w języku VBScript do twojej dyspozycji pozostają następujące konstrukcje:
For Each … Next
For … Next
Do While
Do Until
Kiedy używać danej konstrukcji i dlaczego? Odpowiedzią niech będą konkretne przykłady kodu.
Z pewnością zauważyłeś trzy wyodrębnione części skryptu. Sekcja nagłówka (linie od 1 do 5) zawiera znane już z poprzednich odcinków kursu wyrażenia, takie jak m.in. Option Explicit czy deklaracje zmiennych za pomocą Dim.
Kolejny fragment – linia 7 – to sekcja referencyjna, w której, przypomnijmy, przypisujesz zadeklarowanym wcześniej zmiennym odpowiednie wartości. W tym przypadku zmiennej DrivesCollection przyporządkowane zostało zapytanie do systemu o liczbę dysków logicznych za pomocą funkcji GetObject, metody ExecQuery i mechanizmu Windows Management Instrumentation (WMI). Ponieważ jednak na razie zajmujemy się pętlami, a nie funkcjami czy zagadnieniami związanymi z WMI, pozostawiamy tę linię bez dodatkowych wyjaśnień – po prostu ją wpisz.
Ostatnie trzy linie 9–11 to sekcja robocza zawierająca właśnie pętlę For Each … Next. W opisywanym przykładzie wynikiem działania skryptu będzie wyświetlenie liter dysków twardych lub partycji, jakie są zdefiniowane w danym systemie.
Zapewne pamiętasz, że do wyświetlania jakichkolwiek komunikatów służy obiekt WScript i jego metoda Echo. Zauważ, że powyższy skrypt w momencie wykonania wyświetli tyle liter dysków, ile masz w swoim komputerze, mimo że użyłeś przecież tylko jednego obiektu WScript.Echo.
Skąd komputer „wie”, ile liter ma wyświetlić? Oto jak można na „ludzki” język przetłumaczyć trzy ostatnie wiersze skryptu: „Dla każdego obiektu (dysku) odnalezionego w wyniku zapytania systemu poprzez zmienną DrivesCollection wyświetl każdy znaleziony obiekt (literę dysku)”. Zatem dzięki pętli komunikat będzie zawierał tyle liter dysku, ile liter dysków zostało w systemie faktycznie przyporządkowanych dyskom logicznym. Dodatkową zaletą pętli For Each … Next jest to, że możesz przypisać dowolne polecenie każdemu obiektowi znajdującemu się w jakimś zbiorze, nie wiedząc zarazem, ile jest tych obiektów w zbiorze.
W przykładowym skrypcie nie tylko pętla For Each … Next jest nowym elementem. Pomijając wiersz 7, zwróć uwagę na sekcję nagłówka i zawartą w niej, w linii 3, deklarację stałej DriveType. Jak łatwo zauważyć, stała definiowana jest wyrażeniem Const. Ponadto najczęściej od razu definiowanej stałej przypisywana jest określona wartość, która nie ulega zmianie przez cały skrypt. W naszym przykładzie wartość 3 wzięła się stąd, że zawęża pole zapytania skierowanego do mechanizmu WMI tylko do dysków twardych. Więcej informacji o tym, jak odpytywać mechanizm WMI na temat innego typu dysków, w ramce „Jak pytać system...”.