タグ

idiomに関するIMAKADOのブックマーク (4)

  • 配列のループ - FAX

    配列のループ イディオム (in behaviour.js) 以下は、 for(var i = 0; i < list.length ; i++){ var element = list[i]; alert(element); } 以下のように書ける。 for (var i = 0 ; element = list[i] ; i++){ alert(element); } 「forが多いコードは、ダメなコード」という思いもある。 追記 id:facetさんにブックマークコメントを頂き、カウンタ変数の宣言にvarを追加した。 varをつけない場合、変数はグローバル変数として扱われる。 (function(){ for(i=0 ; i<3 ; i++){} })() // カウンタ変数へ参照可能 ok(i == 3); varをつけると、変数は「関数スコープの中の変数(forなど、ブロックの中

  • 最速インターフェース研究会 :: JavaScriptで出現回数のカウントをする際のコード

    今までこう書いてたのが count[key] = count[key] ? count[key] + 1 : 1; こう書けることが判明した。 count[key] = ++count[key] || 1; コメント欄への回答 count[key]がNumberまたはundefinedであるとして、個人的には count[key] = (count[key] || 0) + 1; のほうが好みです。 JavaScriptでは問題ないとはいえ、言語によってはi = ++iの動作が未定義だったりするので。 前者の書き方とこの書き方は実は問題があって、Object.prototypeに定義されてるメソッドとハッシュのキー名がかぶるとおかしくなる。なので当はcount.hasOwnProperty(key)でチェックするのが正しいのだけれど、出現回数のカウントごときでメソッド呼び出しとかしたくな

  • 最速インターフェース研究会 :: 実践JavaScriptリファクタリング、その2

    連載すんの? リファクタリングとか嘘で実は実践ビルトインオブジェクトハックなんだけど。 例題 配列 a = [3,5,4,2,1] から一番小さな値と、一番大きな値を取り出すにはどうすればいいか。 多分昔はこんな風に書いてたと思うんですよ。 a = [3,5,4,2,1]; for(i=0;i<a.length;i++){ if(i == 0){ min = a[0]; max = a[0]; } if(min > a[i]){min = a[i]} if(max < a[i]){max = a[i]} } 模範解答として、後先考えないやり方を提示しておく。 a = [3,5,4,2,1]; min = a.sort().shift();// 1 max = a.sort().pop(); // 5 短い。ただし、これをやるとaの内容は並べ替えられて最初と最後の要素が取り除かれる。 a /

    IMAKADO
    IMAKADO 2007/09/22
    配列のクローンを作成
  • 最速インターフェース研究会 :: 実践JavaScriptリファクタリング

    同じ事をやるにも、いろんな書き方があるわけでいかにして短くてわかりやすいコードを書くかというノウハウを紹介します。 例として"abcde"を80回繰り返した文字列を作るとして実際に自分のコーディングスタイルがどんな風に変化していったのか、という。 短くなるのは確かなんだけどわかりやすいかというと、人によるかもしれない。 グローバル関数を定義2年前なら、多分こういう具合だった。 //ふつうに関数として定義する function x(str,num){ var tmp = ""; for(var i=0;i<num;i++){ tmp += str; } return tmp; } x("abcde",80) Stringのメソッドとして定義1年前だとこんな感じ。 //Stringのメソッドとして定義する String.prototype.x = function(num){ var tmp

    IMAKADO
    IMAKADO 2007/09/22
    短く書く 使いまわす
  • 1