switch....case....if.....

Tags:    c++ php

User
Bruger #527 @ 24.04.02 14:35
Hej alle i kloge med udvikler....
Vi sider her nogle stykker og diskutere fordele og udlemper ved case og if...

FX:
if(statment)
{
pinout();
breake;
}

eller

switch (ch)
{
case 'statement':
pinout();
breake;
......

hvilke fyller mindst og bliver hurtigst afviklet i Z80.....

//kim




User
Bruger #24 @ 24.04.02 16:00
DEt er ufatteligt svært at svare på... nogle compilere kan aggresivt optimerer til at skifte mellem begge typer efter hvad der er smartest....

hvis dine case sætninger er noget med case 1, case 2, case 3 ... case n - vil de fleste compilere lave en lookup table (LUT), som nok er noget af det hurtigste..

ellers vil den lave en tabel med jump's for det pågældende index... hvis det er mere hensigts mæssig..

med if kan du få en temlig go "hit rate" hvis du har en idé om hvilke forekomster der kommer flest af... så sætter man dem forrest i rækken...

altså hvis man ved at (i dette tilfælde) at a oftest bliver = 100, næsten lige så tit 44 etc...

kunne man skrive

if(a==100) do_something();
else if(a==44) do_somethin_else();
else if
..
..

og så have mindre og mindre betydningsfulde værdier i hierakisk orden.... jo før if'en fanger værdien, desto hurtigere kode, mindre if'er udført... og med else if - shortcircut'er man så der ikke bliver udført flere unødvendige compares.

men hvis man skal fange værdier i niveauer.. mellem 0 og 99, 100 og 199, 200 og 299 så er if smartest.. det kan man faktisk slet ikke med en switch (uden at lave ufattelig mange follow through - case uden break)

der kommer if's styrke. alt efter om man regner med at der kommer flest store eller små tal, if'er man nede eller oppe fra....

if(a<100) mellem0og99();
else if(a<200) mellem100og199();
else if......

her kunne man lave et trick og lave en division, så ens værdier bliver noget med 0,1,2,3,.... og så ville switch være bedst at bruge igen :)

MVH'
Daniel









En lille tilføjelse til emnet. Jeg har fået afvide og testet i TC, at hvis du skriver 4 eller derover "if-sætninger" kan det betale sig at bruge "case-sætninger". Men Daniel, har nok mere ret i at det afhængere af kompliere når det angår Z80. Ved ikke så meget om sproget.....

Blot en bemærkning



t