खोज…
चर नाम
चर डेटा रखती हैं। एक संज्ञा का उपयोग करते हुए, उनके डेटा प्रकार या दायरे के बाद नहीं , के लिए उनका उपयोग करने के बाद उन्हें नाम दें। यदि आप अपने चर (उदाहरण के लिए thing1, thing2, thing3
) को संख्या के लिए मजबूर महसूस करते हैं, तो इसके बजाय एक उपयुक्त डेटा संरचना का उपयोग करने पर विचार करें (उदाहरण के लिए एक सरणी, एक Collection
या एक Dictionary
)।
चरों के नाम जो मानों के चलने योग्य सेट का प्रतिनिधित्व करते हैं - जैसे कि एक सरणी, एक Collection
, एक Dictionary
, या कक्षों की Range
, बहुवचन होना चाहिए।
कुछ सामान्य VBA नामकरण परंपराएँ इस प्रकार हैं:
प्रक्रिया-स्तरीय चर के लिए :
camelCase
Public Sub ExampleNaming(ByVal inputValue As Long, ByRef inputVariable As Long)
Dim procedureVariable As Long
Dim someOtherVariable As String
End Sub
मॉड्यूल स्तर के चर के लिए:
PascalCase
Public GlobalVariable As Long
Private ModuleVariable As String
स्थिरांक के लिए:
SHOUTY_SNAKE_CASE
का उपयोग आमतौर पर चर से स्थिरांक को अलग करने के लिए किया जाता है:
Public Const GLOBAL_CONSTANT As String = "Project Version #1.000.000.001"
Private Const MODULE_CONSTANT As String = "Something relevant to this Module"
Public Sub SomeProcedure()
Const PROCEDURE_CONSTANT As Long = 10
End Sub
हालाँकि PascalCase
नाम क्लीनर दिखने वाला कोड बनाते हैं और उतने ही अच्छे होते हैं, दिए गए IntelliSense चर और PascalCase
लिए विभिन्न आइकन का उपयोग करता है:
हंगेरियन नोटेशन
उन्हें उनके नाम के लिए उपयोग किया जाता है, उनके डेटा प्रकार या दायरे के बाद नहीं ।
"हंगेरियन नोटेशन यह देखना आसान बनाता है कि चर का प्रकार क्या है"
यदि आप अपना कोड लिखते हैं, जैसे कि प्रक्रियाएं सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल (जैसा कि होना चाहिए) का पालन करती हैं, तो आपको किसी भी प्रक्रिया के शीर्ष पर परिवर्तनीय घोषणाओं की एक स्क्रीनफुल पर नहीं देखना चाहिए; अपने पहले उपयोग के लिए जितना संभव हो सके चर घोषित करें, और यदि आप उन्हें स्पष्ट प्रकार से घोषित करते हैं, तो उनका डेटा प्रकार हमेशा सादे दृष्टि में होगा। VBE के Ctrl + i शॉर्टकट का उपयोग टूलटिप में एक चर के प्रकार को प्रदर्शित करने के लिए भी किया जा सकता है।
एक चर का उपयोग इसके डेटा प्रकार की तुलना में बहुत अधिक उपयोगी जानकारी के लिए किया जाता है, विशेष रूप से वीबीए जैसी भाषा में जो खुशी से और निहित रूप से एक प्रकार को दूसरे में आवश्यकतानुसार परिवर्तित करता है।
इस उदाहरण में iFile
और strFile
पर विचार करें:
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
Dim bRetVal As Boolean
Dim iFile As Integer
On Error GoTo CleanFail
iFile = FreeFile
Open strFile For Input As #iFile
Input #iFile, strData
bRetVal = True
CleanExit:
Close #iFile
bReadFile = bRetVal
Exit Function
CleanFail:
bRetVal = False
Resume CleanExit
End Function
से तुलना:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
On Error GoTo CleanFail
Dim handle As Integer
handle = FreeFile
Open path For Input As #handle
Input #handle, outContent
Dim result As Boolean
result = True
CleanExit:
Close #handle
CanReadFile = result
Exit Function
CleanFail:
result = False
Resume CleanExit
End Function
strData
को शीर्ष उदाहरण में ByRef
पास किया गया है, लेकिन इस तथ्य के साथ कि हम यह देखने के लिए पर्याप्त भाग्यशाली हैं कि यह स्पष्ट रूप से इस तरह से पारित हो गया है, कोई संकेत नहीं है कि strData
वास्तव में फ़ंक्शन द्वारा वापस आ गया है।
नीचे का उदाहरण इसे outContent
नाम outContent
; यह out
उपसर्ग है क्या हंगेरियन नोटेशन के लिए आविष्कार किया गया था: यह स्पष्ट करने में मदद करने के लिए कि एक चर का उपयोग किस लिए किया जाता है , इस मामले में स्पष्ट रूप से इसे "आउट" पैरामीटर के रूप में पहचानने के लिए।
यह उपयोगी है, क्योंकि IntelliSense स्वयं द्वारा ByRef
प्रदर्शित नहीं करता है, तब भी जब पैरामीटर स्पष्ट रूप से संदर्भ द्वारा पारित किया जाता है:
जिससे होता है...
हंगेरियन सही किया
हंगेरियन नोटेशन मूल रूप से चर प्रकार के साथ कुछ भी नहीं था । वास्तव में, हंगेरी संकेतन किया सही वास्तव में उपयोगी है। इस छोटे उदाहरण पर विचार करें ( ByVal
और As Integer
को संक्षिप्त As Integer
हटा दिया गया है):
Public Sub Copy(iX1, iY1, iX2, iY2)
End Sub
से तुलना:
Public Sub Copy(srcColumn, srcRow, dstColumn, dstRow)
End Sub
src
और dst
यहां हंगेरियन नोटेशन उपसर्ग हैं, और वे उपयोगी जानकारी देते हैं जो अन्यथा पहले से ही पैरामीटर नामों या इंटेलीजेंसी से हमें घोषित प्रकार नहीं दिखा सकते हैं।
बेशक, यह उचित अवहेलना और वास्तविक शब्दों का उपयोग करने के लिए सभी को व्यक्त करने का एक बेहतर तरीका है, जिसे ज़ोर से सुना जा सकता है और समझ में आता है - एक आकस्मिक उदाहरण के रूप में:
Type Coordinate
RowIndex As Long
ColumnIndex As Long
End Type
Sub Copy(source As Coordinate, destination As Coordinate)
End Sub
प्रक्रिया के नाम
प्रक्रियाएं कुछ करती हैं । एक क्रिया का उपयोग करके वे क्या कर रहे हैं, उन्हें नाम दें। यदि किसी प्रक्रिया का सटीक नामकरण संभव नहीं है, तो संभव है कि प्रक्रिया बहुत सी चीजें कर रही हो और छोटे, अधिक विशिष्ट प्रक्रियाओं में टूट जाए।
कुछ सामान्य VBA नामकरण परंपराएँ इस प्रकार हैं:
सभी प्रक्रियाओं के लिए:
PascalCase
Public Sub DoThing()
End Sub
Private Function ReturnSomeValue() As [DataType]
End Function
घटना हैंडलर प्रक्रियाओं के लिए:
ObjectName_EventName
Public Sub Workbook_Open()
End Sub
Public Sub Button1_Click()
End Sub
घटना संचालकों को आमतौर पर VBE द्वारा स्वचालित रूप से नामित किया जाता है; ऑब्जेक्ट और / या हैंडल किए गए इवेंट का नाम लिए बिना उनका नाम बदलने से कोड टूट जाएगा - कोड चलेगा और संकलन करेगा, लेकिन हैंडलर प्रक्रिया अनाथ हो जाएगी और कभी भी निष्पादित नहीं होगी।
बूलियन सदस्य
एक बूलियन-वापसी समारोह पर विचार करें:
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
End Function
से तुलना:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
End Function
Can
प्रीफिक्स, b
प्रीफिक्स के समान उद्देश्य को पूरा करता है : यह Boolean
रूप में फ़ंक्शन के रिटर्न मान की पहचान करता है। लेकिन b
से बेहतर पढ़ Can
है:
If CanReadFile(path, content) Then
की तुलना में:
If bReadFile(strFile, strData) Then
बुलियन-लौटने वाले सदस्यों (कार्यों और गुणों) के सामने उपसर्गों जैसे कि Can
, Is
या Has
का उपयोग करने पर विचार करें, लेकिन तभी जब वे मूल्य जोड़ते हैं। यह वर्तमान Microsoft नामकरण दिशानिर्देशों के अनुरूप है।