คงที่
เป็นเรื่องปกติที่จะค้นหาโค้ดที่มีค่าคงที่เกิดขึ้นซ้ำแล้วซ้ำอีก คุณอาจพบว่ารหัสใช้ตัวเลขที่จำยากซึ่งไม่มีความหมายที่ชัดเจน
ในกรณีเหล่านี้ สามารถใช้ค่าคงที่เพื่อปรับปรุงความสามารถในการอ่านและการบำรุงรักษาโค้ดได้อย่างมาก ค่าคงที่เป็นชื่อที่มีความหมายซึ่งแทนที่ค่าตัวเลขหรือสตริงที่ไม่เคยเปลี่ยนแปลง แม้ว่าค่าคงที่จะเหมือนกับตัวแปร แต่ก็ไม่สามารถแก้ไขได้เหมือนตัวแปร และไม่สามารถกำหนดค่าคงที่ใหม่ได้ ค่าคงที่มาจากสองแหล่ง:
1. ค่าคงที่ภายในหรือที่ระบบกำหนดนั้นจัดทำโดยแอปพลิเคชันและการควบคุม ค่าคงที่ Visual Basic แสดงอยู่ในไลบรารีวัตถุ Visual Basic (VB) และ Visual Basic สำหรับแอปพลิเคชัน (VBA) ใน "เบราว์เซอร์วัตถุ" แอปพลิเคชันอื่นๆ ที่มีไลบรารีอ็อบเจ็กต์ เช่น Microsoft Excel และ Microsoft P Project ยังมีรายการค่าคงที่ที่สามารถใช้กับอ็อบเจ็กต์ วิธีการ และคุณสมบัติของแอปพลิเคชันได้ ค่าคงที่ยังถูกกำหนดไว้ในไลบรารีวัตถุของแต่ละตัวควบคุม ActiveX สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Object Browser โปรดดูบทที่ 9 "การเขียนโปรแกรมด้วย Objects"
2. ค่าคงที่เชิงสัญลักษณ์หรือที่ผู้ใช้กำหนดจะถูกประกาศโดยใช้คำสั่ง Const ค่าคงที่ที่ผู้ใช้กำหนดจะอธิบายไว้ในส่วนถัดไป "การสร้างค่าคงที่ของคุณเอง"
ใน Visual Basic ชื่อค่าคงที่จะอยู่ในรูปแบบตัวพิมพ์ผสม และคำนำหน้าจะระบุชื่อของไลบรารีวัตถุที่กำหนดค่าคงที่ไว้ ค่าคงที่จากไลบรารีออบเจ็กต์ Visual Basic และ Visual Basic สำหรับ Applications เริ่มต้นด้วย vb เช่น vbTileHorizontal
เมื่อออกแบบคำนำหน้า คุณควรพยายามอย่างเต็มที่เพื่อป้องกันความขัดแย้งโดยไม่ตั้งใจ แม้ว่าจะใช้คำนำหน้า แต่ไลบรารีอ็อบเจ็กต์สองไลบรารีอาจยังคงมีค่าคงที่เดียวกันซึ่งแสดงถึงค่าที่แตกต่างกัน ในกรณีนี้ ค่าคงที่ที่ถูกอ้างอิงจะขึ้นอยู่กับไลบรารีอ็อบเจ็กต์ใดที่มีลำดับความสำคัญสูงกว่า สำหรับข้อมูลเกี่ยวกับการเปลี่ยนลำดับความสำคัญของไลบรารีอ็อบเจ็กต์ โปรดดูส่วน "กล่องโต้ตอบอ้างอิง"
เพื่อให้แน่ใจว่าไม่มีความขัดแย้งของชื่อคงที่ คุณสามารถรับรองการอ้างอิงถึงค่าคงที่โดยใช้ไวยากรณ์ต่อไปนี้:
[libname.][modulename.]constname
Libname มักจะเป็นชื่อคลาสของตัวควบคุมหรือไลบรารี Modulename คือชื่อของโมดูลที่กำหนดค่าคงที่ไว้ Constname เป็นชื่อคงที่ แต่ละองค์ประกอบถูกกำหนดไว้ในไลบรารีวัตถุและสามารถดูได้ใน Object Browser
สร้างค่าคงที่ของคุณเอง
ไวยากรณ์สำหรับการประกาศค่าคงที่คือ :
[สาธารณะ|ส่วนตัว]Constconstantname[Astype]=expression
ชื่อคงที่ของพารามิเตอร์เป็นชื่อสัญลักษณ์ที่ถูกต้อง (กฎเหมือนกันกับที่ใช้สร้างชื่อตัวแปร) และนิพจน์ประกอบด้วยค่าคงที่ตัวเลขหรือค่าคงที่สตริงและตัวดำเนินการ แต่ไม่สามารถใช้การเรียกใช้ฟังก์ชันในนิพจน์ได้
คำสั่ง Const สามารถแสดงปริมาณ วันที่ และเวลา:
คอนสตคอนPi=3.14159265358979
PublicConstconMaxPlanetsAsInteger=9
ConstconReleaseDate=#1/1/95#
ค่าคงที่สตริงสามารถกำหนดได้โดยใช้คำสั่ง Const:
PublicConstconVersion=07.10.A
ConstconCodeName=ปริศนา
การประกาศคงที่หลายรายการสามารถวางในบรรทัดเดียวได้หากคั่นด้วยเครื่องหมายจุลภาค:
PublicConstconPi=3.14,conMaxPlanets=9,_
conWorldPop=6E 09
นิพจน์ทางด้านขวาของเครื่องหมายเท่ากับ (=) มักเป็นตัวเลขหรือสตริงสัญพจน์ แต่ก็สามารถเป็นนิพจน์ที่ผลลัพธ์เป็นตัวเลขหรือสตริงได้เช่นกัน (แม้ว่านิพจน์จะไม่สามารถมีการเรียกใช้ฟังก์ชันได้) คุณยังสามารถกำหนดค่าคงที่ใหม่โดยใช้ค่าคงที่ที่กำหนดไว้ก่อนหน้านี้ได้
ConstconPi2=conPi*2 เมื่อกำหนดค่าคงที่แล้ว ก็สามารถใส่ลงในโค้ดเพื่อให้โค้ดอ่านได้ง่ายขึ้น ตัวอย่างเช่น:
ระบบพลังงานแสงอาทิตย์แบบคงที่(1ToconMaxPlanets)
IfnumPeople>conWorldPopแล้วExitSub
กำหนดช่วงของค่าคงที่ที่ผู้ใช้กำหนด
เช่นเดียวกับการประกาศตัวแปร คำสั่ง Const มีขอบเขตและใช้กฎเดียวกัน:
เมื่อต้องการสร้างค่าคงที่ที่มีอยู่เฉพาะภายในกระบวนงาน ให้ประกาศค่าคงที่ภายในกระบวนงาน
เมื่อต้องการสร้างค่าคงที่ที่ถูกต้องสำหรับขั้นตอนทั้งหมดในโมดูล แต่ไม่ใช่สำหรับโค้ดใดๆ ภายนอกโมดูล ให้ประกาศค่าคงที่ในส่วนการประกาศของโมดูล
หากต้องการสร้างค่าคงที่ที่ถูกต้องตลอดทั้งแอปพลิเคชันของคุณ ให้ประกาศในส่วนการประกาศของโมดูลมาตรฐาน และวางคีย์เวิร์ดสาธารณะไว้หน้า Const ไม่สามารถประกาศค่าคงที่สาธารณะในโมดูลฟอร์มหรือโมดูลคลาสได้
สำหรับ ข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับขอบเขต โปรดดูส่วน "การทำความเข้าใจขอบเขตของตัวแปร" ในช่วงต้นของบทนี้
หลีกเลี่ยงการอ้างอิงแบบวงกลม
เนื่องจากค่าคงที่สามารถนิยามได้ในรูปของค่าคงที่อื่นๆ จึงต้องระมัดระวังไม่สร้างวงรอบหรือการอ้างอิงแบบวงกลมระหว่างค่าคงที่มากกว่าสองค่า การวนซ้ำเกิดขึ้นเมื่อมีค่าคงที่สาธารณะมากกว่าสองค่าในโปรแกรม และค่าคงที่สาธารณะแต่ละรายการถูกกำหนดโดยอีกค่าหนึ่ง ตัวอย่างเช่น:
'ในโมดูล 1:
PublicConstconA=conB*2 'ในแอปพลิเคชันทั้งหมด
' มีผลใช้ได้ใน '
'ในโมดูล 2:
PublicConstconB=conA/2 'ในแอปพลิเคชันทั้งหมด
' มีผลใช้ได้ใน '
หากเกิดการวนซ้ำ Visual Basic จะสร้างข้อความแสดงข้อผิดพลาดเมื่อพยายามเรียกใช้แอปพลิเคชัน ไม่สามารถรันโปรแกรมได้หากไม่แก้ไขการอ้างอิงแบบวงกลม เพื่อหลีกเลี่ยงวงจร ค่าคงที่สาธารณะสามารถจำกัดไว้ได้เพียงโมดูลเดียว หรือไม่เกินสองสามโมดูลเท่านั้น
ชนิดข้อมูล
ตัวแปรคือตำแหน่งที่ใช้เก็บค่า โดยมีชื่อและประเภทข้อมูล ชนิดข้อมูลของตัวแปรจะกำหนดวิธีการจัดเก็บบิตที่แสดงถึงค่าเหล่านั้นในหน่วยความจำของคอมพิวเตอร์ คุณยังสามารถระบุประเภทข้อมูลของตัวแปรเมื่อประกาศได้ ตัวแปรทั้งหมดมีประเภทข้อมูลเพื่อกำหนดประเภทข้อมูลที่สามารถจัดเก็บได้
ตามค่าเริ่มต้น หากไม่ได้ระบุประเภทข้อมูลในการประกาศ ประเภทข้อมูลของตัวแปรจะเป็น Variant ประเภทข้อมูลของตัวแปรนั้นเหมือนกับกิ้งก่า ซึ่งสามารถแสดงประเภทข้อมูลที่แตกต่างกันในโอกาสที่ต่างกันได้ เมื่อตัวแปรที่ระบุเป็นตัวแปร Variant ไม่จำเป็นต้องแปลงระหว่างชนิดข้อมูล Visual Basic จะทำการแปลงที่จำเป็นต่างๆ ให้เสร็จสิ้นโดยอัตโนมัติ
อย่างไรก็ตาม หากคุณทราบว่าตัวแปรจะเก็บข้อมูลประเภทเฉพาะเสมอ และคุณประกาศตัวแปรประเภทนั้น Visual Basic จะจัดการข้อมูลนี้ได้อย่างมีประสิทธิภาพมากขึ้น ตัวอย่างเช่น ตัวแปรที่เก็บชื่อของบุคคลจะแสดงเป็นชนิดข้อมูล String ได้ดีที่สุด เนื่องจากชื่อจะประกอบด้วยอักขระเสมอ
นอกจากตัวแปรแล้ว ชนิดข้อมูลยังใช้ในสถานการณ์อื่นๆ อีกด้วย เมื่อกำหนดค่าให้กับคุณสมบัติ ค่าจะมีประเภทข้อมูล พารามิเตอร์ของฟังก์ชันก็มีประเภทข้อมูลด้วย ในความเป็นจริง ใน Visual Basic ทุกอย่างที่เกี่ยวข้องกับข้อมูลจะเกี่ยวข้องกับชนิดข้อมูล
คุณยังสามารถประกาศอาร์เรย์ประเภทดั้งเดิมใดๆ ก็ได้
รายละเอียด สำหรับรายละเอียดเพิ่มเติม โปรดดูส่วน "อาร์เรย์" ภายหลังในบทนี้ บทที่ 15 "การออกแบบเพื่อประสิทธิภาพและความเข้ากันได้" ยังกล่าวถึงการปรับปรุงประสิทธิภาพของแอปพลิเคชันโดยการเลือกประเภทข้อมูล
ประกาศตัวแปรด้วยชนิดข้อมูล
ก่อนที่จะใช้ตัวแปรที่ไม่ใช่ตัวแปร คุณต้องประกาศตัวแปรเป็น Astype โดยใช้คำสั่ง Private, Public, Dim หรือ Static ตัวอย่างเช่น คำสั่งต่อไปนี้ประกาศตัวแปรประเภท Integer, Double, String และ Currency ตามลำดับ:
PrivateIAsInteger
DimAmtAsDouble
StaticYourNameAsString
PublicBillsPaidAsCurrency
คำประกาศสามารถรวมการประกาศหลายรายการได้ โปรดดูข้อความต่อไปนี้:
PrivateIAsInteger, AmtAsDouble
PrivateYourNameAsString, BillsPaidAsCurrency
การทดสอบส่วนตัว, จำนวน, JAsInteger
โปรดทราบว่า หากไม่มีการระบุประเภทข้อมูล ตัวแปรที่ระบุจะเป็นประเภทเริ่มต้น ในตัวอย่างข้างต้น ตัวแปร Test และ Amount เป็นประเภทข้อมูล Variant หากประสบการณ์ของคุณกับภาษาการเขียนโปรแกรมอื่นทำให้คุณเชื่อว่าตัวแปรทั้งหมดในคำสั่งประกาศเดียวกันมีประเภทข้อมูลที่ระบุเหมือนกัน (จำนวนเต็มในกรณีนี้) ผลลัพธ์ที่นี่อาจจะรีเฟรช
ชนิดข้อมูลตัวเลข
VisualBasic รองรับข้อมูลตัวเลขหลายประเภท: จำนวนเต็ม (จำนวนเต็ม), ยาว (จำนวนเต็มยาว), เดี่ยว (จุดลอยตัวที่มีความแม่นยำเดียว), สอง (จุดลอยตัวที่มีความแม่นยำสองเท่า) และสกุลเงิน (สกุลเงิน) โดยทั่วไปประเภทตัวเลขจะใช้พื้นที่จัดเก็บข้อมูลน้อยกว่าประเภทตัวแปร
หากคุณรู้ว่าตัวแปรจะเก็บจำนวนเต็ม (เช่น 12) เสมอ แทนที่จะเป็นตัวเลขที่มีจุดทศนิยม (เช่น 3.57) คุณควรประกาศให้เป็นประเภทจำนวนเต็มหรือแบบยาว จำนวนเต็มดำเนินการได้เร็วกว่าและใช้หน่วยความจำน้อยกว่าข้อมูลประเภทอื่น ชนิดจำนวนเต็มมีประโยชน์อย่างยิ่งเมื่อใช้เป็นตัวแปรตัวนับภายในลูป For...Next
สำหรับ ข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างการควบคุม โปรดดู "ภาพรวมโครงสร้างการควบคุม" ภายหลังในบทนี้ หากตัวแปรมีทศนิยม ก็สามารถประกาศเป็นตัวแปรเดี่ยว คู่ หรือสกุลเงินได้ ชนิดข้อมูลสกุลเงินรองรับตัวเลข 4 หลักทางด้านขวาของจุดทศนิยมและ 15 หลักทางด้านซ้ายของจุดทศนิยม ซึ่งเป็นชนิดข้อมูลจุดคงที่ที่แม่นยำซึ่งเหมาะสำหรับการคำนวณสกุลเงิน ตัวเลขทศนิยม (เดี่ยวและคู่) มีช่วงที่ถูกต้องมากกว่าสกุลเงินมาก แต่อาจมีข้อผิดพลาดในการพกพาเล็กน้อย
โปรดทราบว่า ค่าจุดลอยตัวสามารถแสดงเป็น mmmEeee หรือ mmmDeee โดยที่ mmm คือแมนทิสซาและ eee เป็นเลขชี้กำลัง (ยกกำลังฐาน 10) ค่าบวกสูงสุดของชนิดข้อมูลเดี่ยวคือ 3.402823E 38 หรือ 3.4 คูณ 10 ยกกำลัง 38 ค่าบวกสูงสุดของชนิดข้อมูล Double คือ 1.79769313486232D 308 หรือ 1.8 คูณ 10 ยกกำลัง 308 การใช้ D เพื่อแยกแมนทิสซาและส่วนเลขชี้กำลังของตัวอักษรตัวเลขจะทำให้ค่านั้นถือเป็นประเภทข้อมูลคู่ ในทำนองเดียวกัน การใช้ E ในลักษณะนี้จะทำให้ค่าถือเป็นประเภทข้อมูลเดี่ยว
ชนิดข้อมูลแบบไบต์
หากตัวแปรมีเลขฐานสอง ให้ประกาศเป็นอาร์เรย์ประเภทข้อมูลไบต์ (อาร์เรย์จะกล่าวถึงใน "อาร์เรย์" ต่อไปในบทนี้) การจัดเก็บข้อมูลไบนารี่ในตัวแปรไบต์จะรักษาข้อมูลระหว่างการแปลงรูปแบบ เมื่อตัวแปร String ถูกแปลงระหว่างรูปแบบ ANSI และ Unicode ข้อมูลไบนารีใดๆ ในตัวแปรจะถูกทำลาย Visual Basic จะแปลงระหว่าง ANSI และ Unicode โดยอัตโนมัติในสถานการณ์ต่อไปนี้:
เมื่ออ่านไฟล์
เมื่อเขียนไฟล์
เมื่อเรียก DLL
เมื่อเรียกวิธีการและคุณสมบัติของวัตถุ
ยกเว้นการลบแบบเอกภาค ตัวดำเนินการทั้งหมดที่สามารถดำเนินการกับจำนวนเต็มสามารถดำเนินการกับชนิดข้อมูลไบต์ได้ เนื่องจากไบต์เป็นประเภทที่ไม่ได้ลงนามตั้งแต่ 0-255 จึงไม่สามารถแทนจำนวนลบได้ ดังนั้นเมื่อทำการลบแบบเอกนารี VisualBasic จะแปลงไบต์เป็นจำนวนเต็มที่มีเครื่องหมายก่อน
ตัวแปรตัวเลขทั้งหมดสามารถกำหนดให้กับตัวแปรอื่นๆ และตัวแปรประเภทตัวแปรได้ ก่อนที่จะกำหนดตัวเลขทศนิยมให้เป็นจำนวนเต็ม Visual Basic จะปัดเศษทศนิยมของตัวเลขทศนิยมแทนที่จะลบออก
รายละเอียด สำหรับ รายละเอียดเกี่ยวกับการแปลง Unicode และ ANSI โปรดดูบทที่ 16 "การทำให้เป็นสากล"
ชนิดข้อมูลสตริง
หากตัวแปรมีสตริงอยู่เสมอและไม่เคยมีค่าตัวเลข คุณสามารถประกาศให้เป็นประเภทสตริงได้
PrivateSAsString
จากนั้นคุณสามารถกำหนดสตริงให้กับตัวแปรนี้และดำเนินการกับตัวแปรนั้นโดยใช้ฟังก์ชันสตริง
S=ฐานข้อมูล
S=ซ้าย(S,4)
ตามค่าเริ่มต้น ตัวแปรสตริงหรือพารามิเตอร์จะเป็นสตริงที่มีความยาวผันแปรได้ เมื่อมีการกำหนดข้อมูลใหม่ให้กับสตริง ความยาวของมันอาจเพิ่มขึ้นหรือลดลงได้ นอกจากนี้ยังสามารถประกาศสตริงให้มีความยาวคงที่ได้ สามารถประกาศสตริงที่มีความยาวคงที่ได้โดยใช้ไวยากรณ์ต่อไปนี้:
สตริง*ขนาด
ตัวอย่างเช่น หากต้องการประกาศสตริงที่มีอักขระ 50 ตัว ให้ใช้คำสั่งต่อไปนี้:
DimEmpNameAsString*50
หากมีการกำหนดอักขระน้อยกว่า 50 ตัวให้กับสตริง ส่วนที่ขาดหายไปของ EmpName จะถูกเติมด้วยช่องว่าง หากความยาวที่กำหนดให้กับสตริงยาวเกินไปและไม่สามารถกลายเป็นสตริงที่มีความยาวคงที่ได้ Visual Basic จะตัดทอนอักขระส่วนเกินโดยตรง
เนื่องจากสตริงที่มีความยาวคงที่จะเต็มไปด้วยช่องว่างที่ส่วนท้ายของช่องว่างพิเศษ ฟังก์ชัน Trim และ RTrim ที่ลบช่องว่างจึงมีประโยชน์มากเมื่อต้องจัดการกับสตริงที่มีความยาวคงที่ สตริงที่มีความยาวคงที่ในโมดูลมาตรฐานสามารถประกาศเป็นสาธารณะหรือส่วนตัวได้ ในแบบฟอร์มและโมดูลคลาส สตริงที่มีความยาวคงที่จะต้องประกาศเป็นส่วนตัว
สำหรับรายละเอียด โปรดดู "ฟังก์ชัน Ltrim, RTrim และ Trim" ใน "คู่มืออ้างอิงภาษา Visual Basic 6.0"
สลับสตริงและตัวเลข
ถ้าสตริงแทนค่าตัวเลข สตริงนั้นสามารถกำหนดให้กับตัวแปรตัวเลขได้ ค่าตัวเลขสามารถกำหนดให้กับตัวแปรสตริงได้ ตัวอย่างเช่น วางปุ่มคำสั่ง กล่องข้อความ และกล่องรายการบนแบบฟอร์ม ป้อนรหัสต่อไปนี้ในเหตุการณ์คลิกของปุ่มคำสั่ง เรียกใช้แอปพลิเคชันแล้วคลิกปุ่มคำสั่ง
PrivateSubCommand1_คลิก()
DimintXAsInteger
DimstrYAsString
strY=100.23
intX=strY 'ส่งสตริงไปยังตัวแปรตัวเลข'
List1.AddItemCos(strY) 'เพิ่มค่าโคไซน์ของค่าในสตริง
'เพิ่มลงในกล่องรายการ
strY=Cos(strY) 'โอนค่าโคไซน์ไปยังตัวแปรสตริง
Text1.Text=strY 'แสดงสตริงในกล่องข้อความ
สิ้นสุดย่อย
Visual Basic จะบังคับตัวแปรให้เป็นประเภทข้อมูลที่เหมาะสมโดยอัตโนมัติ โปรดใช้ความระมัดระวังเมื่อแปลงสตริงและค่าตัวเลข หากค่าในสตริงที่ส่งไม่ใช่ค่าตัวเลข จะเกิดข้อผิดพลาดขณะดำเนินการ
ชนิดข้อมูลบูลีน
หากค่าของตัวแปรเป็นเพียงข้อมูล "จริง/เท็จ", "ใช่/ไม่ใช่" และ "เปิด/ปิด" ก็สามารถประกาศเป็นประเภทบูลีนได้ ค่าเริ่มต้นของบูลีนคือเท็จ ในตัวอย่างด้านล่าง blnRunning เป็นตัวแปรบูลีนที่เก็บการตั้งค่าใช่/ไม่ใช่แบบง่ายๆ
DimblnRunningAsBoolean
'ตรวจดูว่าเทปหมุนหรือไม่
IfRecorder.Direction=1จากนั้น
blnRunning=จริง
เอนดิฟ
ชนิดข้อมูลวันที่
ค่าวันที่และเวลาสามารถมีอยู่ในประเภทข้อมูลวันที่เฉพาะหรือในตัวแปรตัวแปร คุณสมบัติวันที่ทั่วไปใช้กับทั้งสองประเภท
สำหรับ ข้อมูลเพิ่มเติม โปรด ดูส่วน "การจัดเก็บค่าวันที่/เวลาในตัวแปรตัวแปร" ของ "หัวข้อตัวแปรขั้นสูง" ในคู่มือออนไลน์
เมื่อประเภทข้อมูลตัวเลขอื่นๆ ถูกแปลงเป็นวันที่ ค่าทางด้านซ้ายของจุดทศนิยมจะแสดงถึงข้อมูลวันที่ และค่าทางด้านขวาของจุดทศนิยมจะแสดงถึงเวลา เที่ยงคืนคือ 0 และเที่ยงคือ 0.5 ตัวเลขติดลบแสดงถึงวันที่ก่อนวันที่ 31 ธันวาคม พ.ศ. 2442
-