VBA Advanced - Reddick VBA e Microsoft Consulting Services - Naming and Coding Conventions


Bem poucas pessoas que programam em VBA conhecem o assunto que vamos introduzir aqui. Sim, vou apenas introduzir o assunto, deixando para você o exercício do aprofundamento.

É fato que muitos utilizam as várias técnicas de transcrição de código apenas por observarem os códigos de outros, ou mesmo por terem sido ensinados assim, mas findam por desconhecer o motivo de preceder certa variável com algumas letras, ou nomear um objeto sempre com o mesmo prefixo. Pois bem, hoje entenderá um pouco mais sobre isso e aprenderá que houveram pessoas totalmente voltadas a desenvolver essas técnicas para nós.

Encare este artigo apenas como a cereja no bolo, algo que se não comer, o privará do toque final da sobremesa, estou escrevendo a respeito do RVBA.

O objetivo do VBA Reddick (RVBA) é mantermos uma convenção ao nomear objetos no VBA (Visual Basic for Applications). Manter tais convenções é importante em qualquer projeto de programação.

A utilização destes padrões transmitem automaticamente informações pertinentes ao significado dos objetos. Estas convenções tentam fornecer uma maneira de padronizar tais significados em toda uma equipe de programadores VBA (e alguns diriam toda uma geração). 

As convenções RVBA cobrem todas as implementações da linguagem VBA, independentemente do aplicativo host (CAD, Office, CorelDraw, etc...).

Estas convenções refletem o trabalho de muitas pessoas, incluindo Charles Simonyi, que inventou as notações húngaras nas quais o RVBA baseia-se. Leszynski Stan, o co-autor das várias versões de convenções. Muitos outros também têm contribuído para o desenvolvimento e distribuição de tais convenções, tais como Paul Litwin e Ken Getz que fizeram contribuições substanciais ao longo dos anos.

Muitos programadores preferem usar o que é chamado de notação húngara (assim chamado porque o criador deste método era de origem húngara Charles Simonyi, primeiro na Xerox PARC e, posteriormente, um arquiteto de software de nível superior na Microsoft). Na notação húngara, cada nome de variável começa com letras que identificam o seu tipo de dados. Por exemplo, uma variável do tipo Integer seria nomeado intCounter, onde o prefixo int indica que este é um tipo inteiro. Introduzido pela primeira vez em 1992, o RVBA foi publicado em um grande número de livros e revistas. São usados por milhares de programadores ao redor do mundo para nomear objetos dentro de seu código VBA.

Estas convenções servem como diretriz: Se não concordar com uma parte específica das convenções, basta substituí-la com aquilo que acha que funciona melhor para você. No entanto, tenha em mente que as futuras gerações de programadores podem precisar compreender seus códigos.

Como a ideia deste breve artigo é a de ser conciso, as convenções são apresentadas sem as racionalizações de como foram obtidas, embora cada uma delas tenha uma história considerável.

Sempre poderá acompanhar as mais recentes atualizações neste documento.

Uma Introdução à notação húngara

As convenções RVBA baseiam-se nas convenções da notação húngara para a construção dos nomes dos objetos. O objetivo da notação húngara é transmitir informações sobre o objeto de forma concisa e eficiente. Acostumarmos com a notação húngara pode levar algum tempo, mas uma vez adquirido tal hábito, rapidamente torna-se nossa segunda natureza. 

O formato de um nome de objeto com a notação húngara é: 

[prefixos]tag[NomeBase[Sufixos]]

Os colchetes indicam partes opcionais do nome do objeto. Estes componentes têm os seguintes significados:

Prefixos
Modifica a tag para indicar informações adicionais. Os Prefixos são minúsculos. Geralmente são escolhidos a partir de uma lista padrão de prefixos, que será informada mais adiante neste artigo.

Tag
Conjunto de caracteres curtos, geralmente mnemônicos, que indicam o tipo do objeto. O tag é minúsculo. Geralmente é selecionado a partir de uma lista padrão de etiquetas, dadas mais adiante neste artigo.

NomeBase
Uma ou mais palavras que indicam o que o objeto representa. Capitalize a primeira letra de cada palavra no nome base.

Sufixos
Insere informações adicionais sobre o significado do nome base. Capitalize a primeira letra de cada palavra nos sufixos. Eles são geralmente escolhidos a partir de uma lista padrão de sufixos, dada mais adiante neste artigo.

Observe que a única parte necessária do nome do objeto é a tag. Isto pode parecer pouco intuitivo, talvez sinta que o nome base é a parte mais importante do nome do objeto. No entanto, considere um procedimento genérico que funciona em qualquer situação. O fato de que a rotina opera num formulário é o importante, não o que essa rotina representa. Porque a rotina pode operar em vários formulários de muitos tipos diferentes, não precisa necessariamente ter um nome base. No entanto, se houver mais de um objeto de um tipo referenciado na rotina, deve haver um nome de base em todos, mas um dos nomes de objeto para diferenciá-los. 

Tabela 1: Tabela para variáveis VBA

Tag                 Object Type
bool {f, bln}        Boolean
byte {byt}          Byte
cur                   Currency
date {dtm}         Date
dec                   Decimal
dbl                    Double
int                     Integer
lng                    Long
obj                    Object
sng                   Single
str                    String
stf                    String (fixed length)
var                    Variant

Como sabe, você deve declarar explicitamente todas as variáveis, cada uma em uma linha por si só. Não use os antigos caracteres de declaração de variável como %, &, e $. Sempre deve declarar explicitamente as variáveis do tipo Variant, utilizando a cláusula Variant, mesmo que seja o padrão em VBA. Por exemplo:

