case

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
sss
Flooderis arba specialistas
Posts: 621
Joined: 2010 Dec 22 20:00
Location: ey b0s

case

Post by sss »

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?
"Give me control of a nation's money and I care not who makes it's laws" — Mayer Amschel Bauer Rothschild
Image

User avatar
MPD
Gana aktyvus vartotojas
Posts: 309
Joined: 2011 Jul 08 07:24
Location: Kaunas

Re: case

Post by MPD »

Suformuluok klausimą tiksliau. Aš nemanau, kad jausis switch ir if greitis. Ir manau, kad tą kodą galima būtų ir lengviau parašyti, jei jau tenka imtis tokio dydžio skaičių.
Image

newb
Pluginų patvirtintojas
Posts: 1047
Joined: 2010 Sep 23 21:43
Location: Wonderland
Contact:

Re: case

Post by newb »

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 :/

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: case

Post by aaarnas »

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:

Code: Select all

switch() {case 3:case 4:case 5: // Stuffbreak;}
Jei apie pawn, tai pakanka į asm sukompiliuoti:

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 
Net nenorėčiau pažiūrėti kaip atrodytų 3 .. 2147483647.

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 
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ę.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

sss
Flooderis arba specialistas
Posts: 621
Joined: 2010 Dec 22 20:00
Location: ey b0s

Re: case

Post by sss »

kas labiausiai is situ tiktu?

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
Image

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: case

Post by aaarnas »

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.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

sss
Flooderis arba specialistas
Posts: 621
Joined: 2010 Dec 22 20:00
Location: ey b0s

Re: case

Post by sss »

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
Image

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: case

Post by aaarnas »

Na tai taip. Tik dar šioje vietoje nieko nelaimi dėl optimizacijos. Išskyrus case 3 .. 2147483647:
Palikau CS pasaulį ;/ . Nebepasiekiamas.

sss
Flooderis arba specialistas
Posts: 621
Joined: 2010 Dec 22 20:00
Location: ey b0s

Re: case

Post by sss »

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
Image

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: case

Post by aaarnas »

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.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

Post Reply

Who is online

Users browsing this forum: No registered users and 6 guests