Jshint: case ๋ฌธ ํด์Šค๋ฃจ ์‚ฌ์šฉ

์— ๋งŒ๋“  2011๋…„ 02์›” 18์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jshint/jshint

๋‚ด๊ฐ€ Crockford๋ฅผ ์„ค๋“ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” case statement fallthrough๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

์Šค์œ„์น˜(foo){
์‚ฌ๋ก€ 1:
์‚ฌ๋ก€ 2:
๋ฌด์—‡์ธ๊ฐ€();
}

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค:

์Šค์œ„์น˜(foo){
์‚ฌ๋ก€ 1:
doSomethingFirst();
์‚ฌ๋ก€ 2:
๋ฌด์—‡์ธ๊ฐ€();
}

์ด์ „์— ํ•ดํ‚นํ•œ JSLint ๋ฒ„์ „์—์„œ ๋‚˜๋Š” ๋‹น์‹ ์ด ๋„˜์–ด์ง€๋ ค๋Š” ์˜๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” /_falls through_/ ์ฃผ์„์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์Šค์œ„์น˜(foo){
์‚ฌ๋ก€ 1:
doSomethingFirst();
/_๋–จ์–ด์ง€๋‹ค_/
์‚ฌ๋ก€ 2:
๋ฌด์—‡์ธ๊ฐ€();
}

JSHint์— ์ด๊ฒƒ์ด ํฌํ•จ๋˜๊ธฐ๋ฅผ ์ •๋ง ์›ํ•ฉ๋‹ˆ๋‹ค. JSLint์—์„œ ์˜ค๋žซ๋™์•ˆ ๊ณ ํ†ต์„ ๊ฒช์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

.jshintrc ๊ฐœ์ฒด ํ‚ค๋ฅผ ์ฐพ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด:

"-W086": true, //allow fall-through

๋ชจ๋“  10 ๋Œ“๊ธ€

๋˜ํ•œ #11์—์„œ โ€” JSHint์—๋Š” default ๋๊นŒ์ง€ ๊ฐ€์„์„ ํ—ˆ์šฉํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๋ณ„๋„์˜ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , ๋‚˜๋Š” ๋„˜์–ด์ง€๋Š” ๊ฒƒ์ด ์˜๋„์ ์ด๋ผ๋Š” ๋ช…์‹œ์ ์ธ ์ฝ”๋ฉ˜ํŠธ์™€ ํ•จ๊ป˜ ๋‹น์‹ ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์žฌ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 ์Šค์œ„์น˜(foo) {
 ์‚ฌ๋ก€ 1:
 dosmth();
 /*๋Š” */
 ์‚ฌ๋ก€ 2:
 dosmth();
 }

๊ด€๋ จ ์ปค๋ฐ‹: 4a72da1.

๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

IIRC์˜ Crockford๋Š” ์ž์‹ ์˜ ์ฑ…์—์„œ ์ผ€์ด์Šค ํด์Šค๋ฃจ๋ฅผ ์‹ซ์–ดํ•˜๋Š” ์ด์œ ๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์•ผ๊ธฐ๋Š” ์žฌ๋ฏธ์žˆ๊ณ  ๋‹ค์†Œ ๋ธํ”„ ๋น„์ถ”์ฒœ์ž…๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•ด ๋…ผํ‰์„ ํ•ด์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ ๋ธ”๋ก ๋์— throw๊ฐ€ ์žˆ๋Š” case ์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. /* falls through */ ์ฃผ์„์œผ๋กœ ๊ฒฝ๊ณ ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฃผ์„์€ ์ด์ „ ๊ฒฝ์šฐ, ์ฃผ์„ ๋ฐ ๋‹ค์Œ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ ์ด์™ธ์˜ ๋‹ค๋ฅธ ์š”์†Œ์— ์˜ํ•ด "๋ฐฉํ•ด"๋ฉ๋‹ˆ๋‹ค(๊ฒฐ๊ตญ ๊ฒฝ๊ณ ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ). ๊ทธ๋ž˜์„œ ๋Œ“๊ธ€์ด ์™œ ๊ฑฐ๊ธฐ์— ์žˆ๋Š”์ง€์กฐ์ฐจ ์–ธ๊ธ‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

/* falls through */ ๋Œ€์‹  ์ฃผ์„ break; ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

/* falls through */ ์•ž ์˜ ์ค„์— ์ถ”๊ฐ€ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ๊ฒฌ. ๋ฌธ์„œ์— /*falls through*/ ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

๋˜ํ•œ ๋‹ค์Œ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

case 'none':
default:

๊ธฐ์ˆ ์ ์œผ๋กœ 'none' ๋Œ€์†Œ๋ฌธ์ž๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.

๋ฌธ์„œ์— ์ด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด +1์ž…๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กœ์šด ์ ์œผ๋กœ, ๋‚˜๋Š” ์ตœ๊ทผ์— "fall through" ์‚ฌ๋ก€๊ฐ€ ๋ง์ด ๋˜๋Š” ์ƒํ™ฉ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. localStorage์—์„œ ์ฝ์€ ๋ฒ„์ „ ๋ฐ์ดํ„ฐ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „:

function migrate( version, data ) {
    switch( version ) {
        case 1 :
            data.new1 = data.old;  // convert data from version 1 to version 2
            delete data.old;
        case 2 :
            data.new2 = data.new1;  // convert data from version 2 to version 3
            delete data.new1;
    }
    return data;  // return data in version 3 format
}

๋ฐ์ดํ„ฐ ํ˜•์‹์ด ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ์ด์ „ ๋ฒ„์ „์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํŠน์ • ๋ฒ„์ „์„ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

.jshintrc ๊ฐœ์ฒด ํ‚ค๋ฅผ ์ฐพ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด:

"-W086": true, //allow fall-through
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