OS MELHORES VÍDEOS

 

Pesquisar

segunda-feira, 22 de dezembro de 2014

Indentação

Introdução

Indentação é um efeito tipográfico de recuar/afastar um texto de sua margem para ressaltar a estrutura das linhas de código de um programa. Seu efeito direto é melhorar a compreensão do código.





Veja o código abaixo:
Sub pMaturidade()
Idade = InputBox("Qual é sua idade?")
Select Case Idade
Case Is < 18
Mensagem = "Aproveite enquanto ainda é adolescente!"
Case 18 To 30
Mensagem = "Está na hora de fazer um pé de meia e depois casar."
Case Is > 30
Filhos = InputBox("Quantos filhos você tem?")
If Filhos > 0 Then
Mensagem = "As responsabilidades só aumentam, mas vale a pena."
Else
Mensagem = "Não acha que está na hora de ter filhos?"
End If
Case Else
Mensagem = "Valor inválido!"
End Select
MsgBox Mensagem
End Sub
Agora, observe o mesmo código abaixo, reescrito indentado:
Sub pMaturidade2()
  Idade = InputBox("Qual é sua idade?")
    
  Select Case Idade
    Case Is < 18
      Mensagem = "Aproveite enquanto ainda é adolescente!"
    Case 18 To 30
      Mensagem = "Está na hora de fazer um pé de meia e depois casar."
    Case Is > 30
      Filhos = InputBox("Quantos filhos você tem?")
      If Filhos > 0 Then
        Mensagem = "As responsabilidades só aumentam, mas vale a pena."
      Else
        Mensagem = "Não acha que está na hora de ter filhos?"
      End If
    Case Else
      Mensagem = "Valor inválido!"
  End Select
  
  MsgBox Mensagem
End Sub
Funcionalmente, os algoritmos são equivalentes. No entanto, o subprocedimentopMaturidade2 está mais fácil de ler porque seu código está indentado. Veja que o início de uma estrutura Select Case está afastado da margem uma distância igual ao seu final End Select. Com isso, bastar bater os olhos na estrutura do código para saber onde o essa estrutura de decisão inicia e termina.

Largura da Tabulação da Indentação

Por padrão, a indentação do VBE é de 4 espaços. No entanto, pessoalmente utilizo 2 espaços. Você pode alterar essa configuração clicando no menu Ferramentas >> controleOpções, então na janela que aparecer, clique na guia Editor >> caixa de texto Largura da tabulação:

Indentando o Código

Na janela de código, a tecla Tab aumenta o recuo de um texto e a combinação Shift+Tabdiminui. Você pode selecionar várias linhas para alterar o recuo de todas elas de uma vez.
A indentação e inclusão extra de linhas em branco são práticas bastante difundidas no universo de programação e utilizo essas técnicas na minha forma de programar. Recomendo que você faça o mesmo.

Exemplos de Indentação

Não é difícil entender quando indentar. A regra geral é que indenta-se tudo que estiver dentro de um bloco For...NextIf...End IfSelect Case...End Select e assim por diante:
Sub pGenerateEnumerations()
  Const clIdentSpaces As Long = 2
  
  Dim sAll As String
  Dim ws As Excel.Worksheet
  Dim lCol As Long
  Dim sText As String
  
  Set ws = ActiveSheet
  With ws
    For lCol = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column
      sText = .Cells(1, lCol)
      sText = StrConv(sText, vbProperCase)
      sText = Replace(sText, " ", "")
      sText = Replace(sText, "-", "")
      If sText <> "" Then
        If lCol = 1 Then
          sAll = sAll & String(clIdentSpaces, " ") & sText & " = 1" & vbNewLine
        Else
          If .Cells(1, lCol - 1) <> "" Then
            sAll = sAll & String(clIdentSpaces, " ") & sText & vbNewLine
          Else
            sAll = sAll & String(clIdentSpaces, " ") & sText & " = " & lCol & vbNewLine
          End If
        End If
      End If
    Next lCol
  End With
  
  Debug.Print sAll
End Sub
Se alguma linha for muito longa, quebro-a (usando o símbolo _) e mantenho a indentação no mesmo nível da linha de cima:
Sub pDeleteShapes()
  Dim oShape As Excel.Shape
  Dim ws As Excel.Worksheet
  Dim sName As String
  
  For Each ws In ActiveWindow.SelectedSheets
    For Each oShape In ws.Shapes
      sName = oShape.Name
      Select Case True
        Case sName Like "Comment *"
        Case sName Like "Object *" _
        , sName Like "Text Box *" _
        , sName Like "Button *" _
        , sName Like "Picture *"
            oShape.Delete
        Case Else
          MsgBox Prompt:="Atenção, um novo tipo de objeto " _
          & "'Shape' foi encontrado: " & oShape.Name & ".", _
          Buttons:=vbExclamation, _
          Title:=gcstrProgram
          Stop
      End Select
    Next oShape
  Next ws
End Sub