Propósito da Padronização
Em aplicações Visual Basic ,
variáveis globais somente devem ser usadas quando não existe outro meio de
compartilhar dados entre formulários.
Quando se fizer necessária a declaração variáveis globais é uma boa
prática manter todas dentro de um módulo específico (.bas).
O principal
motivo pelo qual se faz necessária uma padronização nos procedimentos de
programação é que todos possamos “falar a mesma língua” e em procedimentos de
manutenção a perda de tempo com entendimento seja a menor possível.
Uma boa
padronização de codificação resulta em códigos mais inteligíveis, precisos e
comuns a todos os membros de uma equipe de desenvolvimento de projetos.
O propósito
de uma padronização não é “engessar” o programador de modo que sua criatividade
se mantenha escondida, mas sim, manter um conjunto básico de requisitos que o
programa deve ter para que qualquer outro desenvolvedor possa encontrar os
pontos primordiais para um entendimento do fluxo de processamento.
Padrões de nomenclatura para
objetos
Objetos devem ser nomeados com um prefixo
consistente que permita uma rápida identificação do tipo do objeto e das
propriedades e métodos relativos ao mesmo.
O padrão de nomenclatura para objetos no Visual
Basic é descrito á seguir:
Objeto
|
Prefixo
|
Exemplo
|
Grupo de Projetos
|
grp
|
grpSalesController
|
Projeto
|
prj
|
prjSalesController
|
Form
|
frm
|
frmSales
|
Classe (Business Services)
|
cls
|
clsSales_bs
|
Classe (Data Services)
|
cls
|
clsSales_ds
|
Módulo
|
mod
|
modSales
|
User Controls
|
uct
|
uctTextBox
|
3D Panel
|
pnl
|
pnlGroup
|
ADO Data
|
ado
|
adoBiblio
|
Animated button
|
ani
|
aniMailBox
|
Check box
|
chk
|
chkReadOnly
|
Combo
box, drop-down list box
|
cbo
|
cboEnglish
|
Command button
|
cmd
|
cmdExit
|
Common dialog
|
dlg
|
dlgFileOpen
|
Communications
|
com
|
comFax
|
Control (usado em procedures quando o tipo do objeto é
desconhecido)
|
ctr
|
ctrCurrent
|
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
|
File list box
|
fil
|
filSource
|
Flat scroll bar
|
fsb
|
fsbMove
|
Form
|
frm
|
frmEntry
|
Frame
|
fra
|
fraLanguage
|
Gauge
|
gau
|
gauStatus
|
Graph
|
gra
|
graRevenue
|
Grid
|
grd
|
grdPrices
|
Hierarchical flexgrid
|
flex
|
flexOrders
|
Horizontal scroll bar
|
hsb
|
hsbVolume
|
Image
|
img
|
imgIcon
|
Image combo
|
imgcbo
|
imgcboProduct
|
ImageList
|
ils
|
ilsAllIcons
|
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
|
MAPI message
|
mpm
|
mpmSentMessage
|
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
|
OLE container
|
ole
|
oleWorksheet
|
Option button
|
opt
|
optGender
|
Picture box
|
pic
|
picVGA
|
Picture clip
|
clp
|
clpToolbar
|
ProgressBar
|
prg
|
prgLoadFile
|
Remote Data
|
rd
|
rdTitles
|
RichTextBox
|
rtf
|
rtfReport
|
Shape
|
shp
|
shpCircle
|
Slider
|
sld
|
sldScale
|
Spin
|
spn
|
spnPages
|
StatusBar
|
sta
|
staDateTime
|
SysInfo
|
sys
|
sysMonitor
|
TabStrip
|
tab
|
tabOptions
|
Text box
|
txt
|
txtLastName
|
Timer
|
tmr
|
tmrAlarm
|
Toolbar
|
tlb
|
tlbActions
|
TreeView
|
tre
|
treOrganization
|
UpDown
|
upd
|
updDirection
|
Vertical scroll bar
|
vsb
|
vsbRate
|
Padrões de nomenclatura para
objetos DAO/ADO
O padrão de nomenclatura para objetos DAO/ADO no
Visual Basic é descrito á seguir:
Objeto
|
Prefixo
|
Exemplo
|
Connection
|
con
|
conSales
|
Recordset
|
rec
|
recEmployees
|
Command
|
com
|
comSuppliers
|
Container
|
con
|
conReports
|
Database
|
db
|
dbAccounts
|
DBEngine
|
dbe
|
dbeJet
|
Document
|
doc
|
docSalesReport
|
Field
|
fld
|
fldAddress
|
Group
|
grp
|
grpFinance
|
Index
|
ix
|
idxAge
|
Parameter
|
prm
|
prmJobCode
|
QueryDef
|
qry
|
qrySalesByRegion
|
Recordset
|
rec
|
recForecast
|
Relation
|
rel
|
relEmployeeDept
|
TableDef
|
tbd
|
tbdCustomers
|
User
|
usr
|
usrNew
|
Workspace
|
wsp
|
wspMine
|
Padrões de nomenclatura para
Menus
Algumas aplicações usam menus e
se faz necessária uma padronização para este tipo de objeto. Objetos Menu devem
conter um prefixo “mnu” e seguido por um descritivo de cada subnível determinado.
A seguinte tabela lista alguns exemplos:
Sequencia de Menu
|
Exemplo
|
File Open
|
mnuFileOpen
|
File Send Email
|
mnuFileSendEmail
|
File Send Fax
|
mnuFileSendFax
|
Format Character
|
mnuFormatCharacter
|
Help Contents
|
mnuHelpContents
|
Padrões de nomenclatura
para controles não descritos
Para
controles não listados acima deve ser observado o prefixo “obj” para que os
mesmos possam ser identificados como controles não intrínsecos da padronização
Visual Basic.
Padrões de
nomenclatura para variáveis e constantes
Da mesma forma que objetos,
constantes e variáveis necessitam de uma padronização bem formada. Este tópico
lista alguns padrões recomendados para constantes e variáveis existentes no
Visual Basic. Também são definidos alguns padrões de tipos de dados e
identificação de escopo.
Variaveis
devem ser definidas com o menor nível de escopo possivel. Variáveis definidas
com escopo público podem criar aplicações extremamente difíceis de entender.
Variáveis definidas com escopo global fazem a sua reutilização e manutenção
muito mais difíceis.
As variáveis em
Visual Basic podem possuir o seguinte escopo:
Escopo
|
Declaração
|
Visível em
|
Procedure
|
'Dim' em procedures, ou
functions.
|
O procedimento para o qual ela foi declarada.
|
Módulo
|
'Private' na seção declarations de um form ou módulo
(.frm, .bas) .
|
Todos os procedimentos no módulo ou form.
|
Global
|
'Public' na seção declarations de um módulo (.bas)
|
Todos os lugares da aplicação
|
É uma boa
prática escrever o seu código o mais modular possível. Por exemplo, se sua
aplicação mostra um dialog box, coloque todos os controles e código requeridos
para executar esta tarefa em
um form. Isto ajuda você a manter o código da aplicação
organizado e reduzir o tempo com manutenção.
Exceto para
variáveis globais, procedures e functions devem trabalhar somente nos objetos
no qual eles estão definidos. Variáveis globais que são usadas em procedures
devem ser identificadas na seção declarations, no início do procedimento.
Importante: Para argumentos de funções
ou procedimentos que não sofrerem alterações no fluxo da rotina, deverá ser
utilizada a cláusula ByVal que não referncia um ponteiro de memória para o
valor informado com parâmetro. Para variáveis que necessitarem deste
procedimento deverá ser usada a cláusula ByRef.
Prefixos de
escopo de variáveis
Os
prefixos de escopo de variáveis a serem usados seguem descritos:
Escopo
|
Prefixo
|
Exemplo
|
Global
|
g
|
gstrUserName
|
Módulo
|
m
|
mblnCalcInProgress
|
Procedimento
|
dblVelocity
|
Variáveis com escopo Global devem
ser declaradas como “Public” na seção Declarations do módulo.
Variáveis com escopo Módulo devem
ser declaradas como “Private” na seção Declarations do módulo.
Variáveis com escopo Procedimento
devem ser declaradas no início do procedimento.
Constantes
Nomes de constantes devem ser mixados entre
caracteres em caixa alta e caixa baixa. Isto serve para identificar exatamente
o propósito dentro do sistema. Os prefixos para definição de escopo também
devem ser usados para constantes. Por exemplo:
mintMaxUsrLista ‘Número
máximo de usuários numa lista (inteiro, local em módulo)
gstrNovaLinha ‘Caracter
para nova linha (string, global na aplicação)
Variáveis
A
declaração de variáveis é obrigatória em todos os módulos e ajuda a reduzir o
número de bugs causados por ambiguidades. O item Require Variable Declaration
do menu Option, tab Editor, deve estar checado.
Tipos de dados para
variáveis
Use os
seguintes prefixos para identificar o tipo de dados de variáveis:
Tipo de Dados
|
Prefixo
|
Exemplo
|
Boolean
|
bln
|
blnFound
|
Byte
|
byt
|
bytRasterData
|
Collection object
|
col
|
colWidgets
|
Currency
|
cur
|
curRevenue
|
Date (Time)
|
dtm
|
dtmStart
|
Double
|
dbl
|
dblTolerance
|
Error
|
err
|
errOrderNum
|
Integer
|
int
|
intQuantity
|
Long
|
lng
|
lngDistance
|
Object
|
obj
|
objCurrent
|
Single
|
sng
|
sngAverage
|
String
|
str
|
strFName
|
Tipo definido pelo usuário
|
udt
|
udtEmployee
|
Variant
|
vnt
|
vntCheckSum
|
Enumerações
|
enm
|
enmWeekDays
|
Padrões para Estruturação de
Código
Juntamente com a padronização de nomeação de
variáveis e objetos uma boa padronização na estrutura de código (identação,
comentários, etc) ajuda em muito a um melhor entendimento do fluxo de
processamento.
Padrões para comentários em
códigos
Todas as funções e procedimentos devem conter um
breve comentário descrevendo suas principais características funcionais e um
breve descritivo do retorno (se houver).
Ao lado de cada
declaração de Variáveis deverá ser colocado um breve descritivo informando
sobre o uso / finalidade do dado.
Os itens a
serem contemplados em um cabeçalho de função/procedimento seguem descritos:
Seção
|
Descrição do Comentário
|
Autor
|
Nome do autor do procedimento
|
Data da Criação
|
Data da criação do procedimento
|
Objetivo
|
O que o procedimento faz. (Não como), qual o objetivo.
|
Parâmetros entrada
|
Descrição dos parâmetros de entrada
|
Parâmetros de saída
|
Descrição dos parâmetros de saída ou tipo de retorno
|
Histórico
|
Histórico com data, autor e descrição dos procedimentos
atualizados.
|
Sempre antes de um procedimento de
decisão, looping ou chamada de um novo processo deve colocar um comentário
informando sobre o que o procedimento que é executado.
Formatação de Código
A formatação do código deve seguir os seguintes
requisitos:
Ø
Instrução “On Error” sempre como primeiro item
do procedimento
Ø
Utilizar o tab de 3 espaços;
Ø
Declarar os tipos de dados de variáveis
tabulados;
Exemplo de formatação de código
'*************************************************************************
' Autor : Jose Roberto
' Criação : 01/01/1971
' Objetivo : Buscar a primeira ocorrência de um usuário
especificado em
' uma
lista de usuários
' Parâmetros Entrada
: strUserList() - Lista de usuários a ser procurada
' strTargetUser() - Nome do usuário a ser
encontrado
' Parâmetros
Saída : O índice da primeira ocorrência
do usuário encontrada
' Histórico : 21/05/2001 – Anderson - Criação do parâmetro blnEncontrado
'
'*************************************************************************
Private
Function intProcuraUsuario(ByRef strListaUsuarios() As String, ByVal strUsuario
As String) As Integer
On Error GoTo Trata_Erro
Dim
intContador As Integer 'Contador do Loop
Dim
blnEncontrado As Boolean 'Indicativo de usuário encontrado
intProcuraUsuario =
-1
ingContador = 0
For intContador = 0
To UBound(strListaUsuarios(), 1)
If
strListaUsuarios(intContador) = strUsuario Then
blnEncontrado
= True
intProcuraUsuario = intContador
Exit For
End If
Next intContador
Trata_Erro:
If Err Then
MsgBox Err.Number & vbNewLine &
Err.Description, vbCritical
End If
End Function
Padrões para
obtenção de melhor performance
Seguem
abaixo os itens básicos necessários para um melhor ganho de performance em aplicações Visual Basic :
Para concatenação de string utilize sempre a quebra de linha
“& _” . Evite usar a concatenação
por várias linhas de comando, pois esta processa linha a linha a concatenação
de itens enquanto a primeira efetua apenas o processamento de uma linha de
código;
Exemplo:
strSQL = ‘SELECT * ‘ & _
‘FROM
TB_USUARIOS ‘ & _
‘WHERE CODIGO = 1 ‘
Ø
Sempre que estiver tratando de objetos e
necessitar fazer referência a mais de uma propriedade utiliza
Exemplo:
With frmTeste
.Caption =
‘Form de Teste’
.BackColor
= vbRed
.Top = 0
End
With
Ø
Use constantes Visual Basic. O Visual Basic
possui estas constantes compiladas e não necessita identificar tipos de dados
quando estas constantes são referenciadas.
Exemplo:
Msgbox
‘Tem certeza que deseja sair do Aplicativo?“, vbQuestion
+ vbYesNo
Ø
Use tipo de dados Long
ao invés do tipo integer quando estiver tratando de valores inteiros. O tipo de dados Long é um tipo de dados nativo
dos processadores Pentium e proporciona melhor performance em procedimentos de
laço e matemáticos.
Exemplo:
Dim lngContador as Long ‘Usa
o tipo long para o contador
For lngContador = 0 to 1000
Print lngContador
Next lngContador
Ø Quando estiver utilizando procedimentos de divisão em que
não necessite da parte frácionária do resultado ou tenha certeza que não haverá
utilize a barra de divisão invertida (\) ao invés da comum (/). Com isto o
processador não desvia para o co-processador matemático para calcular a parte
fracionária da função, e não desviando para esta rotina existe um sensível
ganho de performance em procedimentos com vários cálculos e laços.
Artigo retirado do site Empregos.com.br. Acesso em 13/06/2012
Nenhum comentário:
Postar um comentário