ももんがともふもふと地震と
癒しは必要
ももんが Advent Calendar 2012の七日目Arc Cosineです。
ちなみに、多くの人が僕のHNをArcCosineと認識していますが、正式にはArc Cosineです。ArcとCosineの間に半角スペースが入ります。試験に出ないので、きちんと覚えてメモしておくように。
さて、ももんがと言えば、頭から血を流したあの画像を誰もが想像しますね。
cc licensed ( BY NC ND ) flickr photo shared by southarmstudio
そう、こんな感じ。もっふもふしてメチャクチャ可愛いですね。
もっふもふと言えば、最近僕が気にしているライブラリがあります。それはmofmof.jsです。uupaa.jsと関連しまくってるあのライブラリですね。
mofmof.jsを使えば、JavaScriptでOOPっぽい事が簡単に表現できます。実際にコードに書いてみましょう。
今回は、よくあるvalidatorを作ってみます。
mm.Class('ValidateHandler',{
init: function(){
this._next_handler = null;
},
setNext: function(handler){ //ValidateHandler handler
this._next_handler = handler;
return this;
},
getNextHandler:function(){
return this._next_handler;
},
validate: function(input){
var result = this.execValidate(input);
if( result ){
return this.getErrorMessage();
} else if( this.getNextHandler() !== null ){
return this.getNextHandler().validate(input);
} else {
return true;
}
},
execValidate: function(){ //abstruct
},
getErrorMessage: function(){ //abstruct
}
});
// Number Validate
mm.Class('NumberValidateHandler:ValidateHandler' ,{
execValidate: function(input){
return isNaN(Number(input));
},
getErrorMessage: function(){
return '数値を入力してください';
}
});
// Undefined Valida
mm.Class('UndefinedValidateHandler:ValidateHandler', {
execValidate: function(input){
return ( typeof input === 'undefined' );
},
getErrorMessage: function(){
return '入力が正しくありません';
}
});
// Blank Valida
mm.Class('BlankValidateHandler:ValidateHandler', {
execValidate: function(input){
return ( input === '' );
},
getErrorMessage: function(){
return '入力が正しくありません';
}
});
function validate(input){
var nh = new mm.NumberValidateHandler(),
bh = new mm.BlankValidateHandler(),
uh = new mm.UndefinedValidateHandler(),
message = "",
ret = false;
uh.setNext(bh.setNext(nh));
ret = uh.validate(input);
if( ret !== true){
message = ret;
mm.log(message); //debug
return false;
}
return true;
}
[
[validate(123), true],
[validate(""), false],
[validate("abc"), false]
].test("Validate");
Chain of Responsibility パターンですね。
jsdoitに同じコードをアップしました。参考にしてください。
このコードを書いている最中に地震が来ました
びっくりしました。また、地震で大変ですね。
僕に出来ることはひたすらコードを書いて世の中を変えていく事だけなので、本当にこういう時は無力である事を実感します。
本当に地震は怖いです。お気をつけて。
明日のももんが Advent Calendar 2012は、@attokunnです。