Gå til innhold

Innføring i fornuftig formatering av kode i VB


Anbefalte innlegg

Etter å ha lest ganske mye dårlig formatert vb-kode her på forumet, så er dette mitt forsøk på å bedre opp i dette.

 

Det er ikke noe som er rett eller galt når det gjeder formatering for en kompilator, men for et menneske-øye så kan en kode bevege seg fra å være avskyelig til en "fryd" å se på..

 

først et eksempel på dårlig formatert kode:

Public Sub FindNextRegExp(pattern As String, InfoLabel As Label)
On Error GoTo regExHandler
If NewPattern = True Then
Set MyRegEx = New RegExp
MyRegEx.Global = True
If MatchCaseCheckBox.value = vbChecked Then
MyRegEx.IgnoreCase = False
Else
MyRegEx.IgnoreCase = True
End If
MyRegEx.pattern = pattern
MyRegEx.MultiLine = True
Set Matches = MyRegEx.Execute(frmMain.txtText.Text)
MatchIndex = 0
NewPattern = False
End If
If MyRegEx.test(frmMain.txtText.Text) = True Then
If OptionDown.value = True Then
If regExUp = True Then MatchIndex = MatchIndex + 1
MatchIndex = MatchIndex + 1
If MatchIndex > Matches.Count Then MatchIndex = 1
With frmMain.txtText
Set Match = Matches.Item(MatchIndex - 1)
.SelStart = Match.FirstIndex
.SelLength = Match.length
End With
regExUp = False
InfoLabel.Caption = "Match " & MatchIndex & " of " & Matches.Count
Else
If regExUp = False Then MatchIndex = MatchIndex - 1
MatchIndex = MatchIndex - 1
If MatchIndex < 0 Then MatchIndex = Matches.Count - 1
With frmMain.txtText
Set Match = Matches.Item(MatchIndex)
.SelStart = Match.FirstIndex
.SelLength = Match.length
End With
regExUp = True
InfoLabel.Caption = "Match " & MatchIndex + 1 & " of " & Matches.Count
End If
frmMain.SearchText = Match.value
Else
InfoLabel.Caption = "Expression not found!"
End If
regExHandler:
If Err.number <> 0 Then InfoLabel.Caption = Err.Description & " (" & Err.number & ")"
End Sub

 

håpløst, ikkesant???

cluet er å indentere hver "blokk" med feks en tab, da vil lesbarheten øke betraktelig. Dette er samme kode skrevet med innrykk:

Public Sub FindNextRegExp(pattern As String, InfoLabel As Label)
   On Error GoTo regExHandler

   If NewPattern = True Then
       Set MyRegEx = New RegExp
       MyRegEx.Global = True
       If MatchCaseCheckBox.value = vbChecked Then
           MyRegEx.IgnoreCase = False
       Else
           MyRegEx.IgnoreCase = True
       End If
       MyRegEx.pattern = pattern
       MyRegEx.MultiLine = True
       Set Matches = MyRegEx.Execute(frmMain.txtText.Text)
       MatchIndex = 0
       NewPattern = False
   End If

   If MyRegEx.test(frmMain.txtText.Text) = True Then
       If OptionDown.value = True Then
           If regExUp = True Then MatchIndex = MatchIndex + 1
           MatchIndex = MatchIndex + 1
           If MatchIndex > Matches.Count Then MatchIndex = 1
           With frmMain.txtText
               Set Match = Matches.Item(MatchIndex - 1)
               .SelStart = Match.FirstIndex
               .SelLength = Match.length
           End With
           regExUp = False
           InfoLabel.Caption = "Match " & MatchIndex & " of " & Matches.Count
       Else
           If regExUp = False Then MatchIndex = MatchIndex - 1
           MatchIndex = MatchIndex - 1
           If MatchIndex < 0 Then MatchIndex = Matches.Count - 1
           With frmMain.txtText
               Set Match = Matches.Item(MatchIndex)
               .SelStart = Match.FirstIndex
               .SelLength = Match.length
           End With
           regExUp = True
           InfoLabel.Caption = "Match " & MatchIndex + 1 & " of " & Matches.Count
       End If
       frmMain.SearchText = Match.value
   Else
       InfoLabel.Caption = "Expression not found!"
   End If
regExHandler:
   If Err.number <> 0 Then InfoLabel.Caption = Err.Description & " (" & Err.number & ")"
End Sub

 

