Hatena::Groupsubtech

冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

 | 

Jan 09, 2009 (Fri)

JSコードを短かくする Tips 14:02 はてなブックマーク - JS のコードを短かくする Tips - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

可読性を犠牲にしてコードサイズを減らす簡単な方法のメモゴルファーな人はもっとちゃんと知ってそうだなぁ

var を消す

そもそもグローバルを汚染していいならいりませんが、そうでなくても関数の仮引数に書くことで普通に消せます

(function(a){
    var b;
    alert(a)
})()
(function(a,b){
    alert(a)
})()

本当に使いたい仮引数のあとにツラツラかけばOK

var を消す (その2)

function 式を代入するときは function 宣言に変えることで短かくなります。

(function(a){
    a=function(){}
})()
(function(){
    function a(){}
})()


代入を消す

定数を前もって代入するようなケースでは var → 仮引数 と併用して代入を消せます。

(function(){
    var R=Math.random,p='px'
})()
(function(R,p){
})(Math.random,'px')

長いプロパティ名のくくりだし

何度も同じプロパティアクセスをする場合 [str] にして定数をまとめることで短かくなることがあります。

(function(d,e){
   d[e]; d[e]
})(document,'documentElement')

if/else → 三項演算子

だいたいは頭使わずに変換できます。

if(a<b){
    a
}else{
    b; c; d
}
a<b?a:(b,c,d)

式一つしか書けなくなるので、複数の式を書きたいときはセミコロンをカンマに変えて括弧でくくるようにします。文が含まれているとどうしよもないので諦めましょう。代入とかは式なのであんまり困らないです

セミコロンを消す

閉じブレース前のセミコロンは普通消せます

function を再利用する

条件が厳しいですが1つの function を複数の用途に使いまわすことで短くなることがあります。

(function C(a){
    a?(prepare...,setTimeout(C,100)):alert('loaded')
})("foobar")

定数代入がくるかどうかで分岐しています。あとで呼びだされるほうでは外からうけとる定数を使えないので、前もって準備が全て完了するようなものじゃないとだめです。

arguments.callee

上の例でやっていますが、関数式の関数名は単純に arguments.callee の速記になります。関数宣言のように外のスコープ変数になったりはしません。

(function C(){
alert(C===arguments.callee)
})()
C() //=>  C is not defined
 | 

スポンサード リンク

書いてる人

cho45 (佐藤広央) (www.lowreal.net)

Perl, JavaScript, Ruby, HTML, CSS, Web etc


スポンサード リンク