Lathund - Slingor och operatorer
Förord
I detta avsnitt behandlas några tekniker som används i praktiskt taget alla program: slingor och operatorer.Innehåll
»»
»
»
»
»
»
»
»
Relaterade artiklar
» Lathund - API-anrop» Lathund - Arrayer, egna datatyper och numreringar
» Lathund - Databaser
» Lathund - Felhantering
» Lathund - Grundläggande syntax
» Lathund - Inbyggda funktioner
» Lathund - Klassmoduler
» Lathund - Kortkommandon
» Lathund - Namngivning och deklarationer
» Lathund - Några extra tips
» Lathund - Spara, öppna och skriva ut filer
» Lathund - Variablers och konstanters räckvidd
Vanliga slingor och operatorer
Operator | Användning | Exempel | Resultat |
---|---|---|---|
+ | Addition | 14 + 5 | 19 |
- | Subtraktion | 14 - 5 | 9 |
* | Multiplikation | 14 * 5 | 70 |
/ | Division | 14 / 5 | 2,8 |
^ | Exponentiering | 14 ^ 5 | 537824 |
\ | Heltalsdivision | 14 \ 5 | 2 |
Mod | Modulus | 14 Mod 5 | 4 |
& eller + | Konkatenering | "Hej " & "då" | "Hej då" |
Operator | Användning |
---|---|
> | Större än |
< | Mindre än |
>= | Större än eller lika med |
<= | Mindre än eller lika med |
<> | Inte lika med |
Operator | Användning | Exempel | Resultat |
---|---|---|---|
And | Båda sidor ska vara sanna | (2 < 3) And (4 < 5) | True |
Or | Minst en av sidorna ska vara sann | (2 < 3) Or (6 > 7) | True |
Xor | Endast en av sidorna ska vara sann | (2 < 3) Xor (4 < 7) | False |
Not | Gör falskt till sant och vice versa | Not (4 = 5) | True |
Slingor av typen For ... Next
For intCount = Första Talet To Sista Talet Step Steglängd
Kod
Next intCount
Exit For avbryter slingan i förtid. Om man utelämnar Step Steglängd blir steglängden 1. Om Steglängd är ett negativt heltal stegar man baklänges. Då måste Första Talet vara större än Sista Talet.
Även om det är mera svårtolkat är det tillåtet att bara skriva
For intCount = Första Talet To Sista Talet Step Steglängd
Kod
Next
Slingor av typen For Each
Denna typ av slinga kan man använda för att nå alla objekt i en samling (collection på engelska). I Visual Basic finns det många samlingar, t ex samlingen Forms, som består av alla laddade formulär.
For Each Objektvariabel In Samling
Kod
Next Objektvariabel
Även om det är mera svårtolkat är det tillåtet att bara skriva
For Each Objektvariabel In Samling
Kod
Next
Exempel:
Private Sub cmdCloseAll_Click()
Dim frm As Form
For Each frm In Forms
Unload frm
Next frm
End Sub
Exit For avbryter slingan i förtid.
Slingor av typen Do ... While
Do While Villkor
Kod
Loop
Exit Do avbryter slingan i förtid.
Man kan även skriva
Do
Kod
Loop While Villkor
Slingor av typen Do ... Until
Do Until Villkor
Kod
Loop
Exit Do avbryter slingan i förtid.
Man kan även skriva
Do
Kod
Loop Until Villkor
Slingor av typen While ... Wend
While Villkor
Kod
Wend
Slingor av typen While ... Wend kan inte avbrytas i förtid.
VARNING!
Använd aldrig en Variant eller en odeklarerad variabel som räknare i en slinga. En For-slinga kan ta dubbelt så lång tid om räknaren är en Variant istället för en Long eller Integer! Dessutom ska man undvika onödiga proceduranrop, beräkningar och konkateneringar i slingor. Annars kan ditt program förlora mycket prestanda. Istället för att skriva
Do While intA < 100
intB = 3 * intC
intA = intA + intB
Loop
bör man naturligtvis skriva
intB = 3 * intC
Do While intA < 100
intA = intA + intB
Loop
så att inte beräkningen intB = 3 * intC utförs varje varv i slingan.
Mycket stor varning för konkateneringar i slingor! Konkateneringar är det segaste som finns i Visual Basic. Att stoppa in konkateneringar i en lång slinga kan vara ett prestandamässigt självmord! Undvik till varje pris! Den praktiska och extremt snabba funktionen Join erbjuder ofta en betydligt bättre lösning än vanlig konkatenering med &-tecknet. Systerfunktionen Split är också mycket användbar.
Beslutsstrukturer av typen If ... Else
If Villkor Then
Kod om villkor är sant
Else
Kod om villkor är falskt
End If
If-satser kan vara utan Else och man kan även kapsla (en del säger nästla) dem inuti varandra:
If Villkor A Then
Kod om villkor A är sant
Else
If Villkor B Then
Kod om villkor B är sant
End If
End If
Med hjälp av ordet ElseIf kan detta skrivas kortare:
If Villkor A Then
Kod om villkor A är sant
ElseIf Villkor B Then
Kod om villkor B är sant
End If
Den senare varianten brukar dock vara mera svårtolkad.
Beslutsstrukturer av typen Select Case
Select Case Variabeln
Case Tänkbart värde, Tänkbart värde, Tänkbart värde ...
Kod om variabeln har något av dessa värden
Case Tänkbart värde, Tänkbart värde, Tänkbart värde ...
Kod om variabeln har något av dessa värden
Case Else
Kod om variabeln har något annat värde
End Select
Tänkbart värde kan t ex vara något av dessa alternativ:
"Skåne"
Is <> "Stockholm"
5000
Is > 1000
Is >= 5000
1000 To 5000
Observera att det aldrig är någon annan kod som körs än den kod som hör till den första matchande Case-satsen. På denna punkt skiljer sig uttrycket Select Case från motsvarande uttryck i andra programmeringsspråk. Uttrycket switch i Java är t ex en aning smartare.
Om man skriver samma värde i flera Case-satser räknas ändå bara den första matchande Case-satsen och det uppstår inte något fel.
Det är inget krav att variabelns värde ska matchas av någon Case-sats och det är inget krav att ta med en Case Else-sats!
Prestandatips: Placera det mest sannolika värdet på variabeln i den första Case-satsen.
With
Uttrycket With gör koden kortare att skriva och förbättrar programmets prestanda om man behöver ändra många egenskaper på en gång för ett och samma objekt.Istället för att skriva
frmMyForm.ScaleTop = 0
frmMyForm.ScaleLeft = 0
frmMyForm.ScaleWidth = 2000
frmMyForm.ScaleHeight = 2000
bör man skriva
With frmMyForm
.ScaleTop = 0
.ScaleLeft = 0
.ScaleWidth = 2000
.ScaleHeight = 2000
End With
0 Kommentarer