case
case
yra switch(int)
t.y kazkas nutiks jei int bus nuo 3 iki 2147483647 (max c# int value)
case 3 .. 2147483647:
su if butu paprasciau, bet leciau
t.y kazkas nutiks jei int bus daugiau arba lygu 3
if (int >= 3)
kaip man tai igyvendint su case - daugiau arba lygu, ar tiesiog likti prie max value?
t.y kazkas nutiks jei int bus nuo 3 iki 2147483647 (max c# int value)
case 3 .. 2147483647:
su if butu paprasciau, bet leciau
t.y kazkas nutiks jei int bus daugiau arba lygu 3
if (int >= 3)
kaip man tai igyvendint su case - daugiau arba lygu, ar tiesiog likti prie max value?
"Give me control of a nation's money and I care not who makes it's laws" — Mayer Amschel Bauer Rothschild

Re: case
Nu, tai default naudok.
-- 2013 Rgp 16 23:31 --
Bet jei tu kalbi apie pakeitima tik 1 if tikrinimo (int>=3) i switcha, tai kazkaip labai abejotina, kad jis greitesnis
-- 2013 Rgp 16 23:31 --
Bet jei tu kalbi apie pakeitima tik 1 if tikrinimo (int>=3) i switcha, tai kazkaip labai abejotina, kad jis greitesnis

- aaarnas
- Vyr. diskusijų administratorius
- Posts: 3891
- Joined: 2010 Aug 31 13:21
- Skype: fiarno
- Contact:
Re: case
Iš kur tokių stebuklų sugalvoji?
Viena, tai nesupratau kalbi apie pawn ar apie C#, nes C# neturi abibrėžimo srities nurodymo case'e.
Tada reikėtų visus case rašyti iš eilės neprirašant break, kad peršoktų prie kito:
Jei apie pawn, tai pakanka į asm sukompiliuoti:
--->>>
Net nenorėčiau pažiūrėti kaip atrodytų 3 .. 2147483647.
Dabar su if:
Yra skirtumas įvykdyti vieną asm komandą ir patikrinti ar reikšmė yra didesnė ar ne,
ar įvykdyti 2 milijardus palyginimo komandų. Tad su case atveju net labai pajustum skirtumą, deja visai į priešingą pusę.
Viena, tai nesupratau kalbi apie pawn ar apie C#, nes C# neturi abibrėžimo srities nurodymo case'e.
Tada reikėtų visus case rašyti iš eilės neprirašant break, kad peršoktų prie kito:
Code: Select all
switch() {case 3:case 4:case 5: // Stuffbreak;}
Code: Select all
public func() { new lol switch (lol) { case 3..20: lol = 5 }}
Code: Select all
CODE ; 0;program exit point halt 0 proc ; func break ; c break ; 10 ;$lcl lol fffffffc push.c 0 ;$exp break ; 1c load.s.pri fffffffc switch 0l.2 ; 30 break ; 30 const.pri 5 stor.s.pri fffffffc ;$exp jump 1l.0 ; 4c casetbl case 62 1 case 3 2 case 4 2 case 5 2 case 6 2 case 7 2 case 8 2 case 9 2 case a 2 case b 2 case c 2 case d 2 case e 2 case f 2 case 10 2 case 11 2 case 12 2 case 13 2 case 14 2 case 15 2 case 16 2 case 17 2 case 18 2 case 19 2 case 1a 2 case 1b 2 case 1c 2 case 1d 2 case 1e 2 case 1f 2 case 20 2 case 21 2 case 22 2 case 23 2 case 24 2 case 25 2 case 26 2 case 27 2 case 28 2 case 29 2 case 2a 2 case 2b 2 case 2c 2 case 2d 2 case 2e 2 case 2f 2 case 30 2 case 31 2 case 32 2 case 33 2 case 34 2 case 35 2 case 36 2 case 37 2 case 38 2 case 39 2 case 3a 2 case 3b 2 case 3c 2 case 3d 2 case 3e 2 case 3f 2 case 40 2 case 41 2 case 42 2 case 43 2 case 44 2 case 45 2 case 46 2 case 47 2 case 48 2 case 49 2 case 4a 2 case 4b 2 case 4c 2 case 4d 2 case 4e 2 case 4f 2 case 50 2 case 51 2 case 52 2 case 53 2 case 54 2 case 55 2 case 56 2 case 57 2 case 58 2 case 59 2 case 5a 2 case 5b 2 case 5c 2 case 5d 2 case 5e 2 case 5f 2 case 60 2 case 61 2 case 62 2 case 63 2 case 64 2l.1 ; 368 stack 4 zero.pri retn STKSIZE 1000
Dabar su if:
Code: Select all
public func() { new lol if (lol >= 3) { lol = 5 } }
Code: Select all
CODE ; 0;program exit point halt 0 proc ; func break ; c break ; 10 ;$lcl lol fffffffc push.c 0 ;$exp break ; 1c load.s.pri fffffffc const.alt 3 jsless 0 ;$exp break ; 38 const.pri 5 stor.s.pri fffffffc ;$expl.0 ; 4c stack 4 zero.pri retn STKSIZE 1000
ar įvykdyti 2 milijardus palyginimo komandų. Tad su case atveju net labai pajustum skirtumą, deja visai į priešingą pusę.
Palikau CS pasaulį ;/ . Nebepasiekiamas.
Re: case
kas labiausiai is situ tiktu?
beje http://www.dotnetperls.com/switch
Code: Select all
// else arba default bus naudojami kaip failsafe (rezevuoti) // 1 variantas if (int == 1) { } if (int == 2) { } if (int >= 3) { } // 2 variantasswitch (int) { case 1: { } case 2: { } case 3 .. 2147483647: { }} // 3 variantas switch (int) { case 1: { } case 2: { }} if (int >= 3) { } //////////////////////////////////////////////////////////// ateityje bus kazkas tokio//////////////////////////////////////////////////////// // 1 variantas if (int == 1) { } if (int == 2) { } // heh geriau clamp naudotiif (int >= 3 && int <= 19) { } if (int == 20) { } if (int == 21) { } if (int == 22) { } // ir t.t su rezervu // 2 variantas switch (int) { case 1: { } case 2: { } case 3 .. 19: { } case 20: { } case 21: { } case 22: { } // ir t.t su rezervu} // 3 variantas switch (int) { case 1: { } case 2: { } case 20: { } case 21: { } case 22: { } // ir t.t su rezervu} if (int >= 3 && int <= 19) { }
beje http://www.dotnetperls.com/switch
"Give me control of a nation's money and I care not who makes it's laws" — Mayer Amschel Bauer Rothschild

- aaarnas
- Vyr. diskusijų administratorius
- Posts: 3891
- Joined: 2010 Aug 31 13:21
- Skype: fiarno
- Contact:
Re: case
Nėra kuris labiau tiktų.
Jei reikia patikrinti bet kokią sąlygą - naudoji if.
Jei reikia patikrinti ar kintamasis yra vienas iš konstantų - naudoji switch. Dar kartais praverčia ir default kaip exception.
Daugiau jokių stebuklų nėra.
Dėl atvejų - tinka visi išskyrus #2.
"case 3 .. 2147483647" yra labai neteisinga ir tokio dalyko naudoti negalima. Galima tik mažus intervalus. Matyt dėl to daugumoje kalbų nėra tokios galimybės, kaip nustatyti intervalą case sąlygoje.
Jei reikia patikrinti bet kokią sąlygą - naudoji if.
Jei reikia patikrinti ar kintamasis yra vienas iš konstantų - naudoji switch. Dar kartais praverčia ir default kaip exception.
Daugiau jokių stebuklų nėra.
Dėl atvejų - tinka visi išskyrus #2.
"case 3 .. 2147483647" yra labai neteisinga ir tokio dalyko naudoti negalima. Galima tik mažus intervalus. Matyt dėl to daugumoje kalbų nėra tokios galimybės, kaip nustatyti intervalą case sąlygoje.
Palikau CS pasaulį ;/ . Nebepasiekiamas.
Re: case
aaarnas wrote:Nėra kuris labiau tiktų.
Jei reikia patikrinti bet kokią sąlygą - naudoji if.
Jei reikia patikrinti ar kintamasis yra vienas iš konstantų - naudoji switch. Dar kartais praverčia ir default kaip exception.
Daugiau jokių stebuklų nėra.
Dėl atvejų - tinka visi išskyrus #2.
"case 3 .. 2147483647" yra labai neteisinga ir tokio dalyko naudoti negalima. Galima tik mažus intervalus. Matyt dėl to daugumoje kalbų nėra tokios galimybės, kaip nustatyti intervalą case sąlygoje.
as manau vistiek pagal tai ka suzinojau labiausiai tiktu 3 variantas, nes jei salygos apsiriboja be palyginimu ir tu salygu daugiau nei 2 ar 3 ir tuo paciu yra viena ar kelios salygos su palyginimais if geriau naudoti 3 varianta
"Give me control of a nation's money and I care not who makes it's laws" — Mayer Amschel Bauer Rothschild

Re: case
aaarnas wrote:Na tai taip. Tik dar šioje vietoje nieko nelaimi dėl optimizacijos. Išskyrus case 3 .. 2147483647:
laimiu jei daug salygu ir tik keleta palyginimu, vietoi to, kad if naudociau visur naudoju case ties salygomis ir if su palyginimais, profit?
"Give me control of a nation's money and I care not who makes it's laws" — Mayer Amschel Bauer Rothschild

- aaarnas
- Vyr. diskusijų administratorius
- Posts: 3891
- Joined: 2010 Aug 31 13:21
- Skype: fiarno
- Contact:
Re: case
Amm, šiaip case veikia TIK su palyginimais, o ne sąlygomis. Sumaišei, bet pagrinde taip, palyginimai case, sąlygos - if, kaip ir minėjau prieš tai.
Šioje vietoje ne optimizacijos esmė, o tiesiog naudoji tuos įrankius, kurie priklauso ir patogiausi tam atvejui. Tiesiog basic'as programavimo.
Be to, asembleriniame lygyje, ar 1 palyginimas ar 20, nesudarys visiškai jokio skirtumo. CPU dirba pakankamai aukštu dažniu, tad tai apdorojama pakankamai greitai. Žinoma ar 1 ar 2 milijardai čia jau gali būti skirtumas.
Na viskas pasakyta ir viską išsiaiškinom.
Šioje vietoje ne optimizacijos esmė, o tiesiog naudoji tuos įrankius, kurie priklauso ir patogiausi tam atvejui. Tiesiog basic'as programavimo.
Be to, asembleriniame lygyje, ar 1 palyginimas ar 20, nesudarys visiškai jokio skirtumo. CPU dirba pakankamai aukštu dažniu, tad tai apdorojama pakankamai greitai. Žinoma ar 1 ar 2 milijardai čia jau gali būti skirtumas.
Na viskas pasakyta ir viską išsiaiškinom.
Palikau CS pasaulį ;/ . Nebepasiekiamas.
Who is online
Users browsing this forum: Ahrefs [Bot] and 5 guests