Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

それっぽいjavascriptを書くコツ

つーかなんか勘違いされる事があるけど私javascript強者じゃないいですけど・・・・。
なんというか、うまくなる方法ってわけでもないけど思いついたものをサラリ。
大したことやってなくても周りから「なんか凄いできる人みたい」って思われたい的なメソッドかな。
なんでコードの見た目も重視ですよと。

関数を引き数に取る小さな関数を作る

これはmapやfilterの事なんだけど小さな関数をそーいうのを書いておくと楽ですよと。

  • 配列関連

は特に重要。
あとflattenなどは関数をapplyで一発で呼べるようになるので実装してるといいかも。

関数を作る関数を作る

これは重要。というか重宝すると思う。
特にscopeを意識する場合は必須になるんかなと。
あとは遅延実行ね。
関数型のようにかっこよくキメたいあなたにはうってつけかなと。

for文撲滅

これもmapやfilterを使えって事なんだけど。
Arrayのprototypeにmapとか作るとかなり楽ですよと。

for(var i = 0; i < arr.length; i++){
    var o = arr[i];
    ・・・・
}

ってよりも

arr.map(function(obj){
・・・・
})

感じの方がなんかスゲーって思われやすい。
まあ実際楽だけど。

argumentsを使う

引き数はいくらでも渡せる。
なのでargumentsを参照して指定された分だけ処理するとかにするとチマチマしなくていい。
そのため関数を作る関数でargumentsを参照して実行する関数を返すようにすれば使い勝手があがる。
(場合によりけり)

無名関数を上手に使う

さっきの

arr.map(function(obj){
・・・・
})

のように小さな繰り返し系にガシガシ使うとなんかスゲーって思われやすい。
多分こうした方がコーディング量も減る。(はず)
なので小さな繰り返しは小さな無名関数で処理するといいのかなと。
(それらをできるように小さな関数を引き数に取る関数を作っておくのだ)

prototypeを使う

これは微妙な話。
Objectのprototypeだと汚染するんで嫌がられるんだ。
個人的には

  • Function.prototype
  • Array.prototype

はむちゃくちゃ使ってもいいんじゃないかなと思っている。
map,filter,shiftなどはArray.prototypeに。
関数を作る関数はFunction.prototypeに。
ってしておくと呼ぶのが楽チンになる。

function bind(func){
        return function(){
            var bind = arguments;
            return function(){
                var args  = new Array();
                args = args.concat.apply(args, bind);
                args = args.concat.apply(args, arguments);
                return func.apply(null, args);
            };
        };
    }
Function.prototype.bind = function() {
    return bind(this);
}
var a = function func(x, y){
    return x+y;
};  
var a = a.bind()(1)(2);
//a = 3

なんかすごいって感じするよね。
Kumuだとイベントが

function click_test(evt, element){
  alert(element);
}.registEvent(this);
//id:testの要素がclickした時に発動。

って書けるし。
なのでなんとなくjavascriptの人はHaskellにかぶれておいても損はないのかなと。
まーどーでもいいか。
家帰って屁こいて寝たろ。
うくく。