1. "&" substitui "+"
2. A nomenclatura de variáveis deve diferenciar maiúsculas de minúsculas, as instruções devem ser bem organizadas e a manutenção do código-fonte deve ser feita
3. Por favor, desenvolva os seguintes bons hábitos de "convenção de nomenclatura de objetos"
4. No caso de condições de seleção simples, use a função IIf()
5. Tente usar Debug.Print para depuração
6. Ao modificar repetidamente as propriedades de um objeto, tente usar With....End With
7. Tente usar ícones de mensagens no MsgBox para que o programa fique mais padronizado. 8. Use enumerações quando possível.
1. "&" substitui "+"
Nas linguagens de programação de muitas pessoas, "+" é usado para conectar strings, o que pode facilmente levar à ambiguidade. Uma boa prática é usar “&” para concatenar strings.
Incorreto:
Escurecer sMessage como string
sMensagem = "1" + "2"
correto:
Escurecer sMessage como string
sMessage = "1" e "2"
Nota: Há um espaço após "&"
2. A nomenclatura de variáveis deve diferenciar maiúsculas de minúsculas, as instruções devem ser bem organizadas e a manutenção do código-fonte deve ser feita
Vamos comparar os dois trechos de código a seguir:
Leia o código difícil:
Dim SNAME como string
Dim NTURN como inteiro
Se NTURN = 0 Então
Se SNAME = "vbeden" Então
Faça enquanto NTURN <4
NTURN = NTURN + 1
Laço
Terminar se
Terminar se
Código fácil de ler:
Dim nome como string
Dim nTurn como inteiro
Se nTurn = 0 Então
Se sName = "vbeden" Então
Faça enquanto nTurn <4
nTurno = nTurno + 1
Laço
Terminar se
Terminar se
[voltar ao índice]
3. Por favor, desenvolva os seguintes bons hábitos de "convenção de nomenclatura de objetos"
Prefixos de controle recomendados
Exemplo de prefixo de tipo de controle
Painel 3D pnl pnlGroup
ADO Data ado adoBiblio
Botão animado ani aniMailBox
Caixa de seleção chk chkReadOnly
Caixa de combinação, caixa de listagem suspensa cbo cboEnglish
Botão de comando cmd cmdExit
Diálogo comum dlg dlgFileOpen
Comunicações com comFax
Controle (usado em procedimentos quando o tipo específico é desconhecido) ctr ctrCurrent
Dados datBiblio
Caixa de combinação vinculada a dados dbcbo dbcboLanguage
Grade vinculada a dados dbgrd dbgrdQueryResult
Caixa de listagem vinculada a dados dblst dblstJobType
Combinação de dados dbc dbcAuthor
Grade de dados dgd dgdTitles
Lista de dados dbl dblPublisher
Repetidor de dados drp drpLocation
Seletor de data dtp dtpPublished
Caixa de listagem de diretório dir dirSource
Caixa de listagem de unidades drv drvTarget
Caixa de listagem de arquivos fil filSource
Barra de rolagem plana fsb fsbMove
Formulário de frmEntry
Quadro fra fraLanguage
Medidor gau gauStatus
Receita Graphgragra
Grid grd grdPreços
Flexgrid hierárquico flex flexOrders
Barra de rolagem horizontal hsb hsbVolume
Imagem img imgIcon
Combinação de imagens imgcbo imgcboProduct
ImageList e ilsAllIcons
Rótulo lbl lblHelpMessage
Caixa de seleção leve lwchk lwchkArchive
Caixa combo leve lwcbo lwcboAlemão
Botão de comando leve lwcmd lwcmdRemove
Estrutura leve lwfra lwfraSaveOptions
Barra de rolagem horizontal leve lwhsb lwhsbVolume
Caixa de listagem leve lwlst lwlstCostCenters
Botão de opção leve lwopt lwoptIncomeLevel
Caixa de texto leve lwtxt lwoptStreet
Barra de rolagem vertical leve lwvsb lwvsbYear
Linha lin linVertical
Caixa de listagem lst lstPolicyCodes
ListView lvw lvwHeadings
Mensagem MAPI mpm mpmSentMessage
Sessão MAPI mps mpsSession
MCI mci mciVídeo
Menu mnu mnuFileOpen
Visualização mensal mvw mvwPeriod
MS Chart chSalesbyRegion
MS Flex grade msg msgClients
Guia MS mst mstPrimeiro
Contêiner OLE ole oleWorksheet
Botão de opção opt optGender
Caixa de imagem pic picVGA
Clipe de imagem clp clpToolbar
ProgressBar prg prgLoadFile
Dados remotos rd rdTitles
RichTextBox rtf rtfReport
Forma shp shpCírculo
Controle deslizante sld sldScale
Girar spn spnPáginas
StatusBar sta staDateTime
SysInfo sys sysMonitor
TabStrip tab tabOpções
Caixa de texto txt txtSobrenome
Temporizador tmr tmrAlarm
Barra de ferramentas tlb tlbActions
TreeView tre treOrganização
UpDown upd updDirection
Barra de rolagem vertical vsb vsbRate
-------------------------------------------------- ----------------------------------
Prefixos recomendados para objetos de acesso a dados (DAO)
Use os seguintes prefixos para indicar objetos de acesso a dados
Exemplo de prefixo de objeto de banco de dados
ConconReports do contêiner
Banco de dados db dbContas
DBEngine dbe dbeJet
Documento docSalesReport
Campo fld fldAddress
Grupo grp grpFinanças
Índice ix idxAge
Parâmetro prm prmJobCode
QueryDef qry qrySalesByRegion
RecForecast do conjunto de registros
Relação rel relEmployeeDept
TableDef tbd tbdClientes
Usuário usr usrNovo
Espaço de trabalho wsp wspMine
-------------------------------------------------- ----------------------------------
Os aplicativos frequentemente usam muitos controles de menu e é útil ter um conjunto exclusivo de convenções de nomenclatura para esses controles. Além da tag inicial "mnu", o prefixo do controle de menu deve ser expandido: um prefixo adicional é adicionado para cada nível de aninhamento, colocando o título final do menu no final da string do nome. A tabela abaixo lista alguns exemplos.
Prefixos de menu recomendados
Nome do manipulador de menu da sequência de título do menu
Arquivo aberto mnuFileOpen
Arquivo Enviar e-mail mnuFileSendEmail
Arquivo Enviar Fax mnuFileSendFax
Caractere de formato mnuFormatCharacter
Conteúdo da Ajuda mnuHelpContents
Quando você usa essa convenção de nomenclatura, todos os membros de um grupo de menu específico são listados um após o outro na janela Propriedades do Visual Basic. Além disso, os nomes dos controles de menu indicam claramente os itens de menu aos quais pertencem.
Escolha um prefixo para outros controles
Os controles não listados acima devem ser padronizados com um prefixo exclusivo de dois ou três caracteres para fins de consistência. Use prefixos com mais de três caracteres somente quando for necessário esclarecimento.
Convenções de nomenclatura de constantes e variáveis
Além de objetos, constantes e variáveis também exigem convenções de nomenclatura bem formadas. Esta seção lista as convenções recomendadas para constantes e variáveis suportadas pelo Visual Basic. e discute questões de identificação de tipos e intervalos de dados.
As variáveis devem sempre ser definidas no menor escopo possível. Variáveis globais (públicas) podem levar a estruturas de estado extremamente complexas e tornar a lógica de um aplicativo muito difícil de entender. As variáveis globais também dificultam a reutilização e a manutenção do código.
Variáveis em Visual Basic podem ter os seguintes escopos
posição da declaração do escopo posição visível
'Privado' em um procedimento de nível de procedimento, subprocedimento ou procedimento de função no procedimento em que é declarado
'Privado' na seção de declaração de um formulário em nível de módulo ou módulo de código (.frm, .bas) Cada procedimento em um formulário ou módulo de código
'Público' na seção de declarações do módulo de código global (.bas) em qualquer lugar do aplicativo
Em um aplicativo Visual Basic, use variáveis globais somente quando não houver outra maneira conveniente de compartilhar dados entre formulários. Quando variáveis globais devem ser utilizadas, declare-as em um único módulo e agrupe-as por função. Dê a este módulo um nome significativo para indicar sua função, como Public.bas.
Uma boa prática de codificação é escrever um código o mais modular possível. Por exemplo, se seu aplicativo exibir uma caixa de diálogo, coloque todos os controles e códigos necessários para preencher a caixa de diálogo em um único formulário. Isso ajuda a organizar o código do aplicativo em componentes úteis e reduz a sobrecarga do tempo de execução.
Com exceção das variáveis globais (que não devem ser repassadas), procedimentos e funções devem operar apenas nos objetos passados a eles. As variáveis globais usadas em um procedimento devem ser identificadas na seção de declaração no início do procedimento. Além disso, ByVal deve ser usado para passar parâmetros para procedimentos Sub e procedimentos de função, a menos que haja uma necessidade óbvia de alterar o valor do parâmetro passado.
À medida que o tamanho do projeto cresce, o trabalho de definir o escopo das variáveis aumenta rapidamente. Colocar um prefixo de intervalo de uma única letra na frente do prefixo de tipo marca esse crescimento, mas o comprimento do nome da variável não aumenta muito.
prefixo de escopo variável
Exemplo de prefixo de intervalo
global gstrUserName
Nível do módulo mmblnCalcInProgress
Local para processar sem dblVelocity
Se uma variável for declarada como Pública em um módulo padrão ou módulo de formulário, então a variável terá escopo global. Se uma variável for declarada Privada em um módulo padrão ou módulo de formulário respectivamente, então a variável terá escopo em nível de módulo.
Observação: a consistência é fundamental para usar essa técnica de maneira eficaz; o verificador de sintaxe no Visual Basic não capturará variáveis de nível de módulo que começam com "p".
constante
O corpo de um nome de constante é misto, com a primeira letra de cada palavra em maiúscula. Embora as constantes padrão do Visual Basic não contenham informações de tipo de dados e intervalo, prefixos como i, s, g e m são úteis para compreender o valor e o intervalo de uma constante. Para nomes constantes, as mesmas regras devem ser seguidas para variáveis. Por exemplo:
mintUserListMax 'Limite máximo na lista de usuários
'(valor inteiro, local para módulo)
gstrNewLine 'Novo caractere de linha
'(String, usado globalmente pela aplicação)
variável
Declarar todas as variáveis economizará tempo de programação porque haverá menos erros causados pelas operações de digitação (por exemplo, é aUserNameTmp, sUserNameTmp ou sUserNameTemp). Na guia Editor da caixa de diálogo Opções, marque a opção Exigir declaração de variável. A instrução Option Explicit requer que todas as variáveis sejam declaradas no programa Visual Basic.
As variáveis devem ser prefixadas para indicar seu tipo de dados. E o prefixo pode ser expandido para indicar escopo variável, especialmente para programas grandes.
Use os seguintes prefixos para indicar o tipo de dados de uma variável.
Tipo de dados variável
Exemplo de prefixo de tipo de dados
String (tipo String) str strFName
Inteiro (tipo inteiro curto) int intQuantity
Long (tipo inteiro longo) lng lngDistance
Único (tipo de número de ponto flutuante de precisão única) sng sngAverage
Double (tipo de ponto flutuante de precisão dupla) dbl dblTolerance
Booleano (tipo booleano) bln blnFound
Byte (tipo de byte) byt bytRasterData
Data (tipo de data) dte dteNow
Moeda (cálculo de moeda e tipo de cálculo de ponto fixo) cur curRevenue
Objeto (tipo de objeto) obj objCurrent
Variante vnt vntCheckSum
Descrever nomes de variáveis e procedimentos
O corpo de uma variável ou nome de procedimento deve estar em letras maiúsculas e minúsculas e deve ser longo o suficiente para descrever sua finalidade. Além disso, o nome da função deve começar com um verbo, como InitNameArray ou CloseDialog.
Para termos longos ou frequentemente usados, recomenda-se usar abreviações padrão para racionalizar o comprimento do nome. De modo geral, nomes de variáveis com mais de 32 caracteres são difíceis de ler em um monitor VGA.
Ao usar abreviações, certifique-se de que sejam consistentes em todo o aplicativo. Em um projeto, se você usar Cnt por um tempo e Count por um tempo, isso causará confusão desnecessária.
tipo definido pelo usuário
Em um projeto grande com muitos tipos definidos pelo usuário, muitas vezes é necessário atribuir a cada tipo seu próprio prefixo de três caracteres. Se esses prefixos começarem com "u", será fácil identificar rapidamente esses tipos ao trabalhar com um tipo definido pelo usuário. Por exemplo, ucli pode ser usado como prefixo para uma variável de tipo de cliente definida pelo usuário.
[voltar ao índice]
4. No caso de condições de seleção simples, use a função IIf()
Código de Rosso:
Se nNum = 0 Então
sName = "sancy"
Outro
sNome = "Xu"
Terminar se
Código simples:
sNome=IIf(nNum=0,"sancy","Xu")
5. Tente usar Debug.Print para depuração
Na depuração de muitos iniciantes, MsgBox é usado para rastrear valores de variáveis. Na verdade, Debug.Print pode não apenas obter o mesmo efeito, mas também será ignorado durante a compilação final do programa e deve ser comentado ou excluído manualmente.
geralmente:
MsgBox nNome
deve:
Debug.Print nNome
6. Ao modificar repetidamente as propriedades de um objeto, tente usar With....End With
geralmente:
Formulário1.Altura = 5000
Formulário1.Largura = 6000
Form1.Caption = "Este é MyLabel"
deve:
Com Formulário1
.Altura = 5000
.Largura = 6000
.Caption = "Este é o MyLabel"
Terminar com
A eficiência de execução do programa desta estrutura é relativamente alta, especialmente em instruções de loop.
7. Procure utilizar ícones de mensagens no MsgBox para que o programa fique mais padronizado.
De um modo geral
vbInformation é uma mensagem usada para solicitar confirmação ou operação bem-sucedida
vbExclamation é usado para solicitar mensagens de aviso
vbMensagens críticas usadas para alertar situações de crise
vbQuestion é uma mensagem usada para fazer perguntas
[voltar ao índice]
8. Use enumerações sempre que possível
O formato da enumeração é
[Público | Privado] Nome da enumeração
nome de membro [= expressão constante]
nome de membro [= expressão constante]
....
Enum final
A instrução Enum contém as seguintes partes:
descrição parcial
Público Opcional. Indica que o tipo Enum está visível em todo o projeto. O padrão para tipos Enum é Público.
Privado Opcional. Indica que o tipo Enum só é visível no módulo declarado.
nome obrigatório. O nome deste tipo Enum. name deve ser um identificador legal do Visual Basic usado para especificar o tipo ao definir uma variável ou parâmetro desse tipo Enum.
nome de membro obrigatório. Um identificador legal do Visual Basic que especifica o nome dos elementos constituintes desse tipo Enum.
expressão constante opcional. O valor do elemento (do tipo Long). Podem ser outros tipos de Enum. Se expressão constante não for especificada, o valor atribuído será 0 (se o elemento for o primeiro nome de membro) ou um valor maior que o valor de seu antecessor imediato.
ilustrar
As chamadas variáveis de enumeração referem-se a variáveis definidas com o tipo Enum. Tanto variáveis quanto parâmetros podem ser definidos como tipo Enum. Elementos do tipo Enum são inicializados com o valor constante especificado na instrução Enum. O valor atribuído pode incluir números positivos e negativos e não pode ser alterado em tempo de execução. Por exemplo:
Enum SecurityLevel IllegalEntry = -1 SecurityLevel1 = 0 SecurityLevel2 = 1 End Enum
As instruções Enum só podem aparecer no nível do módulo. Depois de definir o tipo Enum, você pode usá-lo para definir variáveis, parâmetros ou procedimentos que retornem esse tipo. Os tipos de enum não podem ser qualificados com nomes de módulos. Os tipos Public Enum em um módulo de classe não são membros da classe; eles são simplesmente gravados na biblioteca de tipos. Os tipos de enum definidos em módulos padrão não são gravados na biblioteca de tipos. Os tipos Public Enum com o mesmo nome não podem ser definidos em um módulo padrão e em um módulo de classe porque compartilham o mesmo namespace. Se houver dois tipos Enum em bibliotecas de tipos diferentes com o mesmo nome, mas membros diferentes, a referência a uma variável desse tipo dependerá de qual biblioteca de tipos tem uma prioridade de referência mais alta.
Você não pode usar o tipo Enum como destino em um bloco With.
Exemplo de declaração Enum
O exemplo a seguir demonstra o uso da instrução Enum para definir uma coleção de constantes nomeadas. Neste caso, existem algumas constantes de cores selecionáveis usadas para projetar o formulário de entrada de dados para o banco de dados.
Interface de Enum PúblicoCores
icMistyRose = &HE1E4FF&
icSlateGray = &H908070&
icDodgerBlue = &HFF901E&
icDeepSkyBlue = &HFFFF00&
icSpringVerde = &H7FFF00&
icFlorestaVerde = &H228B22&
icGoldenrod = &H20A5DA&
icFirebrick = &H2222B2&
Enum final
A vantagem é que agiliza a programação