rvitinn

Jkv misnotkun switch

switch klausan C/C++ er annig a enda arf hvert case me break annars er fari nsta case. Almenna reglan er s a allar case klausur skuli enda me break og margir eru eirrar skounar a engar undantekingar su eirri reglu. g er annarar skounar.

Oftar en einu sinni hef g lent tilvikum ar sem snyrtilegasta lausnin er s a lta lgkina detta fram nsta case. Einfaldasta tilviki er ar sem maur hefur ekki tfrt einhverja valmguleika og vill skila villu egar a kemur upp. sta ess a hafa svo til sama ka fyrir hvert tilfelli er hgt a samnta kann. Eftirfarandi tv dmu eru jafngild.

enum tegund { A,B,C,D,E };

switch(tegund)
{
   case A:
        // skila villu til notanda
        foo("bla");
        break;
   case B:
        // skila villu til notanda
        foo("bla");
        break;
   case C:
        // skila villu til notanda
        foo("bla");
        break;
   case D:
        // skila villu til notanda
        foo("bla");
        break;
   case E:
         // gera eitthva gagnlegt
         foo_bar();
         break;
   default:
        // skila villu til notanda

}

switch(tegund)
{
   case A:
   case B:
   case C:
   case D:
        // skila villu til notanda
        foo("bla");
        break;
   case E:
         // gera eitthva gagnlegt
         foo_bar();
         break;
   default:
        // skila villu til notanda
}

Annar mguleiki er egar vi erum me stigvaxandi lgk. Segjum sem svo a fyrir C urfi a framkvma sull(), fyrir B bi sull() og foobar() og fyrir A urfi a gera foo(), foobar() og sull(), er hgt a gera etta tvenna vegu.

switch(tegund)
{
   case A:
        foo();
        foo_bar();
        sull()
        break;
   case B:
        foo_bar();
        sull()
        break;
   case C:
        sull()
        break;
   default:
        // lglegt tilvik ea eitthva slkt, skila villu
}

switch(tegund)
{
   case A:
        foo();
   case B:
        foo_bar();
   case C:
        sull()
        break;
   default:
        // lglegt tilvik ea eitthva slkt, skila villu
}

Hugsanlega er etta sara dmi vafasamt. Oft er hgt a leysa smu vandaml snyrtilegri htt en lklegt a a s hgt me minni ka. Sumum finnst etta kannski ori heldur goto-legt og a m taka undir a.

Aftur mti er etta skemmtileg lausn a mnu mati og a m ekki vanmeta ann tt forritun. Mr hefur a.m.k. tt a hugavert egar g hef geta nota etta trix til a einfalda lgk og minnka ka.

Aftur mti er spurning hvort kinn verur aulesanlegri, v a skiptir oft meira mli a arir geti lesi og skili kann. g hef alltaf veri eirrar skounar a a skipti miklu mli og er v lentur kveinni klpu, mr finnst etta mjg skrt en lklegast myndu eir lesa yfir svona ka ekki taka eftir v a lgikin dettur niur. a arf v a skjala etta ansi vel, en a lka vi um allan C/C++ ka.

c++
Athugasemdir

Halldr E. - 28/07/04 11:27 #

N er g svo sem ekki fagforritari, en les stundum ka mr til ngju. g ver a segja a essi afer sem kynnir er mjg illlsileg. Hn krefst ess a eyir tma a raa upp "case"-unum fyrirframkvein htt og ef a btist vi "case", arftu a eya tma a sj hvar a vi runinni, ea setja a upp hefbundinn htt nest (me break .e.) og er sullumbulli ori verulega miki.

Matti . - 28/07/04 11:30 #

Nkvmlega, etta er klpan :-) En lausnin er skemmtileg egar hn vi :-P En a er g regla forritun a forast ll trix, a.m.k. ef einhverjar lkur eru a arir urfi a lesa og vihalda kanum.

Bjarni Rnar - 28/07/04 12:53 #

Mr finnst etta engin misnotkun.

a arf auvita a vega og meta hverju sinni hve lsilegt etta er og vihaldanlegt - og stangast sjnarmiin "slmt a fjlfalda ka a rfu" og "slmt ef ki er brothttur og erfitt a breyta eftir". Hvort vegur yngra hltur a fara eftir kanum hverju sinni.

prakss kemur etta samt frekar sjaldan upp - stigvaxandi lgk er ekki mjg algeng minni reynslu. a er hinsvegar mjg algengt a mrg "case" eigi a leia til smu hegunar, og einmitt er augljslega til bta a ekki s veri a fjlfalda sama kabt aftur og aftur.

ess m annars geta a essi eiginleiki forritunarmlsins er eitthva sem C++ erfi fr C.

Matti . - 28/07/04 13:34 #

Stigvaxandi lgk er mjg sjaldgf, en a er einmitt stan fyrir v a mr finnst svo gaman egar g get nota svona lausn :-)

etta er a sjlfsgu allt lglegur C ki lka, g skrifa bara aldrei ka hreinu C, jafnvel egar g skrifa hlfgeran C ka dag notast g vi C++ anda og yfirleitt reyni g a nota C++ fyrirbri a einhverju leyti. Breytti textanum hr a ofan og tala n um C/C++ eins og algengt er.

Oft er notkun switch klausum C++ dmi um hnnum sem mtti laga (tlai a segja ranga en htti vi) en stundum kemst maur ekki hj v a leysa vandaml ennan htt. etta er efni annan pistil en mia vi tnina forritunarpistlum essu bloggi m gera r fyrir a einhverjir mnuir li ar til g kem v fr mr :-)