ตัวแปร และ procedure
ตัวแปร และ procedure เป็นส่วนประกอบพื้นฐานของการคำนวณและประมวลผลในโปรแกรมประยุกต์ Visual Basic
ขอบเขตของตัวแปร
ตัวแปรของ Visual Basic สามารถมองเห็นได้เมื่อเข้าไปใน procedure หรือ โมดูล และตัวแปรแต่ละตัวมีขอบเขต และอายุไม่เท่ากัน ขึ้นกับวิธีการประกาศลักษณะตัวแปร
ขอบเขต (Scope) หรือการมองเห็น ของตัวแปร เป็นการระบุเข้าถึงตัวแปร เช่น ตัวแปรที่กำหนดเป็น public สามารถอ่านและเขียนได้จากทุกส่วนของโปรแกรม แต่ถ้ากำหนดตัวแปรเป็น private จะเข้าถึงได้เฉพาะภายในโมดูล
อายุ (Lifetime) ของตัวแปร เป็นระยะเวลาที่ตัวแปรทำงานได้และใช้หน่วยความจำ เช่น ตัวแปรที่กำหนดเป็น public อาจจะมีอายุเท่ากับการเรียกใช้โปรแกรมประยุกต์ (แต่ไม่ใช่ทุกกรณี) ในขณะที่การกำหนดเป็นแบบ local dynamic จะได้รับการสร้างเป็นครั้งๆ เมื่อมีการประมวลผล procedure และถูกทำลายเมื่อออกจาก procedure
ตัวแปร Global
การประกาศตัวแปร global ใช้คีย์เวิร์ด Public ในโมดูล BAS ซึ่งตัวแปร global สามารถอ่านและนำไปใช้จากทุกส่วนในโปรแกรม
' ในส่วนการประกาศของ โมดูล BAS
Public UserCount as Long
วิธีการประกาศตัวแปร global สามารถใช้โครงสร้าง global UDT โดยการรวมตัวแปร global และประกาศตัวแปร global 1 ตัวที่มีประเภทเป็น global UDT
' ในส่วนการประกาศของ โมดูล BAS
Public Type GlobalUDT
UserCount As Long
UserName As String
'
End Type
Public gloPerson As GlobalUDT
ตัวแปรระดับโมดูล
ตัวแปรระดับโมดูล เป็นตัวแปรที่ใช้เฉพาะในโมดูลที่ประกาศ และการประกาศใช้คีย์เวิร์ด Private หรือ Dim ในส่วนการประกาศตัวแปรของโมดูล เช่น โมดูลมาตรฐานของ BAS โมดูลของฟอร์ม โมดูลของ class เป็นต้น
' ประกาศในส่วนการประกาศของ โมดูล
Private Long in Time As Date
Dim Login Password As String
คีย์เวิร์ด Public สามารถใช้ประกาศตัวแปรระดับโมดูลได้เช่นกัน ยกเว้น ในโมดูล BAS (การใช้ Public ในโมดูล BAS จะเป็นตัวแปร global)
แต่จะทำให้ตัวแปรระดับโมดูลที่ใช้คีย์เวิร์ด Public สามารถเข้าถึงได้จาก sub procedure ทั้งหมดในโมดูลเดียวกัน และเข้าได้จากภายนอก
' ประกาศในส่วนการประกาศของฟอร์ม
Public CustomerName As String
การเข้าถึงจากภายนอก เป็นการเข้าถึงในฐานะคุณสมบัติที่เจาะจง ส่วนการเข้าถึงจากภายในเป็นการเข้าถึงในฐานะตัวแปร
Form1.CustomerName = "John Smith"
อายุของตัวแปรระดับโมดูล จะเท่ากับการเรียกใช้โมดูล
ตัวแปร Dynamic Local
ตัวแปร dynamic local เป็นการประกาศภายใน procedure และมีขอบเขตเฉพาะภายใน procedure อายุของตัวแปรขึ้นกับ procedure โดยทุกครั้งที่ประมวลผล procedure จึงจะมีการสร้างตัวแปร เมื่อออกจาก procedure ตัวแปรจะถูกลบหน่วยความจำ
Sub Print Invoice ( )
Dim text As String
'
End Sub
ตัวแปร Static Local
ตัวแปร static Local มีลักษณะผสมเพราะมีขอบเขตแบบตัวแปร local แต่มีอายุเหมือนตัวแปรระดับโมดูล ค่าของตัวแปรจะอยู่ระหว่างการเรียก procedure จนถึงการ unload โมดูลจากหน่วยความจำ การประกาศตัวแปรใช้คีย์เวิร์ด Static
Sub Print Invoice ( )
Static InProgress As Boolean
'
End Sub
หรือใช้การประกาศตัวแปร ใน static procedure ตัวแปรภายใน procedure จะเป็นตัวแปรแบบ static local
Static Sub PrintInvoice ( )
Dim InProgress As Boolean
'
End Sub
ประเภทข้อมูล
1. ประเภทข้อมูลพื้นฐาน
ประเภทข้อมูล |
ประเภท |
ขนาด |
การเก็บข้อมูลหรือช่วงข้อมูล |
Integer |
จำนวนเต็ม |
2 ไบต์ |
32,768 ถึง 32,767 |
Long |
จำนวนเต็ม |
4 ไบต์ |
2,147,483,648 ถึง 2,147,483,647 |
Boolean |
จำนวนเต็ม |
2 ไบต์ |
เก็บค่า 0 และ 1 ซึ่งแทน False หรือ True |
Byte |
จำนวนเต็ม |
1 ไบต์ |
เก็บค่าในช่วง 0 ถึง 255 |
Single |
จำนวนทศนิยม |
4 ไบต์ |
ค่าลบ 3.402823E38 ถึง 1.401298E-45
ค่าบวก 1.401298E-45 ถึง 3.402823E38 |
Double |
จำนวนทศนิยม |
8 ไบต์ |
ค่าลบ 1.79769313486232E308 ถึง -4.94065645841247E-324
ค่าบวก 4.94065645841247E-324 ถึง 1.79769313486232E308 |
Currency |
จำนวนทศนิยม (4 ตำแหน่ง) |
8 ไบต์ |
922,337,203,477.5808 ถึง 922,337,203,477.5807 |
|
จำนวนทศนิยม |
8 ไบต์ |
ค่าที่ไม่มีทศนิยม +/- 79,228,162,514,264,337,593,543,950,335
ค่าที่มีทศนิยม +/- 7.92281625142643 37593543950335 และมีทศนิยม 28 ตำแหน่ง
|
String |
ข้อความ |
|
|
Date |
วันที่/เวลา |
8 ไบต์ |
เก็บค่าระหว่าง 1 มกราคม ค.ศ. 100 ถึง 31 ธันวาคม ค.ศ. 9999 และเวลาใดๆ Date ใช้ 8 ไบต์เหมือนกับ Double แต่โครงสร้างมีความแตกต่างกัน โดยส่วนจำนวนเต็มเป็นสารสนเทศของวัน และทศนิยมเป็นส่วนของเวลา |
Variant |
Variant |
16 ไบต์ |
เก็บค่าของตัวแปร Variant จะรักษาประเภทข้อมูลเดิมของตัวแปรและค่าเริ่มต้นของตัวแปร |
อ๊อบเจค |
อ๊อบเจค |
|
เก็บการอ้างอิง |
2. ประเภทข้อมูลอ๊อบเจค
อ๊อบเจคใน Visual basic เป็นตัวแปรประเภทที่เก็บการอ้างอิง
การประกาศตัวแปรอ๊อบเจคแบบทั่วไป
Dim frm As Form
Dim mdifrm As MDIForm
Dim Ctrl As Control
Dim Obj As Object
การประกาศตัวแปรอ๊อบเจคแบบเจาะจง
Dim frm As frmOrder
Dim txtSalary As TextBox
Dim wrk As Excel.Worksheet
การอ้างอิงค่าของตัวแปรอ๊อบเจคให้ใช้คีย์เวิร์ด Set
Set frm = frmCustomer
Set txtSalary = Text1
เมื่อกำหนดการอ้างอิงแล้วตัวแปรอ๊อบเจคสามารถใช้คุณสมบัติและเมธอดของตัวแปรเดิม
frm.Caption = "Hello World"
txtSalary.Text = Format(99000, "Currency")
การยกเลิกการอ้างอิงให้ค่าตัวแปรเป็น Nothing
Set frm = Nothing
3. ประเภทข้อมูล Aggregate
ประเภทข้อมูล Aggregate มีพื้นฐานมาจากประเภทข้อมูลพื้นฐาน (Native) โดยนำมาสร้างเป็นกลุ่มหรือบล็อกเพื่อก่อรูปเป็นแบบรวม หรือ Aggregate
3.1 Array
Array เป็นกลุ่มตัวแปรที่มีประเภทของข้อมูลชนิดเดียวกัน Visual Basic สนับสนุน array สร้างประเภทข้อมูลให้กับ element และสามารถสร้างได้ตั้งแต่ 1 มิติจนถึง 60 มิติ
3.1.1 Static array เป็นการกำหนดโดยระบุขนาดของ array ตัวเลขที่ระบุขนาดจะทราบเมื่อมีการคอมไพล์ แล้วจึงจะมีการกำหนดหน่วยความจำให้ การสร้าง array ใช้ประโยคคำสั่ง Dim กับอากิวเมนต์ที่เป็นค่าคงที่
Dim Names (100) As String
ดัชนีของ Array เริ่มจาก 0 ดังนั้นขนาดของ Array ตามตัวอย่างจะเท่ากับ 101
3.1.2 Dynamic array เป็นการกำหนด array โดยไม่ระบุขนาด แต่จะระบุขนาดเมื่อมีการใช้งาน ทำให้สะดวกกับผู้เขียนโปรแกรม ในขณะที่ static array ไม่สามารถปรับเปลี่ยนขนาดได้ การสร้าง dynamic array จะประกาศเพื่อทำให้มองเห็นได้ โดยใช้ประโยคคำสั่ง Dim กับวงเล็บว่าง เมื่อถึงขั้นตอนการใช้งาน จึงใช้ประโยคคำสั่ง ReDim สำหรับระบุขนาดที่แน่นอน
' BAS module
Dim Customers ( ) As String
Sub Main ( )
ReDim Customers (2000) As String
End Sub
ถ้าต้องการใช้ดัชนีค่าด้านล้างแตกต่างจาก 0 ให้ใช้ไวยากรณ์นี้
ReDim Customers (1 to 1000) As String
Dim Names (1 to 100) As String
การสร้าง dynamic array ซ้ำ โดยไม่ต้องการให้ลบค่าเดิม เนื่องจากการสร้างใหม่จะมีการปรับค่าใหม่ทำให้ข้อมูลเดิมหายไป
ให้ใช้คำสั่ง ReDim Preserve
ReDim Preserve Customers (2000) As String
3.2 User-Defined Type
User-Defined Type (UDT) เป็นโครงสร้างข้อมูลแบบรวมที่สามารถควบคุมตัวแปรหลายตัวที่มีประเภทข้อมูลพื้นฐาน ก่อนการใช้ตัวแปร UDT ต้องประกาศโครงสร้างใช้ Type ในส่วนประกาศตัวแปรของโมดูล
Private Type EmployeeUDT
Name As String
Department As Long
Salary As Currency
End Type
Procedure
โมดูลของ Visual Basic ประกอบส่วนประกาศที่ใช้สำหรับการประกาศค่าตัวแปร ค่าคงที่และกลุ่มของ procedure สามารถแบ่งเป็น 2 ประเภท คือ
Sub Procedure เป็น procedure ที่ไม่ส่งค่า และไม่ใช่สามารถใช้เป็น expression ได้ แต่สามารถใช้เป็น Event procedure
Function เป็น procedure ที่ส่งคืนค่าเมื่อประมวลผลแล้วและใช้เป็น expression ได้
ขอบเขตของ Procedure
procedure สามารถจัดแบ่งได้ดังนี้
Private Procedure สามารถทำงานเฉพาะฟอร์มภายในโมดูล ที่กำหนดไว้
Public Procedure สามารถเรียกจากภายนอกโมดูล ถ้าโมดูลเป็น public จะสามารถเรียกจากภายนอกโปรแกรม ผ่าน COM
Friend Procedure มีลักษณะกึ่งกลางระหว่าง private และ public เช่น สามารถเรียกได้จากที่ต่าง ๆ ภายใน Project แต่ไม่สามารถเรียกจากภายนอกโปรแกรมได้
|