Kódovací standardy pro Microsoft Visual Basic


Na první stranu

TOPlist Standardy v. 1.0 (29.3.2001)


Obecná formátovací pravidla

Odsazení

  • Odsazení úrovní jsou 4 mezery.
  • Do kódu nevkládejte TAB znaky. Nastavení tabelátorů se může na jednotlivých strojích lišit.
  • Tabelátory nekombinovat s mezerami.

Okraje

  • Důležité je dodržovat pravidlo jeden příkaz na jeden řádek, aby nevznikaly zápisy typu: PromennaCislo1 := VolaniNejakeFunkce (); NejakaInaPromenna := NecoJineho;
  • Doporučený pravý okraj je 80 znaků. Pokud je řádek delší může se rozdělit na více řádků při zachování logického odsazení.

Poznámky

  • Poznámky začínají ’

Basic

Závorky

  • Mezi znaky a závorky vkládat mezery.

Příklad:

iRet = Connect ( Parametr, Parametr2, ParametremJeFce () ); // správně
iRet = Connect(Parametr,Parametr2,ParametremJeFce ()); // špatně
  • Nevkládat závorky tam, kde jsou zbytečné nebo nejsou generovány vývojovým prostředím.

Příklad:

If ( I = 42 ) Then // špatně
If ( I = 42 ) Or ( J = 42 ) Then // správně – závorky jsou povinné

Rezervovaná slova

  • Rezervovaná slova se vždy začínají velkým písmenem a zbytek malými písmeny. To je standardní vlastnost Visual Basicu.

Procedury a funkce

  • Jména začínají vždy velkými písmeny a velkými písmeny zvýrazňujeme začátek slova ve názvu.

Příklad:

Sub ThisIsMuchMoreReadableRoutineName();
  • Jméno musí odpovídat prováděné činnosti a začínat označením akce.

Příklad:

Sub FormatHardDrive();
  • Procedury nebo funkce vázané na událost si Visual Basic pojmenuje sám podle jména objektu a události.

Příklad:

Sub cmdOpen_Click ();
  • Procedury nebo funkce nastavující parametry by měly začínat prefixem Set.

Příklad:

Sub SetUserName();
  • Procedury nebo funkce vracející hodnoty by měly začínat prefixem Get.

Příklad:

Sub GetUserName();

Proměnné

  • Jméno proměnné má odpovídat jejímu použití.
  • První písmeno je velké.
  • Ve jmnénech nikdy nepoužívat podtržítko (kromě globálních předpon)
  • Pokud proměnná označuje níže uvedené typy , začíná prefixem.

Proměnné

b boolean
by byte
ctl control
c currency
dt date
d double
f float
h handle
i integer
l long
n numeric
obj object
sn single
s string
v variant
g_ globální
  • Z jména logických hodnot musí zcela jasně vyplývat hodnoty True nebo False.
  • Pro označení řídících proměnných cyklu se všeobecně používají i, j nebo k, ale lze použít i názvy odpovídající významu např. iUserIndex.

Příklad:

Dim
    iI As Integer
    iJ As Integer
    sWord As string
		dbData As Database
    bIsOK As Boolean

Konstanty

  • Jména konstant se píší velkými písmeny.

Příklad:

Const MAX_HEIGHT As Integer = 24;

Třídy

  • Jména tříd se řídi stejným pravidlem jako procedury/funkce.
  • Jména procedur třídy se také řídi stejným pravidlem jako normální procedury/funkce.
  • Vnitřní proměnné tříd mají prefix m_.

Příklad:

m_iCount
m_sServerName

Příkazy

If

  • Nejvíce používaný kód vkládat do sekce Then, méně používaný kód do sekce Else.
  • Místo zřetězení příkazů If používat příkaz Select case.
  • Nepoužívat více než pět úrovní vnoření.
  • Nepoužívat nadbytečné závorky v podmínkách.
  • Pokud se testuje více podmínek, první by měla být podmínka výpočtově nejméně náročná.
  • Jednotlivé podmínky se zapisují na samostatné řádky

Příklad:

If bCondition1 And
   bCondition2 And
   bCondition3 Then
Else
    ...
End If

Select case

  • Jednotlivé volby by se měly řadit vzestupně (číselně nebo abecedně). V některých případech závisí pořadí na frekvenci provádění voleb.
  • Příkazy jednotlivých voleb by měly být co nejjednodušší a neměly by přesáhnout pět řádků. Jinak je vhodnější pro kód napsat proceduru nebo funkci.
  • Klauzule Case Else by měla být použita pro default hodnoty nebo pro ošetření výjimek. Jednotlivé části příkazu jsou odsazeny.

Příklad:

Select case výraz
Case podmínka: 
    ... 
Case else
    ... 
End Select

For

  • Pro proměnné se používají postupně písmena i,j,k,l,…., nebo název odpovídající významu např.: iIndex, iUser, ….
  • Jednotlivé vložené cykly jsou odsazeny.

Příklad:

For i = 1 To 10 
For j = 1 To 10 
For k = 1 To 10 
    ...
Next k
Next j
Next i

Soubory

  • Jména souborů by měla obsahovat jeho význam. Velikost písmen viz procedury.
  • Jména se tvoří podle masky:
    SSS*CCC*.EXT
    kde:
    SSS* je název části projektu, kterého se soubor týká
    CCC* je podnázev upřesňující význam souboru
    EXT je standardní přípona FRM/FRX,BAS,CLS,…
  • Jméno formuláře/modulu by mělo odpovídat významu např. MainForm
    Standardní názvy:
    MainForm pro hlavní formulář aplikace
    AboutForm pro formulář O aplikaci
    LoginForm pro přihlašovací formulář
  • Pokud to není nezbytné, měl by se automaticky vytvářet pouze MainForm ostatní formuláře dynamicky.
  • Soubor by neměl obsahovat více než 1000 řádků.

