ראשי >> עוד אודות תכנות >>יצירת טיפוסי נתונים משלך
מפת הפרק:

8.5 יצירת טיפוסי נתונים משלך

8.5.1 הצהרה על משתנה "טיפוסים מוגדרי משתמש"
8.5.2 השמת וקבלת ערכים מ"טיפוסים מוגדרי משתמש"
8.5.3 "טיפוסים מוגדרי משתמש" המכילים מערכים
8.5.4 "טיפוסים מוגדרי משתמש" המכילים עצמים
8.5.5 מבני נתונים מקוננים

התא יכול לשלב משתנים מכמה טיפוסים שונים בכדי ליצור "טיפוסים מוגדרי משתמש". (ידועים כמבנים בשפת C). "טיפוסים מוגדרי משתמש" שימושיים מאד כאשר אתה רוצה ליצור משתנה בודד אשר מכיל מס' פיסות מידע.

אתה יוצר "טיפוסים מוגדרי משתמש" ע"י הקלדת הצהרה אשר חייבת להמצא באזור ההצהרות של המודול. "טיפוסים מוגדרי משתמש" יכולים להיות מוצהרים כפרטיים או כציבוריים, ע"י מילות המפתח המתאימות. לדוגמא:

Private Type MyDataType
  -or-
Public Type MyDataType

או לדוגמא, אתה יכול ליצור "טיפוסים מוגדרי משתמש" אשר שומרים מידע אודות מערכת מחשב:

' Declarations (of a standard module).
Private Type SystemInfo
  CPU As Variant
  Memory As Long
  VideoColors As Integer
  Cost As Currency
  PurchaseDate As Variant
End Type

הצהרה על משתנה "טיפוסים מוגדרי משתמש"

אתה יכול להצהיר על משתנה מקומי, פרטי או ציבורי באותו "טיפוסים מוגדרי משתמש":

Dim MySystem As SystemInfo, YourSystem As SystemInfo

הטבלה הבאה מסכמת היכן ומה טווח ההכרה שאתה יכול להצהיר על "טיפוסים מוגדרי משתמש" והמשתנים שלהם.

הערה: אם ההצהרה משתמשת במילה שמורה DIM, "טיפוסים מוגדרי משתמש" יהיו ע"פ ברירת המחדל ציבוריים. אם ברצונך ש"טיפוסים מוגדרי משתמש" יהיו פרטיים עליך לוודא שהוספת PRIVATE

השמת וקבלת ערכים מ"טיפוסים מוגדרי משתמש"

השמת וקבלת ערכים מהפרט של משתנה "טיפוסים מוגדרי משתמש", זהה לקביעת וקבלת מאפיינים:

MySystem.CPU = "486"
If MySystem.PurchaseDate > #1/1/92# Then

אתה יכול גם להשים ערכי משתנה אחד לתוך השני אם שניהם מאותו סוג.

YourSystem = MySystem

"טיפוסים מוגדרי משתמש" המכילים מערכים

"טיפוסים מוגדרי משתמש" יכולים להכיל מערכים רגילים בעלי גודל קבוע מראש. לדוגמא:

Type SystemInfo
  CPU As Variant
  Memory As Long
  DiskDrives(25) As String ' מערך בעל גודל קבוע מראש.
  VideoColors As Integer
  Cost As Currency
  PurchaseDate As Variant
End Type

"טיפוסים מוגדרי משתמש" יכול גם לכלול מערך דינאמי:

Type SystemInfo
  CPU As Variant
  Memory As Long
  DiskDrives() As String ' מערך דינאמי.
  VideoColors As Integer
  Cost As Currency
  PurchaseDate As Variant
End Type

אתה יכול לגשת לערכים שבמחרוזת של "טיפוסים מוגדרי משתמש" באותה צורה שאתה ניגש למאפיין של עצם.

Dim MySystem As SystemInfo
  ReDim MySystem.DiskDrives(3)
  MySystem.DiskDrives(0) = "1.44 MB"

אתה יכול גם להגדיר גם מערך של "טיפוסים מוגדרי משתמש":

Dim AllSystems(100) As SystemInfo

עקוב אחרי על אותם החוקים בכדי לגשת למרכיבים של מבני הנתון:

AllSystems(5).CPU = "386SX"
AllSystems(5).DiskDrives(2) = "100M SCSI"

העברת "טיפוסים מוגדרי משתמש" לפרוצדורה

אתה יכול להעביר משתנה לפרוצדורה מסוג "טיפוסים מוגדרי משתמש"

Sub FillSystem (SomeSystem As SystemInfo) SomeSystem.CPU = lstCPU.Text
  SomeSystem.Memory = txtMemory.Text
  SomeSystem.Cost = txtCost.Text
  SomeSystem.PurchaseDate = Now
End Sub

הערה: אם אתה רוצה להעביר "טיפוסים מוגדרי משתמש" במודול של טופס הפרוצדורה חייבת להיות מסוג פרטי.

פונקציה יכולה להחזיר ערך מסוג "טיפוסים מוגדרי משתמש", ואתה יכול להעביר "טיפוסים מוגדרי משתמש" כאחד הרכיבים שמקבלת הפרוצדורה. "טיפוסים מוגדרי משתמש" תמיד מועברים כיחוס, אז הפרוצדורה משנה את הרכיב ומחזירה לפרוצדורה המזמינה כפי שהוצג בדוגמא הקודמת.

הערה: בגלל שה"טיפוסים מוגדרי משתמש" מועברים בשלמותם מהפרוצדורות ואליהם,העברת "טיפוסים מוגדרי משתמש" מורכבים וגדולים בין הפרוצדורות יכולה לגרום האטה בביצועים.

"טיפוסים מוגדרי משתמש" המכילים עצמים

