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.
As convenções RVBA cobrem todas as implementações da linguagem VBA, independentemente do aplicativo host (CAD, Office, CorelDraw, etc...).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).
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:
PrefixosModifica 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.
TagConjunto 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.
NomeBaseUma ou mais palavras que indicam o que o objeto representa. Capitalize a primeira letra de cada palavra no nome base.
SufixosInsere 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 VBATag Object Typebool {f, bln} Booleanbyte {byt} Bytecur Currencydate {dtm} Datedec Decimaldbl Doubleint Integerlng Longobj Objectsng Singlestr Stringstf String (fixed length)var VariantComo 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 IntegerDim varField As VariantDim 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:
intsEntriesfrmsCustomerDataobjsMisc
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 = 3Private 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 EscopoPrefixo 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 usadosPrefixos Tipo de objetoc Contar de algum tipo de objetoh Identificador para um objeto do Windowsr 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ãoPrefixo Tipo de Objeto Exemploani Animation button aniMailBoxbed Pen Bedit bedFirstNamecbo Combo box and drop down list box cboEnglishchk Checkbox chkReadOnlyclp Picture clip clpToolbarcmd (3d) Command button (3D) cmdOk (cmd3dOk)com Communications comFaxctr Control (when specific type unknown) ctrCurrentdat Data control datBibliodir Directory list box dirSourcedlg Common dialog control dlgFileOpendrv Drive list box drvTargetfil File list box filSourcefrm Form frmEntryfra (3d) Frame (3d) fraStyle (fra3dStyle)gau Gauge gauStatusgpb Group push button gpbChannelgra Graph graRevenuegrd Grid grdPriceshed Pen Hedit hedSignaturehsb Horizontal scroll bar hsbVolumeimg Image imgIconink Pen Ink inkMapkey Keyboard key status keyCapslbl Label lblHelpMessagelin Line linVerticallst List box lstPolicyCodesmdi MDI child form mdiNotempm MAPI message mpmSentMessagemps MAPI session mpsSessionmci MCI mciVideomnu Menu mnuFileOpenopt (3d) Option Button (3d) optRed (opt3dRed)ole OLE control oleWorksheetout Outline control outOrgChartpic Picture picVGApnl3d 3d Panel pnl3drpt Report control rptQtr1Earningsshp Shape controls shpCirclespn Spin control spnPagestxt Text Box txtLastNametmr Timer tmrAlarmvsb Vertical scroll bar vsbRate
Convenção de nomenclatura de objetos para objetos de banco de dados
Prefixo Tipo de Objeto Exemplodb ODBC Database dbAccountsds ODBC Dynaset object dsSalesByRegionfdc Field collection
fdcCustomerfd Field object
fdAddressix Index object
ixAgeixc Index collection
ixcNewAgeqd QueryDef object
qdSalesByRegionqry (suffix) Query (see NOTE) SalesByRegionQryss Snapshot object
ssForecasttb Table object
tbCustomertd 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