روال Property Let در VBA | شیءگرایی و کپسوله سازی داده ها در VBA

در آموزش قبل با اعلان دو متغیر Public کلاس Fruit خواص (Properties) name و color را ایجاد کردیم. در ادامه آموزش قبل می خواهیم کاربرد روال Property Let در برنامه نویسی شیءگرا و کپسوله سازی (مخفی سازی) داده ها در VBA را بررسی کنیم.

آیا می‌دانید:

آموزش VBA یکی از بهترین راه‌ها برای بهینه‌سازی کار با برنامه‌های مختلف آفیس است. با این زبان می‌توانید فرآیندهای مختلف را شخصی‌سازی کنید و داده‌های خود را به شکلی که می‌خواهید مدیریت نمایید. VBA یک ابزار قدرتمند برای هر کاربری است که به دنبال کنترل بیشتر و خودکارسازی وظایف است.

انواع روال Property در VBA

کاربرد روال Property در VBA ایجاد خواص سفارشی می باشد. VBA سه نوع روال Property پشتیبانی می نماید که بطور خلاصه کاربرد هر یک در جدول زیر مشخص شده است:

روالکاربرد
Property Letمقدار یک ویژگی را تعیین می نماید. یک ویژگی فقط نوشتنی (write-only) برای یک کلاس ایجاد می نماید.
Property Getمقدار یک ویژگی را برمی گرداند. یک ویژگی فقط خواندنی (read-only) برای یک کلاس ایجاد می نماید.
Property Setمرجع یک ویژگی را تعیین می نماید.
انواع روال Property در VBA

در این آموزش کاربرد روال Property Let در برنامه نویسی شیءگرا در VBA و ایجاد خواص برای یک کلاس را بررسی می کنیم.

پیشنهاد می کنیم بعد از مطالعه این آموزش اطلاعات بیشتر در مورد انواع روال Property در VBA را در این لینک مشاهده نمایید.

روال Property Let و کپسوله سازی داده ها در VBA

در کدهای زیر با استفاده از روال Property Let دو ویژگی name و color را برای کلاس Fruit ایجاد می کنیم.

Private fruitName As String
Private fruitColor As String

Property Let name(name As String)
    fruitName = name
End Property

Property Let color(color As String)
    fruitColor = color
End Property

روال Property Let باید حداقل یک آرگومان داشته باشد. با توجه به اینکه روال Property Let یک ویژگی فقط نوشتنی ایجاد می کند، الزام به وجود حداقل یک آرگومان بدیهی می باشد.

VBA دو ویژگی هم نام با دو روال Property Let یعنی name و color برای کلاس Fruit ایجاد می نماید.

fruitName و fruitColor دو متغیر هستند که با استفاده از دستور Private اعلان شده اند. این دو متغیر خارج از کلاس Fruit در دسترس نیستند این به این معناست که اگر یک شیء از کلاس ایجاد نمایید، نمی توانید مقادیر این دو متغیر را بخوانید یا تغییر دهید.

کاربرد این دو متغیر نگهداری داده های کپسوله شده درون شیء می باشد. روال Property Let در فرایند کپسوله سازی نقش هدایت داده ها به سمت محل ذخیره امن را بر عهده دارد.

امتحان کدها

کدهای بالا را در پنجره کد کلاس Fruit آموزش قبل کپی و جایگزین نمایید.

از منوی Insert روی گزینه Module کلیک نمایید تا یک ماژول (استاندارد) ایجاد گردد. کدهای زیر را در پنجره کد ماژول جدید کپی کنید.

Sub test()
Dim apple As New Fruit

    apple.name = "apple"
    apple.color = "red"
    
End Sub

تحلیل کدها

خط 2: در این خط همزمان با اعلان متغیر شیء apple یک نمونه جدید از شیء Fruit ایجاد نموده ایم.

کاربرد روال Property Let
ویرایشگر VBA خواص کلاس Fruit را در یک لیست نمایش می دهد.

از خط دوم به بعد یعنی بعد اعلان شیء جدید از روی کلاس Fruit در صورتی که بعد از نام متغیر شیء (apple) علامت . (نقطه) را تایپ نمایید ویرایشگر VBA خواص name و color را در یک لیست مانند تصویر نمایش خواهد داد.
توجه دارید که این ویژگی در صورتی فعال خواهد بود که کلاس شیء در خط اعلان صریحاً مشخص شده باشد.

خط 4 و 5: در این دو خط مقدار خواص name و color را تعیین کرده ایم. شیء apple مقادیر apple و red را برای دو ویژگی خود دریافت می کند و در مخزن داده های خود یعنی دو متغیر fruitName و fruitColor ذخیره می نماید.

دریافت مقدار یک ویژگی

دریافت مقدار یک ویژگی که با روال Property Let ایجاد شده است امکان پذیر نمی باشد، چرا که این روال یک ویژگی فقط نوشتنی (write-only) ایجاد می کند.

در صورتی که بخواهید مقدار این نوع خواص را دریافت نمایید یک خطای کامپایلر ایجاد خواهد شد. کدهای زیر را در ادامه ماژول استاندارد قبلی کپی نمایید.

Sub test1()
Dim orange As New Fruit
Dim objectName As String

    orange.name = "orange"
    
    objectName = orange.name
End Sub
خطای Invalid use of property در VBA
مقدار یک ویژگی ایجاد شده با Property Let فقط نوشتنی است و اگر اقدام به خواندن ویژگی کنید خطا ایجاد خواهد شد.

در پنجره Immediate نام روال test1 را تایپ و کلید Enter را فشار دهید. همانطور که در تصویر مشاهده می کنید کامپایلر VBA خطای Invalid use of property را ایجاد می نماید و عملیات متوقف می شود.
برای خواندن یک ویژگی Property Let باید از روال Property Get استفاده نمایید. در آموزش های بعدی می توانید نحوه دریافت مقدار یک ویژگی Property Let با استفاده از روال Property Get را بیاموزید.

دیدگاهتان را بنویسید