"טיפוסים מוגדרי משתמש" יכולים לכלול עצמים:

Private Type AccountPack frmInput as Form
  dbPayRollAccount as Database
End Type

מבני נתונים מקוננים

מבני נתונים מכוננים יכולים להיות מורכבים כמה שתרצה. למעשה "טיפוסים מוגדרי משתמש" יכולים לכלול בתוכם "טיפוסים מוגדרי משתמש" אחרים. ע"מ שהקוד שלך יהיה יותר קריא ומובן וקל לדיבוג נסה לשמור את כל קטעי הקוד המגדירים "טיפוסים מוגדרי משתמש" במודול אחד.

Type DriveInfo
  Type As String
  Size As Long
End Type

Type SystemInfo
  CPU As Variant
  Memory As Long
  DiskDrives(26) As DriveInfo
  Cost As Currency
  PurchaseDate As Variant
End Type

Dim AllSystems(100) As SystemInfo

AllSystems(1).DiskDrives(0).Type = "Floppy"

שימוש במיספור לעבודה עם סטים של קבועים

מיספור מספק דרך נוחה לעבודה עם סטים של קבועים מקושרים, ולקשר אסוציאטיבית בין הקבוע לבין ערכו. לדוגמא אתה יכול להצהיר על מיספור של סט מספרים קבועים שמקושרים אסוציאטיבית לימי השבוע, ואז להשתמש בשם היום במקום מספר בקוד.

אתה יוצר מספור ע"י הצהרה " ENUM " באיזור ההצהרות של המודול הסטנדרטי או המודול הציבורי. הצהרת מספור יכולה להיות פרטית או ציבורית,ע"י הוספתהמילים השמורות בזמן ההכרזה, לדוגמא:

Private Enum MyEnum
  -or-
Public Enum MyEnum

כברירת מחדל הקבוע הראשון במיספור יקבל את הערך 0,והקבועים הבאים יקבלו ערך הגדול באחד מקודמם.לדוגמא: בדוגמא הבאה במיספור "ימים" יקבל יום ראשון את הערך 0,יום שני את הערך 1 וכך הלאה.

Public Enum Days
  Sunday
  Monday
  Tuesday
  Wednesday
  Thursday
  Friday
  Saturday
End Enum

טיפ: Visual Basic מספק מספור מובנה פנימי (Build in), vbDayofWeek, המכיל קבועים לימי השבוע. ע"מ לראות את הקבועים המוגדרים מראש במיספור, הקלד vbDayofWeek בחלון קוד, ו Visual Basic יציג אוטומאטית את קבועי המספור.

אתה יכול להציב ערכים כקבועים ע"י שימוש בפקודה השמה ( '=' ). ניתן להציב מספרים LONG ומספרים שליליים. לדוגמא תוכל להציב מספרים שליליים שייצגו שגיאות.

במספור הבא, הקבוע Indalid בעל ערך 1- והקבוע Sunday מאותחל כ-0. בגלל שSaturday הוא הקבוע הראשון הוא יאותחל כ-0. הערך של Monday הוא 1, וכו'.

Public Enum WorkDays
  Saturday
  Sunday = 0
  Monday
  Tuesday
  Wednesday
  Thursday
  Friday
  Invalid = -1
End Enum

הערה: Visual Basic מטפל בערכי המיספור כLONG. אם תרצה להציב שבר (מס' עם נקודה עשרונית), Visual Basic יציב את המספר השלם הקרוב ביותר.

ע"י ארגון אוספים של קבועים קשורים במיספור, ניתן להשתמש באותו קבוע בהקשרים שונים. לדוגמא, ניתן להשתמש באותו שם של יום , גם כיום בשבוע וגם כיום עבודה.

ע"מ למנוע כפילות ודו משמעות בהתיחסות לקבוע, יש לייחד את שם הקבוע. הקוד בהמשך מתייחס לקבוע Saturday, המקבל ערכים שונים במיספורים DAY וWORKDAY בחלון המיידי.

Debug.Print "Days.Saturday = " & Days.Saturday
Debug.Print "WorkDays.Saturday = " & WorkDays.Saturday

ניתן להשתמש בערך של קבוע במיספור אחד כאשר אתה מציב את הערך של הקבוע במיספור השני. לדוגמא:

Public Enum WorkDays
  Sunday = 0
  Monday
  Tuesday
  Wednesday
  Thursday
  Friday
  Saturday = Days.Saturday - 6
  Invalid = -1
End Enum

לאחר הצהרה על טיפוס מסוג מיספור, ניתן להצהיר על משתנה מסוג מיספור. ואז להשתמש במשתנה ע"מ לשמור את הערכים של קבועי המספור. לדוגמא:

Dim MyDay As WorkDays
  MyDay = Saturday ' Saturday = 0.
    If MyDay < Monday Then ' Monday = 1,
        ' so Visual Basic displays
        ' a message box.
    MsgBox "It's the weekend. Invalid work day!"
End If

רשום לפניך כי כאשר אתה מקליד את שורת הקוד השניה שלפניך, Visual Basic יציג אוטומאטית את ערכי הקבועים של WORKDAY ברשימת Auto List Members.

תמונה 8.7 Visual Basic מציג אוטומאטית את ערכי הקבועים.

מכיון שהקבוע Sunday מאותחל כ0 גם כן, Visual Basic יציג את את תיבת ההודעות גם אם תחליף את הקבוע Saturday בקבוע Sunday בשורה 2.

MyDay = Sunday ' Sunday also evaluates to 0.

הערה: למרות באופן נורמאלי מוצב רק קבועי מיספור למשתנה שמוצהר בתור מיספור, ניתן להציב כל מספר LONG אחר.
עבודה עם מתגי שורת פקודה יצירת טיפוסי נתונים משלך פרק - 9