33
Tags:
visual-basic
Skrevet af
Bruger #2165
@ 25.01.2003
Intro
Når man skriver en kode skal den helst være til at forstå for andre. Det nytter ikke at skrive noget som det her:
Dim 15483
Dim 15484
Det er umuligt at finde rundt i hvis du senere skal rette fejl eller andre skal kunne læse og forstå dine koder! Det er heller ikke smart at skrive:
Label3.Caption = Text7.Text
Hvem ved hvad Text7 og Label3 er?
Så kan man sidde og søge efter hver eneste ord, og så er det meget svært at forstå hvad der står og det bliver hurtigt uoverskueligt!
Hvis du gider at læse videre får du et par tip til hvordan du kan gøre dine koder mere forståelige.
Brug ord der kendetegner objectet
Hvis du indsætter label's på din form vil Visual Basic automatisk kalde den label1, label2 ovs... Den samme med Tetbox's, altså Text1, Text2 ovs...
Hvis du nu f.eks. vil bruge label1 som en overskrift og Text1 til at være det felt brugeren skal skrive hvad han/hun hedder ville det være smart at skrive sådan:
label1 =
lblTitle
Text =
txtName
lbl fortæller ham der læser at lblOverskrift er en Label, mens txt fortæller at txtNavn er en TextBox. Det vil jeg alt sammen komme ind på senere...
Når du skriver:
Dim 15483
Dim 15484
Kan 15483 og 15484 betyde hvad som helst! Igen skal du bruge det ord der kendetegner hvad det egentlig er du dim'er. Hvis 15483 i virkeligheden betyder om der er skrevet noget i en TextBox og 15484 er om der er trykket på en knap er det oplagt at kalde dem:
Dim 15483 =
Dim TextBoxCheck As Boolean
Dim 15484 =
Dim ButtonCheck As Boolean
Så kan man hurtigt se at TextBoxCheck er en Boolean og at den nok check'er en TextBox, og man kan se at ButtonCheck er en Boolean og at den nok check'er en Button.
Selvom Visual Basic godt kan genkende hvad TextBoxCheck er, er det ikke sikkert at ham der læser din kode kan, så husk altid at skrive hvad det er. Lige som at selvom Visual Basic selv kan tjeke om der med txtName menes txtName.Text, kan ham der læser din kode ikke, så lad være med kun at skrive txtName.
Navngiv dine objekter
Jeg vil nu for at undgå unødvendig forvirring vise en liste der viser lidt om hvordan man forkorter de forskellige objekter:
Objekt: Forkortelse: Eksempel:
Form frm frmMyForm
CheckBox chk chkSound
ComboBox cbo cboSelection
CommandButton cmd cmdExit
DirectoryList dir dirFiles
DriveList drv drvSource
FileList fil filTarget
Frame fra fraChoices
Grid grd grdTV
HorizScrollBar hsb hsbSpeed
Image img imgMyImage
Label lbl lblInfo
Line lin linDiagonal
ListBox lst lstChapters
Menu mnu mnuFile
OptionButton opt optLevel1
PictureBox pic picMyPicture
Shape shp shpMyShape
TextBox txt txtUserArea
Timer tmr tmrMoveIt
VertScrollBar vsb vsbSpeed
Der står ikke alle objekter, men jeg tror jeg har skrevet de vigtigeste...
Ideen er at man let skal kunne afgøre hvad det er for et object bare ved at kigge på navnet. Det er en officel liste så det er altså ikke noget jeg lige har fundet på hvad det skal hedde.
Jeg tænke også på at skrive alle de atributer der er ved de enkelte objekter, men fandt ud af hvor mange der var!
Atribut = Jeg tror nok det er det der kommer efter navnet på objektet, f.eks. .Caption eller .Text.
Option Explicit
Options Explicit er en kode man bare SKAL indsætte i toppen af alle de forme og moduler osv. du kommer til at bruge, ikke fordi programmet ikke vil virke hvis du ikke brugte den, men fordi det sparer dig for en masse besvær med at finde fejl. Tænk på det sådan her:
Hvis du ikke sætter den ind i toppen af alle dine forme og moduler osv. skal du teste hver enkel funktion i hele dit program for at finde fejl.
Hvis du bruger Options Explicit vil det være nok bare at åbne (bruge) alle forme og moduler osv. 1 gang. Du skal altså ikke prøve at trykke på alle knapper eller skrive i alle tekstfelter.
Options Explicit skal bruges sådan:
Options Explicit
Dim Username As Boolean
Dim Password As Boolean
Altså i toppen, husk at indsætte det i toppen på alt! f.eks. forme og moduler som er de mest brugte.
Husk at rykke ind
I stedet for at koderne står op og ned i lange baner ville det jo være smart at rykke det lidt ind så man kan se et mønster. Du kan evt. bruge det samme mønster som mig, men du kan sagtens opfinde dit eget hvis du synes det er mere overskueligt.
Private Sub tmrCheckUserAndPass_Timer()
If Username = True And Password = True Then
cmdButton.Enabled = True
End If
End Sub
Kan du se et mønster?
Mønsteret er at hver gang der kommer en ny handling skal der rykkes ind med en Tab og når der afsluttes en handling skal der rykkes den tilbage med en Tab.
Et eksempel
For ligesom at få alle med eller bare at skære det ud i pap giver jeg et hurtigt eksempel på et program skrevet forkert:
Dim A152
Dim A153
Private Sub Command1_Click()
Label1 = Text1 & " " & Text2
End Sub
Private Sub Text1_Change()
A153 = True
End Sub
Private Sub Text2_Change()
A152 = True
End Sub
Private Sub Timer1_Timer()
If A153 = True And A152 = True Then
Command1.Enabled = True
End If
End Sub
Forstod du ikke hvad programmet gør?
Så check dette stykke kode:
Option Explicit
Dim Username As Boolean
Dim Password As Boolean
Private Sub cmdButton_Click()
lblButtonPress.Caption = txtUsername.Text & " " & txtPassword.Text
End Sub
Private Sub tmrCheckUserAndPass_Timer()
If Username = True And Password = True Then
cmdButton.Enabled = True
End If
End Sub
Private Sub txtPassword_Change()
Password = True
End Sub
Private Sub txtUsername_Change()
Username = True
End Sub
Programmet udføre fulstændig det samme, men denne gang er det skrevet læseligt, så husk når du skal programmere at hvis du springer over hvor gærdet er lavest får du også meget svært ved at rette fejl senere, så du gør det altså ikke kun for andres skyld...
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (11)
Glimrende artikle. Jeg ville oenske at der var flere som ville foelge saadanne retningslinjer.
Fodnote:
Navngivningen af objekter og variable paa denne maade er ofte kendt som "Hungarian notation" - hvis du vil ud og soege mere info :-)
Jeg kan lige tilføje, at det er en meget dog idé at skrive variabler med STORE BOGSTAVER. Det giver også et godt overblik.
fx
public NAVN, EFTERNAVN, ALIAS as string
når man så skriver:
navn = txtNavn.text
så bliver det:
NAVN = txtNavn.text.
- Northcode
Jeg kan lige tilføje, at det er en meget dog idé at skrive variabler med STORE BOGSTAVER. Det giver også et godt overblik.
fx
public NAVN, EFTERNAVN, ALIAS as string
når man så skriver:
navn = txtNavn.text
så bliver det:
NAVN = txtNavn.text.
- Northcode
Tak GUD!!! endelig er der en som lære programmørene noget godt
Hvad er det for noget, hvor blev min ekstra kommentar til artiklen af???
Jeg ville lige tilføje!
at det jo som sagt ikke er for andres skyld men for ens egens skyld.
Det gør det letter for dig som programør at rette fejl ,men også at udvide programmet med opdateringer osv.
det er også en god idé at lave funktion til et stykke kode der skal udføres 1000 af gange!
så i stede for at skrive 5 linier koder 1000 gange, skrive du 5 linier kode én gang i en funktioner, og kalder denne med forskelig indhold af de varibler der skal bruges!
så i stedet for at skrive
5000 linier kna du nøjes med at skrive
1005 liner!
resultatet bliver programet fylder mindre og køre hurtigere!
-Thomas
I min opgivelse over hvilken forkortelse der bruges til hvilket object er der en tilføjelse:
Der er nemlig også mange der skriver
Timer = tim
og bruger altså IKKE forkortelsen: tmr
Når jeg ser overskriften får jeg lyst til at spørge: Hvornår er koder venlige?
Eller der menes måske "Læsevenlige koder"?
Jeg undre mig lidt over at den har fået 'Niveau: Lettere øvet'! Dette burde da være standard for alle og derfor også være det man startede med at lære!
Jeg bruger ingen svære kommandoer og faktisk gør jeg det lettere for newbies at gå igang da de måske får lettere ved at overskue deres koder med mine tips.
En anden vigtig ting ved læsevenlig koder er
i stedet for at skrive
<pre>
funktion testBog(parm1 as booelan)
if parm1 then
'handlig
end if
endn function
[/pre]
<pre>
funktion testBog(parm1 as booelan)
if parm1=true then
'handlig
end if
endn function
[/pre]
Det er vigtig i koden at skrive hvad man tester for.
Rasmus: det er ikke alle, der synes variabler skal skrives med store bogstaver. Faktisk er det vist primært konstanter, man nogle gange skriver med store bogstaver. Bl.a. er det meget udbredt at skrive noget lignende i C/C++:
#define MY_CONSTANT xxx
Du skal være
logget ind for at skrive en kommentar.