Kanskje det ser litt autistisk ut, men å være streng mot seg selv når man skriver kode vil gi deg "pay-off" når du selv skal gå inn å endre den ved en senere anledning.

 

Dette setter jeg som ikke noe "krav", men det kan også være lurt å legge inn et par ekstra linjseskift som dette :

Public Sub FindNextRegExp(pattern As String, InfoLabel As Label)
   On Error GoTo regExHandler

   If NewPattern = True Then

       Set MyRegEx = New RegExp

       MyRegEx.Global = True

       If MatchCaseCheckBox.value = vbChecked Then

           MyRegEx.IgnoreCase = False

       Else

           MyRegEx.IgnoreCase = True

       End If

       MyRegEx.pattern = pattern
       MyRegEx.MultiLine = True

       Set Matches = MyRegEx.Execute(frmMain.txtText.Text)

       MatchIndex = 0
       NewPattern = False

   End If

   If MyRegEx.test(frmMain.txtText.Text) = True Then

       If OptionDown.value = True Then

           If regExUp = True Then MatchIndex = MatchIndex + 1

           MatchIndex = MatchIndex + 1

           If MatchIndex > Matches.Count Then MatchIndex = 1

           With frmMain.txtText
               Set Match = Matches.Item(MatchIndex - 1)
               .SelStart = Match.FirstIndex
               .SelLength = Match.length
           End With

           regExUp = False
           InfoLabel.Caption = "Match " & MatchIndex & " of " & Matches.Count

       Else

           If regExUp = False Then MatchIndex = MatchIndex - 1

           MatchIndex = MatchIndex - 1

           If MatchIndex < 0 Then MatchIndex = Matches.Count - 1

           With frmMain.txtText
               Set Match = Matches.Item(MatchIndex)
               .SelStart = Match.FirstIndex
               .SelLength = Match.length
           End With

           regExUp = True
           InfoLabel.Caption = "Match " & MatchIndex + 1 & " of " & Matches.Count

       End If

       frmMain.SearchText = Match.value

   Else

       InfoLabel.Caption = "Expression not found!"

   End If

regExHandler:

   If Err.number <> 0 Then InfoLabel.Caption = Err.Description & " (" & Err.number & ")"

End Sub

 

det var det jeg ville si, og lykke til med programmeringen! :thumbs:

Endret av dga01
Lenke til kommentar
Videoannonse
Annonse

Jeg må innrømme at jeg har alltid vært litt lat i å formatere koden i programmene mine. Dette er spesielt fordi jeg lærte programmering ved å forstå forskjellige eksempler på internett. Som resultat av å observere så mangen formateringer gad jeg blaffen i det hele og ungikk denne ganske nyttige programmeringsstilen.

 

I det siste har jeg forbedret meg, blant annet med å rykke inn ett hakk med alle IF, FOR, DO osv. men jeg holder fremdeles fast ved den gamle stilen i begynnelsen av prosedyrer. (Spesielt fordi jeg har så lite skjerm). Men guiden din klarerte mye.

 

Takk.

Lenke til kommentar
  • 6 måneder senere...
  • 9 måneder senere...

Fin bump. ;)

 

Men, nå er det mer enn et år siden jeg gikk inn på forbedringens sti, og den dag i dag skjemmes jeg i aller høyste grad når jeg ser på mine eldre koder. Innrykk er like naturlig nå som stor forbokstav i setninger og avsnitt i norsktekster. Men, kanskje jeg er litt FOR raus hva kommentarer angår - ofte legger jeg ved en eller annen irrelevant kommentar kun for grønnfargens skyld.

 

Når bør man egentlig inkludere en beskrivende kommentar?

Lenke til kommentar
  • 2 uker senere...
Når bør man egentlig inkludere en beskrivende kommentar?

Man bør unngå å kommentere hver eneste lille ting man gjør. Må man kommentere slike ting for å forstå koden ved en senere anledning, har man som regel skrevet en særdeles rotete og dårlig kode.

 

Nå vet jeg ikke om det er noen 'regler' anngående kommentering, men personlig kommenterer jeg i allefall blokker med kode.

 

Eks.

// Henter ned variabler
*hente mass variabler og gjøre det som trengs*

// Validering
*masse kjedelig validering av brukers input*

// Hva som skal gjøres, basert på input
*som regel en switch, fra min side i allefall, der man enten lagrer noe eller gjør noe annet lurt*

 

Vet ikke helt om det gav noen mening, men det var verdt et forsøk ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...