2009年10月12日月曜日

JavaScriptの{}の使い方のこと。

この間スクリプトでひさしぶりにswitch文を書いていたとき、そういえばswitch文てあんまり使わないなと思った。
それは、自分がいまの会社でスクリプトを書き始めたすごく最初の頃に、「ある変数が持つ数値に対して、ある文字を返す」処理、たとえばv=1ならばж、2ならばз、3ならばи…といったふうな処理を書こうとしていて、たしかこんな感じだったと思う。
function test(v){
var cr;
if(v){
switch(v){
case 1:cr="ж";break;
case 2:cr="з";break;
case 3:cr="и";break;
case 4:cr="й";break;
case 5:cr="к";break;
case 6:cr="л";break;
case 7:cr="м";break;
case 8:cr="н";break;
case 9:cr="п";break;
default:cr="";
};
};
return cr;
};

var no=4;
alert(test(no));
そのコードを見た先輩が、「それだとコードが長くなって見にくくなるから」と言って、こんな風に書き直した。
function test(v){
 var cr="";
 var pat={1:"ж",2:"з",3:"и",4:"й",5:"к",6:"л",7:"м",8:"н",9:"п"};
if(v){cr=pat[v]};
return cr;
};

var no=4;
alert(test(no));
???
JavaScriptのオブジェクトは、
var obj=new Object();
と作るけれど、単純にパラメータを保持するだけなら
var obj={};
でよい。そして、JavaScriptのオブジェクトはほとんどハッシュマップなので、obj[key]で欲しい値が返るわけ。

この件で、{}の使い方と「短いほうが良いコード」という考え方を教わってから、対応する値が1対1ならばほとんどswitch文は書かないようになった。
そのせいで時々switch文を書かなきゃいけない時に、使い方を忘れてたりする。

2 件のコメント:

co-sche さんのコメント...

このケースなら、配列でもいけますね。

var test = (function(){
var a = 'жзийклмнп'.split('');
a.unshift(undefined);
return function(n) { return a[n] || ''; };
})();

var no = 4;
alert(test(no));

kanemu1117nc さんのコメント...

たしかに単純に番号が来るだけなら、
配列の方がスマートですね。