not good but great

プログラミング、アート、映画・本の感想について書きます。

連想配列でswitch文を実現する

switchを使う方法

var color = "red";

switch(color){
	case "red":
		console.log("RED");
	break;
	case "blue":
		console.log("BLUE");
	break;
	case "yellow":
		console.log("YELLOW");
	break;
	defalut:
		console.log("different color");
	break;
}

この場合、「RED」が表示される。

連想配列でswitchを実現する

連想配列の使い方

var map = {
	one: "tokyo",
	second: "kanagawa",
	third: "osaka"
};

console.log(map["one"]);//tokyo
console.log(map['one']);//tokyo
//Uncaught ReferenceError: one is not defined 
console.log(map[one]);

キーは文字列であることに注意。

値を関数にする

var color = {
	red: function(){
		console.log("RED");
	},
	blue: function(){
		console.log("BLUE");
	},
	yellow: function(){
		console.log("YELLOW");
	},
	_default: function(){
		console.log("different color");
	}
};

var foo = "red";

color[foo]();//RED

今度は値をキーにすれば、switchっぽいものができる。

・参考
idiomatic.js/translations/ja_JP at master · rwaldron/idiomatic.js · GitHub

var hoge = "green";
//Uncaught TypeError: Object #<Object> has no method 'green' 
color[hoge]();

しかしこのままではdefaultが実装されていない。

//different color
(Object.hasOwnProperty.call(color,hoge) && color[hoge] || color._default)();

callを使うことによって、Objectが持つhasOwnPropertyのthisをcolorにして引数hogeを渡している。それで_defalut以外をチェック。
残ったものは_defaultになる。

・callの使い方

連想配列のメリット

if文などの制御構造を、関数以外の方法である程度保存できるため、何度も呼び出す際に便利
プロトタイプオブジェクト指向の利点を生かして、後々でさらに機能を継ぎ足せる
こちらの記述の方がシンプルな場合が多くある
変数として扱うことから、作成・保存・消去等をある程度直感的に行うことが出来る

・参考
JavaScript JavaScript的プログラミング - Wikibooks

何度も呼び出すときは確かに便利だな。