タグ

2008年1月17日のブックマーク (2件)

  • 配列を走査するときに、途中でループを抜けるにはsomeが使える - os0x.blog

    LDRize.Opera用に、some相当の関数を書いていて気がついたことをメモメモ。 配列を走査する際に、目的の値を見つけたらそこでループを抜けたい場合というのは良くあるケースだと思います。普通にfor文などで回す場合は、breakを使うのが一般的です。ただ、forEachではbreakは使えません。 [1,2,3,4,5].forEach(function(v,i){ console.log(v,i); if ( v > 2) ;//break? }); /* 1 0 2 1 3 2 ←ここで止めたい 4 3 5 4 */ そういったときはArray#some(Array#everyでも可)が使えます。 [1,2,3,4,5].some(function(v,i){ console.log(v,i); return v > 2; }); /* 1 0 2 1 3 2 */ このとき、当

    配列を走査するときに、途中でループを抜けるにはsomeが使える - os0x.blog
  • Pythonの技法:ジェネレータを用いた遅延リストの構築 - builder by ZDNet Japan

    プログラムがやる気を出しすぎて、必要のない処理やあなたが実行して欲しくないと思っている処理まで行ってしまうのはよくあることである。プログラムにはもっと怠け者であって欲しいのだ。そこで、ジェネレータの出番である。Pythonのジェネレータを用いると、いつどれだけ処理を行って欲しいかを正確に指定することが可能となる。 既にリストの内包表記というものを紹介した。リストの内包表記を用いれば、リストの内容をより自然な方法で表現することが可能なのであった。稿では、そのリストの内包表記と「いとこ」の関係にあるもの「ジェネレータ」を紹介しよう。ジェネレータを利用すると、シーケンスの各要素を一つずつ構築することが可能となるため、あなたが必要とするだけの処理が行われるようになるのである。 これは遅延評価と呼ばれ、プログラムが値を実際に必要とするまで、特定の値の計算を遅らせるしくみである。遅延評価を利用すれば

    Pythonの技法:ジェネレータを用いた遅延リストの構築 - builder by ZDNet Japan
    pipehead
    pipehead 2008/01/17
    > ジェネレータは本質的には反復子と同じである。従って、さまざまな式の中で(リストのような)シーケンスの代わりにジェネレータを用いることが可能である。