Dim intTotal As Integer
Dim varField As Variant
Dim strName As String

Construindo Nomes das Propriedades

As propriedades de uma classe apresentam um problema particular: Devem incluir a  nomenclatura convencional para indicar o tipo? Para sermos coerentes com o resto das convenções de nomenclatura, sim, deveriam. No entanto, é permitido ter nomes de propriedades, sem as tags, especialmente se a classe ficar disponibilizada para os clientes que podem não estar familiarizados com essas convenções de nomenclatura.

Coleção Tags

Poderá lidar com um objeto de coleção com uma tag especial. Construa a tag usando o tipo de dados da coleção seguido pela letra s. Por exemplo, se você tinha uma coleção de Longs, a tag será lngs. Se fosse uma coleção de formulários, a tag para a coleção seria FRMs. Embora, em teoria, uma colecção de objetos possa conter diferentes tipos de dados, na prática, cada um dos tipos de dados do conjunto é o mesmo. Por exemplo:

intsEntries
frmsCustomerData
objsMisc

Constantes

Constantes sempre terão um tipo de dados no VBA. Porque o VBA escolherá esse tipo de dados, caso não o faça. Por isso, sempre especifique o tipo de dados de uma constante. Constantes declaradas na seção General Declarations de um módulo devem ter sempre uma palavra-chave de âmbito privado ou público, e ser prefixado pelo escopo de prefixos m ou g, respectivamente. Uma constante é indicada adicionando a letra c no final do tipo de dados para a constante. Por exemplo:

Const intcGray As Integer = 3

Private Const mdblcPi As Double = 3.14159265358979

Embora esta técnica seja o método recomendado para nomear constantes, caso esteja mais preocupado com a especificação de que está lidando com constantes ao invés do seu tipo de dados, pode usar a tag con instada. Por exemplo:

Const conPi As Double = 3.14159265358979

Tabelas

Tabela 2: Prefixos de Escopo

Prefixo        Tipo de objeto 
(none)           variável local, procedure-level lifetime, declarado com "Dim"
s                  Local variable, object lifetime, declarado com "Static"
m                 Privado (módulo) variável, object lifetime, declarado com "Private"
g                  Pública variável (global), object lifetime, declarado com "Público"


Tabela 3: Outros Prefixos mais usados

Prefixos         Tipo de objeto
c                     Contar de algum tipo de objeto
h                     Identificador para um objeto do Windows
r                      Parâmetro passado por referência


Para saber mais, acesse aqui:





Mas o que dizer do MCS (Microsoft Consulting Services)?
vou aproveitar o ensejo que já estamos falando sobre documentação e disponibilizar um superconjunto das convenções de codificação Visual Basic encontrado na "Guia do programador" do Visual Basic.

Convenções de nomenclatura de objetos para objetos padrão

Prefixo  Tipo de Objeto             Exemplo
ani         Animation button             aniMailBox
bed        Pen Bedit                       bedFirstName
cbo        Combo box and drop down list box      cboEnglish
chk        Checkbox                      chkReadOnly
clp         Picture clip                    clpToolbar
cmd (3d) Command button (3D)    cmdOk (cmd3dOk)
com       Communications            comFax
ctr         Control (when specific type unknown)  ctrCurrent
dat        Data control                   datBiblio
dir         Directory list box            dirSource
dlg        Common dialog control   dlgFileOpen
drv        Drive list box                  drvTarget
fil          File list box                    filSource
frm        Form                             frmEntry
fra (3d)  Frame (3d)                     fraStyle (fra3dStyle)
gau       Gauge                           gauStatus
gpb       Group push button          gpbChannel
gra        Graph                            graRevenue
grd        Grid                               grdPrices
hed       Pen Hedit                       hedSignature
hsb       Horizontal scroll bar         hsbVolume
img       Image                             imgIcon
ink        Pen Ink                           inkMap
key       Keyboard key status        keyCaps
lbl         Label                              lblHelpMessage
lin         Line                                linVertical
lst         List box                          lstPolicyCodes
mdi       MDI child form              mdiNote
mpm     MAPI message               mpmSentMessage
mps      MAPI session                 mpsSession
mci       MCI                               mciVideo
mnu      Menu                             mnuFileOpen
opt (3d) Option Button (3d)       optRed (opt3dRed)
ole       OLE control                   oleWorksheet
out       Outline control               outOrgChart
pic       Picture                            picVGA
pnl3d   3d Panel                         pnl3d
rpt       Report control                rptQtr1Earnings
shp     Shape controls                shpCircle
spn     Spin control                    spnPages
txt       Text Box                        txtLastName
tmr      Timer                             tmrAlarm
vsb      Vertical scroll bar           vsbRate


Convenção de nomenclatura de objetos para objetos de banco de dados


Prefixo  Tipo de Objeto               Exemplo
db          ODBC Database             dbAccounts

ds          ODBC Dynaset object     dsSalesByRegion
fdc         Field collection                 

fdcCustomer


fd           Field object                      

fdAddress


ix           Index object                     

ixAge


ixc         Index collection                 

ixcNewAge


qd          QueryDef object              

qdSalesByRegion

qry (suffix) Query (see NOTE)                  SalesByRegionQry
ss          Snapshot object                

ssForecast

tb           Table object                     

tbCustomer


td           TableDef object               

tdCustomers


Tags: VBA, RVBA, Reddick, Reddick VBA, naming, coding, convention, conventions, advanced, Charles Simonyi, Leszynski Stan, Paul Litwin, Ken Getz, notação húngara, MCS, Microsoft Consulting Services, MCS, Microsoft Consulting Services


Nenhum comentário:

Postar um comentário

diHITT - Notícias