Om jag har 3 trevliga små variablar, vi kallar dom a,b och c gör så här istället: Hej på Er if a <> "" and b <> "" and c <> "" then > Tex som jag ser ofta att Ni skriver If A = 10 And B = 12 Then Nix min vänn >Nu får du ge dig du börjar bli dumdryg. Det du skriver är sant för skriptspråk (VBScript) som är interpreterade. Där läser datorn en rad i taget och utför vad som står. Ni som älskar att optimera kod bör tänka på att det är mycket sällan man har nytta av optimeringar som gör det enklare för datorna att hantera. Givetvis kan detta behövas vid vissa tunga beräkningar eller mycket ofta använda kodstycken men vad man oftast då glömmer är att en gång skriven kod kan behöva ändras samt vid genomgång för feltest kan den bli mycket svår att förstå. Hej igen Angående optimering i VB och villkor så kan jag bara säga att VB6 funkar så här:Flera if satser
alla dessa måste vara<code> <> "" </code> för att gå vidare.
<code>
If a <> "" Then
If b <> "" Then
If c <> "" Then
If allok = True Then
frmMain.Show
Unload Me
else: msgbox("Something is wrong")
else: msgbox("Something is wrong")
else: msgbox("Something is wrong")
else: msgbox("Something is wrong")
End If
End If
End If
End If
</code>
Detta är antagligen fel och jag är nästan säker på att jag har kunnat det förr. men det var så länge sen jag proggade sist. tacksam för hjälp
kan tillägas att jag får felmedelandet "else without if"Sv: Flera if satser
If a <> "" Then
If b <> "" Then
If c <> "" Then
If allok = True Then
frmMain.Show
Unload Me
Else: MsgBox ("Something is wrong")
End If
Else: MsgBox ("Something is wrong")
End If
Else: MsgBox ("Something is wrong")
End If
Else: MsgBox ("Something is wrong")
End If
/bjSv: Flera if satser
Tycker att Ni skall försöka att uttrycka Er i Select Case mycket
bättre. Tex som jag ser ofta att Ni skriver If A = 10 And B = 12 Then
Fullständigt knäppt. Om inte A är 10 så behöver jag inte kolla And
Skriv istället
If A = 10 Then
If A = 12 Then
.... Gör något
krångla inte in Er i en massa IF Else satser det fixar sig med Select Case
mvh
SvenSv: Flera if satser
gå vidare
else
gå inte vidare
end ifSv: Flera if satser
> Fullständigt knäppt. Om inte A är 10 så behöver jag inte kolla And
Det vet datorn också. Är inte a 10 så kollar den därför inte and.Sv: Flera if satser
Så är det inte om du deklarerar en And sats så är
processen skyldig att kolla om det finns ett And vilkor
att kolla. Nu får du ge dig du börjar bli dumdryg.
Som dom flesta oerfarna.
SvenSv: Flera if satser
Väldigt orättvist mot Thomas, med tanke på att han enligt vad jag förstått är mycket intresserad av C. Där låter man nämligen kompilatorn vara smart (något VB inte kan beskyllas för).
I C/C++ kollas bara så långt som behövs. Detta är mycket användbart i flera tillfällen - t.ex. kan man i samma if-sats fråga om en pekare är ok, och sen om någonting om pekaren (detta kollas alltså bara om pekaren är ok)
/Niklas JanssonSv: Flera if satser
Men i kompilerade språk (dvs när man gör en exe-fil) så gör datorn om det du skrivet till maskinkod och i samband med det så optimeras det. Datorn plockar då bort onödiga uttryck och ändrar din kod så den går snabbare att köra.
Jag ber om ursäkt för att jag vet hur saker är, men anledningen till att jag vet beror på att jag inte nöjer mig med att lita på vad andra säger eller vad det står i böcker, utan jag testar själv också.
Jag har alltså testat att göra ett program med raderna:
if a = 12 and b = 12 then
a = 13
end if
respektive
if a = 12 then
if b = 12 then
a = 13
end if
end if
och de resulterade exefilerna blev exakt likadana. (Jag testade med programmet fc - File Compare.)
Kompilatorn gör om de två exemplen ovan till samma maskinkod, nämligen detta: (taget ur exe-filerna)
cmp dword[ebp-04], 0000000C
jne 00401229
cmp dword[ebp-08], 0000000C
jne 00401229
mov dword[ebp-04], 0000000D
(cmp = compare, jne = jump if not equal, mov = move)
Översätter vi det till lite pseudo-basic, så blir det så här:
if a <> 12 then
goto 00401229
end if
if b <> 12 then
goto 00401229
end if
a = 13
Och det är alltså den koden du får, oavsett om du skriver med and eller utan. Så av detta kan vi alltså se att även om man skriver if a = 12 and b = 12 så kollas inte ifall b är 12 om a inte är 12. Alltså, and-delen utförs bara om det första är sant.
Slutligen ska jag väl också tillägga att eftersom jag inte har någon vb-kompilator här så är exemplena ovan gjorda i en c-kompilator. Jag kan dock inte tänka mig att man skulle ha missat något så väsentligt i vb som att optimera koden, för i så fall är VB verkligen extremt skitdåligt. Men du får jättegärna testa!Sv: Flera if satser
Den kod man skriver måste kunna förstås av andra programerare om man inte har för avsikt att behålla den för sig själv. Om man optimerar bör man noga kommentera vad man gör (tänkte sig att det skulle hända)
Som förslag till en del av koden som här diskuterats så kan negativ testning medföra svårogheter att tolka för programerare och bör bytas till positiv testning
if a <> "" and b <> "" and c <> "" then
gå vidare
else
gå inte vidare
end if
Blir då enklare med
if a = "" or b = "" or c <> "" then
gå inte vidare
else
gå vidare
end if
Annars är som Sven föreslog Select Case ett bra alternativ, när det passar, för att få enkel kod att underhålla vid kommande förändringar.
/RolandSv: Flera if satser
>för i så fall är VB verkligen extremt skitdåligt. Men du får jättegärna >testa!
Där har Vi nöten , fastän det kallas det för kompilering så
kör den så kallade exe filen fortfarande mot en tolk.
Exakt hur det är med And exemplet orkar jag inte kolla.
OBS det där med And har jag inte hittat på själv,läser
mycket expertartiklar om VB 6 , där har mina påstående
ventilerats,just detta om And var uppe för ett tag sedan.
Fortsatt Glad Påsk
mvh
SvenSv: Flera if satser
Den kollar ALLTID ALLA AND-villkor först
Så fort ett AND-villkor INTE är uppfyllt hamnar man på ENDIF
Sen ger den sig på OR-villkoren
NOT används som negator och optimeras in vid kompilering av koden
Ledsen om jag "skriker" bitvis men det är så här VB fungerar...