טיפוס משתנה מורכב, המכונה גם רשומה או מבנה, מוגדר בVB בצורה דומה לפסקל, באמצעות המילה השמורה Type, אך לא ניתן ליצור בו רשומה בעלת שדות דינמיים.
Private Type City
CityName As String
SunRise As Date
SunSet As Date
End Type
אוספים - Collections.
טיפוס אוסף הוא טיפוס מיוחד בשפה שמפצה על חוסר האפשרות של שימוש במצביעים ובהקצאה דינמית בשפה זו. באמצעות טיפוס זה ניתן ליצור משתנים בזיכרון אף מסוג מורכב בצורה של רשימות מקושרות, כאשר הגישה לאיברי הרשימה היא סדרתית כמו במערך. לאוסף יש שיטות להוספת איבר, להסרתו, ולהעברת איבר ממקום למקום באוסף ותכונה המונה את מספר האיברים הקיימים בו. ניתן באותו משתנה-אוסף ליצור אוסף של פריטים מסוגים שונים של טיפוסים. טיפוס זה נותן פונקציונליות של הקצאה דינמית בצורה של מערך ונוח ביותר לשימוש. ניתן לעבור על איברי האוסף באמצעות לולאה מיוחדת For Each, שמתבצעת כמספר האיברים שבאוסף, כשכל מעבר היא יוצרת מצביע אל האיבר הנוכחי.
הגדרת פונקציה.
פונקציה מוגדרת בVB באמצעות הכותרת Function שם הפונקציה שמות פרמטרים שהיא מקבלת וטיפוסם, והטיפוס שהיא מחזירה. ניתן כקידומת לפונקציה לקבוע האם תהיה ציבורית או פרטית. הפונקציה תסתיים במילה השמורה End Function. כדי לבצע החזרת ערך יש לבצע השמה של הערך לשם הפונקציה. הפונקציה יכולה לקבל פרמטרים אופציונליים, וכן רשימת פרמטרים מערכית - ParmArray.
Private Function SunRisen(ByVal nt As Double) As Double
Dim ne As Double
SunRisen=value
End Function
הגדרת שגרה.
שגרה שהיא מקטע תכנותי שלא מחזיר ערך, מוגדרת בVB בצורה דומה לפונקציה עם כמה שינויים באופן הבא: השגרה מוגדרת בעזרת מילת המפתח Sub, שם השגרה, שמות פרמטרים שהיא מקבלת וטיפוסם. כמו בפונקציה, ניתן כקידומת בשגרה לקבוע האם תהיה ציבורית או פרטית. השגרה תסתיים במילה השמורה End Sub.
Private Sub SunRisen(ByVal nt As Double)
Dim ne As Double
End Sub
מודול.
מודול (Modules) הוא האזור הכללי בו ניתן לבצע הגדרות כלליות, הכרזות קבועים ומשתנים גלובליים וכתיבת פונקציות ושגרות כלליות. נתונים באזור זה שיהיו מוגדרים כפומביים, יהיו חשופים לכל המודולים האחרים שבפרויקט. באזור זה ניתן לכתוב את השגרה MAIN ולהורות שהיא תהיה השגרה שתתבצע לראשונה בהרצת הפרויקט. בניגוד לשפת פסקל שקטעים תכנותיים יכולים להיות בגוף התוכנית, קטעים תכנותיים בVB יכולים להיות רק בתוך מקטעים של פונקציות או שגרות.
תכנות מונחה עצמים - מודול מחלקה.
מודול מחלקה (Class Modules) הוא היישום של VB לתכנות מונחה עצמים. המימוש של מתודולוגיה זו הוא מוגבל ולמעשה מממש את העיקרון של כימוס בלבד, ללא אפשרות לירושה, פולימורפיזם ויצירת ממשקים. מודול מחלקה יכול להכיל משתנים, שיטות, מאפיינים (Property) ליצירת גישה מבחוץ למשתנים פרטיים, ואירועים (Event) לתיקשור בין מחלקות שונות. למודול המחלקה יכול להיות בנאי (Class_Initialize) ומפרק (Class_Terminate). הטופס ב-VB הוא למעשה מקרה פרטי של מודול מחלקה.
כל מחלקה חייבת להיות בקובץ נפרד. לא ניתן ליצור מחלקות מקוננות. ב-VB מובנה אשף ויזואלי לבניית מחלקות בשם Class Builder, שבו אפשר לקבוע ולנהל את תצורת המחלקות שבפרויקט: שמות המאפיינים, השיטות והאירועים והפרמטרים שלהם.
עבודה בקבצים.
לVB ישנה יכולת לעבוד עם קבצים באופנים שונים. כדי לעבוד עם קובץ יש לפתוח אותו בערוץ מסוים באמצעות הפקודה Open, ניתן לקרוא מתוכו למשתנה באמצעות פקודת Input ולכתוב לתוכו באמצעות פקודת Print, ולבסוף יש לסגור אותו באמצעות פקודת Close. הדוגמה הבאה מדגימה כיצד ניתן לקרוא קובץ טקסט לתוך משתנה מחרוזת.
Private Function LoadFile(FileName As String) As String
Dim Temp As String, AllFile As String
Open App.Path &amp; FileName For Input As #1
Do While Not EOF(1)
Input #1, Temp
AllFile = AllFile &amp; Temp
Close #1
LoadFile = AllFile
End Function
FileTxt = LoadFile("\Data.dat")
בסיסי נתונים.
ל- VB ישנם כמה רכיבים ועזרים שנועדו לספק פונקציונליות שונה ומגוונת בעבודה עם בסיסי נתונים, בכל השלבים: היצירה, העדכון וההדפסה.
Visual Data Manager.
תוספת זו מוסיפה למתכנת כלי אינטראקטיבי וויזואלי לעבודה עם בסיסי נתונים. שבאמצעותו ניתן לנהל מסדים וטבלאות ברוב ההיבטים הקשורים לבסיס נתונים, כמו עיצוב ועדכון טבלאות, אינדקסים ושדות.
Data Environment.
רכיב ActiveX Designer "סביבת נתונים" נועד לסייע למתכנת בעבודה עם בסיסי נתונים ולספק רכיב תקשורת ויזואלי שייצג קשרים עם בסיסי נתונים שונים. הרכיב מספק אפשרות לתקשורת מרובה בו זמנית עם מסדים מסוגים שונים. קשר עם טבלאות, שגרות מאוחסנות ועוד. ישנה אפשרות לתקשר עם הרכיב בטפסים השונים של הפרויקט, ולקבל את הנתונים שהוא מספק אל פקדים בטופס.
Data Report.
רכיב זה אף הוא אובייקט Active X המשולב בסביבת VB, הנועד לעזור ביצירת דוחות. באמצעותו ניתן לפצל את הנתונים לאזורים שונים (כמו כותרת דוח, כותרת עמוד, מקטע פירוט), לקבץ אותם לפי ערכים. לרכיב זה בדומה לטופס פקדים שונים המאפשרים תצוגה של נתונים. שדות מוגדרים מראש, שדות מבוססות פונקציות לחישובי דוח, יכולות גרפיות, הצגה מוקדמת והדפסה.
מחולל דוחות נוסף שבאמצעותו ניתן לייצר דוחות הוא Crystal Reports שאף הוא מצורף לחבילת הפיתוח של VB.
פקדי בסיסי נתונים.
בVB ישנם פקדי נתונים מסוגים שונים כמו DAO ו ADO המאפשרים תקשורת עם בסיסי נתונים בשיטות שונות. ניתן גם לתקשר ישירות בקוד ללא פקדים עם בסיסי הנתונים באמצעות אובייקטי גישה לנתונים בסוגים השונים. ישנם פקדים נוספים לתצוגת נתוני המסדים, שמאפשרים תצוגת נתונים באופנים שונים: רשומה בודדת, גיליון נתונים (רשת DataGrid), רשומות בקשר אב ובנים, רשת היררכית ותרשים. כאשר לפקדי התצוגה ישנה יכולת לתקשר עם פקדי הנתונים, באמצעות איגוד נתונים עם תוכני הרשומות של טבלאות המסדים.
תתי גרסאות.
ישנן שתי תתי גרסאות נפוצות לVisual Basic:
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
MsgBox ("The script opens notepad")
WshShell.Run("notepad")
מגבלות השפה.
מגבלות השפה נוגעים לכמה תחומים עיקריים:
מגבלות ביכולתה ליישם אובייקטים.
בשפה זו התמיכה בתכנות מונחה עצמים חלשה וחלקית. מבין שלושת מאפייני תכנות מונחה עצמים יש בשפה תמיכה רק בכימוס: ניתן ליצור אובייקט עם מאפיינים שיטות ואירועים. אבל לא ניתן להוריש אותו לאובייקט אחר. וממילא לא ניתן לעשות פולימורפיזם.
מגבלות בתחביר השפה.
שפת ה-VB חסרה גמישות תחבירית הקיימת בשפות תכנות רבות ומבחינה זו היא שפה מסורבלת. דוגמאות לכך הן אי האפשרות להכריז משתנה ולאתחלו באותה שורה, אי האפשרות לאתחל מערך בעת ההגדרה, אי האפשרות להגדיר משתנה לוקלי בתוך לולאת For, אי האפשרות לתחם הערה בין שני סימנים (בכל שורה יש להגדיר את ההערה מחדש), חיסרון של אופרטורים בצירוף שווה לביצוע פעולות על המשתנה עצמו, מבלי לכפול אותו בפקודת ההשמה. צורך בשימוש בתו מיוחד כדי ליצור המשכיות בין פקודות בשורות נפרדות, השמה לפונקציה באמצעות שם הפונקציה ולא פקודת Return שסרבלה את שינוי שם הפונקציה ועוד.
פונקציונליות.
שפה זו חסרה את היכולות לכתוב שירותי חלונות. היא גם חסרה את היכולות לכתיבה של תהליכונים מבלי לעשות שימוש ב-Windows API, וחסרה את האפשרות לעשות שימושים במצביעים. מלבד זאת נצרכה לעשות שימוש ב-Windows API לצורך דברים רבים, חלקם טריוויאלים. לטיפוסי Variant הייתה תקורה גבוהה בנפח הזיכרון, לעומת שפות בעלות טיפוסיות חזקה. בהרבה תחומים תכנותיים כמו תקשורת ווידאו חסרה ל-VB תשתית ראויה בשפה עצמה, והיא מושלמת באמצעות פקדי ActiveX שנכתבים לרוב בשפת C++. גם לא ניתן לכתוב בשפה זו מערכות תשתיתיות כמו מערכות הפעלה וכדומה.
איטיות בזמן ריצה.
מהירות הריצה של שפה זו איטית יחסית לשפות כמו C, C++ ופסקל. בפעילות חישוביות כמו חיפושים ומיונים ניכרת האיטיות שלה. ולכן היא לא מתאימה לכתיבה של עיבודים כבדים כמו עיבודי וידאו.
חלק ניכר ממגבלות שפה זו תוקנו ב-VB.NET. כיום מיקרוסופט איננה תומכת כבר בסביבת פיתוח זו, אף שלא מעט מתכנתים של שפה זו ממשיכים לתכנת בה ולא מהגרים לסביבת הדוט נט.
דוגמה לקידוד של VB.
תוכנית שלום עולם.
Sub main()
msgbox("Hello World!")
End Sub
פונקציה שמחזירה את המספר הגדול מבין שניים.
Function MaxOf(Number1 As Long, Number2 As Long) As Long
If Number1 &gt;= Number2 Then
MaxOf = Number1
MaxOf = Number2
End If
End Function
פונקציה זו ששמה MaxOf, מקבלת שני מספרים ומחזירה את הגדול ביותר. ניתן לראות בפונקציה זו את המבנה הטיפוסי של VB, שבו כל מבנה מסתיים, בEND, דבר המקל על קריאותה של התוכנה, לעומת שפות הC למיניהן אפשר לקבל בסיום קוד רצף של סוגריים מסולסלים, שקשה לדעת איזו שייכת לאיזו פקודה.
Visual Basic .NET.