Komentáře

  • Používají se komentáře:
  • Hlavička souboru

Příklad:

’*************************************************************
’
’ Název souboru (Účel souboru)
’
’ Projekt
’
’ Copyright (c) 2001 RTS CS s.r.o.
’ contact@rtscs.cz
’
’ Popis
’
’ Závislosti (modul, komponenty, ...
’
’
’ Historie změn:
’ Datum      Autor        Popis změny
’ 01.05.2001 Mr.X         vytvořil
’
’*************************************************************
’ Seznam úkolů: např.:,které jsou rozdělané nebo se musí ’udělat….
’
’************************************************************/
  • Hlavička funkce nebo procedury

Příklad:

’*************************************************************
’
’ Jméno funkce
’ Popis funkce
’ Popis vstupních parametrů:
’ Return code:
’
’ Historie změn:
’ Datum      Autor         Popis změny
’ 01.05.2001 Mr.X          vytvořil
’
’************************************************************/
Function iFind (sUserList() As String, sTargetUser As String) As Integer
Dim iCount As Integer ' Popis proměnné
Dim bFound As Integer ' Popis proměnné
' Popis funkčního bloku
iFind = -1
iCount = 0
' Popis funkčního bloku
While iCount <= Ubound(sUserList) and Not bFound
If sUserList(iCount) = sTargetUser Then
    bFound = True
    iFind = iCount
End If ' sUserList(iCount) = sTargetUser
iCount = iCount + 1
Wend ' iCount <= Ubound(sUserList) and ...
End Function
  • Popis deklarace proměnných

Příklad:

Dim
iI As Integer         ’popis proměnné
iJ As Integer         ’popis proměnné
sWord As string       ’popis proměnné
dbData As Database    ’popis proměnné
bIsOK As Boolean      ’popis proměnné
  • Komentář funkčního bloku

Příklad:

(mezera)
' cyklus …
For i = 1 To 10
    For j = 1 To 10
        For k = 1 To 10
            ...
        Next k
    Next j
Next i
  • Komentář bloku if, select, while, for je-li třeba na konec vložit komentář s obsahem odpovídajícího příkazu

Příklad:

While iCount <= Ubound(sUserList) and Not bFound
If sUserList(iCount) = sTargetUser Then
    bFound = True
    iFind = iCount
End If ' sUserList(iCount) = sTargetUser
iCount = iCount + 1
Wend ' iCount <= Ubound(sUserList) and ...

Komponenty

  • Jména instancí komponenty musí odpovídat jejich použití a obsahují prefix z malých písmen definující typ pro jednodušší vyhledávání. Nepoužívat standardní názvy generované IDE!
Prefixy standardních komponent:
Typ Prefix Příklad
3D Panel pnl pnlGroup
A    
ADO Data ado adoBiblio
Animated button ani aniMailBox
C    
Check box chk chkReadOnly
Combo box, drop-down list box cbo cboEnglish
Command button cmd cmdExit
Common dialog dlg dlgFileOpen
Communications com comFax
Control (užívat v proc., když je určitý typ neznámý) ctr ctrCurrent
D    
Data dat datBiblio
Data-bound combo box dbcbo dbcboLanguage
Data-bound grid dbgrd dbgrdQueryResult
Data-bound list box dblst dblstJobType
Data combo dbc dbcAuthor
Data grid dgd dgdTitles
Data list dbl dblPublisher
Data repeater drp drpLocation
Date picker dtp dtpPublished
Directory list box dir dirSource
Drive list box drv drvTarget
F    
File list box fil filSource
Flat scroll bar fsb fsbMove
Form frm frmEntry
Frame fra fraLanguage
G    
Gauge gau gauStatus
Graph gra graRevenue
Grid grd grdPrices
H    
Hierarchical flexgrid flex flexOrders
Horizontal scroll bar hsb hsbVolume
I    
Image img imgIcon
Image combo imgcbo imgcboProduct
ImageList ils ilsAllIcons
L    
Label lbl lblHelpMessage
Lightweight check box lwchk lwchkArchive
Lightweight combo box lwcbo lwcboGerman
Lightweight command button lwcmd lwcmdRemove
Lightweight frame lwfra lwfraSaveOptions
Lightweight horizontal scroll bar lwhsb lwhsbVolume
Lightweight list box lwlst lwlstCostCenters
Lightweight option button lwopt lwoptIncomeLevel
Lightweight text box lwtxt lwoptStreet
Lightweight vertical scroll bar lwvsb lwvsbYear
Line lin linVertical
List box lst lstPolicyCodes
ListView lvw lvwHeadings
M    
MAPI message mpmmpm mpmmpmSentMessage
MAPI session mps mpsSession
MCI mci mciVideo
Menu mnu mnuFileOpen
Month view mvw mvwPeriod
MS Chart ch chSalesbyRegion
MS Flex grid msg msgClients
MS Tab mst mstFirst
O    
OLE container ole oleWorksheet
Option button opt optGender
P    
Picture box pic picVGA
Picture clip clp clpToolbar
ProgressBar prg prgLoadFile
Remote Data rd rdTitles
R    
RichTextBox rtf rtfReport
S    
Shape shp shpCircle
Slider sld sldScale
Spin spn spnPages
StatusBar sta staDateTime
SysInfo sys sysMonitor
T    
TabStrip tab tabOptions
Text box txt txtLastName
Timer tmr tmrAlarm
Toolbar tlb tlbActions
TreeView tre treOrganization
U    
UpDown upd updDirection
V    
Vertical scroll bar vsb vsbRate
Obsah:

Obecná formátovací pravidla
Basic
Soubory
Komentáře
Komponenty