タグ

closureに関するlesamoureusesのブックマーク (17)

  • Python Hack : 噛めば噛むほどおいしくなるクロージャの話

    最近 JavaScript を書く機会が増えているが、それに従って自分のコーディングスタイルが少しづつだが変化してきているのが分かる。もともと「コードの読みやすさ」や「実行効率」にとことんこだわるタイプだが、(JavaC++になくて)JavaScriptRubyにあるクロージャや無名関数が私のコーディングスタイルにとてもマッチしているからだと思う。 簡単な例を紹介しよう。Pythonで書かれた config.py というモジュール。config.yamlという設定ファイルを読み込んで Dictionary として返す config.get() という関数。普通に実装すると、以下のような感じになる。 import yaml _config = None def get(): global _config if not _config: data = open('config.yaml')

    lesamoureuses
    lesamoureuses 2011/02/14
    こういう意味なのか。なるほど。>二回目からは "lambda: config" (JavaScriptだと "function() { return config; }" という無名関数に相当)を実行する
  • [JavaScript] 猿でもわかるクロージャ超入門 まとめ - DQNEO起業日記

    クロージャとは クロージャは、言葉で説明するのが大変難しい概念です。 あなたは、自転車の乗り方を、口だけで説明できるでしょうか? あなたは、螺旋(らせん)の形を、言葉だけで説明できるでしょうか? ずばり、できないでしょう。 しかし、自転車に乗ることはできますし、針金で螺旋の形を作ることはできるでしょう。 「クロージャ」もこれと同じです。 だから、Wikipediaのこんな解説を見ても落ち込まないでください。 クロージャ (クロージャー、Closure) は、プログラミング言語において引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決する関数のことである。 理解できないですよね? 私もそうでした。 クロージャを既に知っている人にしか、この文章は理解できないでしょう。 クロージャを作るのは難しくない しかし、説明するのは難しくても、作るのは意外と簡単。それが

    [JavaScript] 猿でもわかるクロージャ超入門 まとめ - DQNEO起業日記
  • 関数 - MDC Doc Center

    一般的に言うと、関数とは外部 (再帰の場合は内部) から 呼ばれる ことのできる「サブプログラム」です。プログラムそのもののように、関数は関数体と呼ばれる連続した文で構成されます。値を関数に 渡す 事ができ、関数は値を返す事ができます。 JavaScript において、関数は第一級オブジェクトです。すなわち、関数はオブジェクトであり、他のあらゆるオブジェクトと同じように操作したり渡したりする事ができます。具体的には、関数は Function オブジェクトです。 より詳細な例や解説については、JavaScript の関数のガイドを参照してください。 解説 JavaScript における全ての関数は、実際には Function オブジェクトです。Function オブジェクトのプロパティとメソッドについての情報は Function をご覧ください。 初期値以外の値を返すためには、返す値を指定

    関数 - MDC Doc Center
    lesamoureuses
    lesamoureuses 2009/03/05
    >関数式は毎回クロージャを作成しますが、関数本体は再解析されないので、"new Function(...)" よりは関数式の方がまだ高速です。したがって Function コンストラクタはできる限り避けるべきでしょう。
  • Undo,Redoの実装って何十回もやってる気がする - あしあと日記

    undo,redoの実装って何十回もやってる気がする。毎回同じパターンだ。undo,redoが登場するような編集ソフトは大体同じパターンに落とせる。フレームワークも作った。ブログにそういう内容を書きたいが面倒くさい。需要があれば面倒でも書くんだけどなあ http://twitter.com/youpychan/status/994486992 という発言をしたら何人か反応を頂いたので書いてみることにする。 需要があるなら書こう。undo,redoだけじゃなくてグラフィカルな編集ソフト全般の話をいつかまとめたいと思っていたので、ちょいとシリーズで書いてみようかとおもう http://twitter.com/youpychan/status/994636764 書こうと思う。 まずUndo,Redoについて。 Unod,Redoってみなさんどういう風に実装しているでしょうか? 私はコマンドパタ

    Undo,Redoの実装って何十回もやってる気がする - あしあと日記
    lesamoureuses
    lesamoureuses 2008/11/11
    よし、必要になったときに理解する>クロージャの仕組みの便利さに改めて感心した一例でした。
  • DOM オブジェクトとメモリリーク: Days on the Moon

    IE でのメモリリーク ちょこちょこと紹介されているので知っている人も多いと思うが、IE には DOM ノードに絡んだメモリリークの問題がある。これに関しては Microsoft 自身の記事である「Understanding and Solving Internet Explorer Leak Patterns」に詳しいが、簡単にいえば DOM ノードオブジェクトに関する循環参照を作ると、IE を終了させるまでそのオブジェクトが解放されないというものだ。記事によればメモリリークには以下のようなパターンがあるという。 1. 単純な循環参照 ある DOM ノードオブジェクトのプロパティをたどっていくと自分自身に行き着く場合。以下のようなパターンが考えられる。 element.property == element element1.property1 == element2, element2

    lesamoureuses
    lesamoureuses 2008/06/19
    わかりやすい
  • perl+javascript - 勝手に移植 - ヤンキー名ジェネレータ : 404 Blog Not Found

    2008年03月21日00:30 カテゴリLightweight Languages perl+javascript - 勝手に移植 - ヤンキー名ジェネレータ ギークなお姉さんは好きだけどPHPはそうじゃないので。 ギークなお姉さんは好きですか コレやってみたい! - ヤンキー名ジェネレータきたぁぁぁぁ!!!!! JavaScript こんなものでいかが? ひらがなで入力してね! お名前: 以下、ソース。 var yankee_replace = (function(){ var yankee = {}; var y = [ 'ぁ愛ぃ威ぅ宇ぇ江ぉ悪華餓鬼義苦愚毛外虎悟鎖座刺痔棲頭世是甦族', '多堕痴滋ッ津図手出斗怒那弐濡音乃覇罵ぱ悲美ぴ腐武ぷ屁便ぺ惚慕ぽ', '魔魅無芽喪矢嫌癒遊ョ夜羅離流麗露ゎ我ゐゑヲ無' ].join(''); var xa = 'ぁ'.charCodeAt(0);

    perl+javascript - 勝手に移植 - ヤンキー名ジェネレータ : 404 Blog Not Found
  • (function(){ ... })() の個人的な解釈 - hogehoge @teramako

    (function(var){..............})(var) と function(var){............} の違い。つまり、クロージャ。 - それ図解で。・・・tohokuaikiのチラシの裏 via: (function(){})() と function(){}() - IT戦記 解釈としてはオブジェクトの後ろに()をつけると関数とみなされて実行されるにつきると思う。 実際、どう見ても関数でないものでも後ろに()をつけると関数として評価しようとがんばってくれる。 JavaScript Shell 1.4の結果 var hoge = new Object(); hoge() TypeError on line 1: hoge is not a function 10() TypeError on line 1: 10 is not a function true

    (function(){ ... })() の個人的な解釈 - hogehoge @teramako
    lesamoureuses
    lesamoureuses 2008/02/18
    JavaScript本でこのやり方見た時感動した。>SELECTED_CLASS_NAME,selected変数はリターン値である関数のみが参照でき、さらに親の(function(){ ... })()は一回実行されるのみなので新たに初期化されることもない。
  • Greasemonkeyのソースがかなりアレな件 - hogehoge @teramako

    今、Greasemonkeyのソースを読んでる。実際にどうやってuser scriptを実装させているかの辺りを読んだ。 しかし、物凄い量のグローバル関数だ.... "GM_"と接頭辞が付いたものは、まぁ許そう。しかし、Config関数(というかクラス?)は止めてくれ。そこからさらに呼んでいるgetScriptFile関数もグローバル、さらにgetScriptDirもグローバルだ。 しかも、Configクラスの呼び出しにnew Config(getScriptFile("config.xml"))としているが、Configクラスの実装は function Config(){ this.onload = null; this.scripts = null; this.configFile = getScriptFile("config.xml"); } となっていて、引数が全く意味をなしてい

    Greasemonkeyのソースがかなりアレな件 - hogehoge @teramako
  • Javascript Closures

    The documents under faq_notes/ are unmaintained. An up-to-date version of this document may be available at /faq/notes/closures/. Introduction The Resolution of Property Names on Objects Assignment of Values Reading of Values Identifier Resolution, Execution Contexts and Scope Chains The Execution Context Scope chains and [[scope]] Identifier Resolution Closures Automatic Garbage Collection Formin

    lesamoureuses
    lesamoureuses 2007/12/12
    まとめ
  • Javascriptの黒魔術=クロージャを宮沢賢治風に説明してみる

    先日のエントリーで、「Javascriptの黒魔術」と呼んだのはクロージャのこと。関数呼び出しの際に一時的に作られただけのはずのローカル変数が、ある条件が整うとその関数の実行が終わった後もゾンビのように生き延びて参照が可能、というのがJavascriptのクロージャだ。 これを宮沢賢治風に書いてみるとこんな感じになる。 ある町でふらりと一人で立ち寄ったカラオケ・スナックは、カウンター席しかないとても小さな店だが、客のノリが良くてとても気持ちよく歌えた。おかげでマイクが離せなくなってしまった私に、帰り際にマスターが「そんなに気に入ったのなら、そのマイク持って返ってもいいですよ」と言う。 言われるままに持って返ったマイクは、しばらく家のテレビの横にだらしなく置いてあったのだが、ある晩に歌番組を見ていると私がカラオケで十八番にしている曲が流れるものだから、おもわずそのマイクを手に取って歌ってみた

    lesamoureuses
    lesamoureuses 2007/12/10
    ちょっと笑った>驚く私に、マスターがウインクして言う。「これがJavascriptのクロージャってヤツなんです。気にせず、どんどん歌ってください」。
  • ハタさんのブログ(復刻版) : javascriptを初めて学ぶ人についてのおさらい。その1

    僕にも教える人ができた(? というか人にモノを教える立場)になったので、とりあえず、最近はもっぱらjavascriptを教えています。 もともとCやJavaなどについてはある程度の知識がある人なので、それを少しjs的な意味で、関数言語的な教えをやっている最中のメモ 変数って何ですか?変数って値もしくは式そのものに利便的な名前をつけているものです 次のhogeとfooは値をいれる箱ではなく、値そのものに別名(もしくは分かりやすい名称)を割り当てているだけに過ぎませんよ。 var hoge = 1; var foo = [1, 2, 3]; alert(hoge + 1); // 2 alert(foo[0]); // 1 alert(1 + 1); // 2 alert([1, 2, 3][0]); // 1 つまり、関数自体を変数に代入する事ができます。(functionとは特別な呼び名

    lesamoureuses
    lesamoureuses 2007/12/03
    apllyとクロージャの話がわかりやすい
  • naoyaのはてなダイアリー - Perl のクロージャ

    いつもお世話になってるあの人とかあの人とかが山口家の逆襲->perl-解説->クロージャというクロージャの解説ページをブックマークしてるのをきっかけに、 Perl のクロージャについて自分もちゃんと理解できてるのかというのを考えてみましたが、どうも微妙です。 クロージャについて、何でいまいち理解しきれてない感じがあるのかというと、クロージャがどういうものであるかは知ってるけど、クロージャをどういう時に使うと良いのかが具体的にあれとこれという感じで思い付かないからなのではないかと思った。 なので、Perl でクロージャを使ってる実装とかを見て、どんなときに使われるものなのかをリストアップして理解を深めてみよう..のコーナーです。 クラスにデータを保持するためのクロージャ 僕がぱっと思いついたのは Class::DBI の中で使われている Ima::DBI におけるデータベースハンドラのキャッ

    naoyaのはてなダイアリー - Perl のクロージャ
    lesamoureuses
    lesamoureuses 2007/09/14
    ダメだー。全然わからん。とにかく一歩一歩やろう。
  • JavaScriptの巧い書き方 - Archiva

    Make a note of it: Web tech, montaineering, and so on. Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。 Webに言語は数あれど、特に玉石混淆の激しいJavascriptの書き方について纏めてみた。間違い指摘大歓迎! 発端はYahoo!の Eric Miraglia による、YUI 式モジュールの作り方をまとめた記事。ざっくりまとめると、以下の手順になる。 YAHOO.myProject.myModule = function () { //"private" variables: var myPrivateVar = "I can be accessed only from within YAHOO.myProject.myModule."; //"private" m

    lesamoureuses
    lesamoureuses 2007/07/21
    setIntervalは文字列でしていよりも関数の方が速いのか。
  • いやなブログ: JavaScript とクロージャ

    JavaScript とクロージャ JavaScript プログラミングはなかなかおもしろいよ、と知人に言ってみたところ、 全然信用されずに怪訝な顔をされる、という目に遭いました。 クロージャが使えて DOM ツリーにイベントハンドラを簡単に追加できるよ、と続けると多少は興味を持ってもらえるようなので、クロージャを使ったサンプルプログラムを書いてみました。 箱の中でマウスカーソルを適当に動かしてください。 このプログラムでは各セルの色の濃さをクロージャを使って保持しています。makeHandler という関数の depth という変数がそれです。クロージャを使うと、個々のイベントハンドラごとに独立した状態を簡単に持たせされるのがポイントです。 別にクロージャを使わなくてもいいようなプログラムですが (クロージャではなく DOM のエレメントに状態を持たせるとか)、こういう風にも書けるよ、と

    lesamoureuses
    lesamoureuses 2006/12/21
    お絵かきが楽しい
  • Flash でクロージャ。 : torus solutions!

    Flash はクロージャが使えて便利です。 しかし、 最近はオブジェクト指向とか ActionScript 2.0 ばかり取り沙汰されて、 あまりクロージャの便利さが知られていない感じがします。 難しいオブジェクト指向の勉強はとりあえず先延ばしにしておいて、 気楽に使えるクロージャで楽しく ActionScript のプログラミングをしてみませんか? お題:N フレーム目に○○せよ たとえば、 Flash のムービーを再生して 5 フレーム後に、 指定したコードを走らせるには、 どうすればいいでしょうか? ムービークリップの第 5 フレームに、 実行させたいアクションを書けばいいだけです。 しかしこの方法は、 問題をちょっと一般化するだけで使えなくなります。 この 5 フレームの「5」という数値が予めわかっていない場合は、 上の方法は使えませんね。 onEnterFrame では「5 フレ

    lesamoureuses
    lesamoureuses 2006/11/28
    クロージャがイマイチわからないので勉強用に
  • JavaScript OOP におけるクラス定義方法 - IT戦記

    クラスを定義する方法です。考え付くだけでも、これだけたくさんの方法があります。やっぱり、 JavaScript って柔軟であり複雑な言語ですね。 ちなみに、以下のすべての例はこのクラスを定義しています。 ちなみに、僕は一番下の書き方ですね。 皆さんはどのようにプログラミングしていますか? プロトタイプを使わない。クロージャを使う。 // プロトタイプを使わない。 // クロージャを使う。 function Item(price) { this.showPrice = function() { alert(price); }; } プロトタイプを使わない。クロージャを使わない。 // プロトタイプを使わない。 // クロージャを使わない。 function Item(price) { this.price = price; this.showPrice = function() { aler

    lesamoureuses
    lesamoureuses 2006/10/23
    クラスの書き方一覧
  • Tociyuki::Diary - perlでのクロージャの3パターン

    id:naoya さんが Perl のクロージャの使い道を考えておられるようです。便上して、私が良く使う、3つのパターンを紹介してみます。なお、単なるコード・リファレンスとしての使い方は除外して付随するコンテキストが意味をもつクロージャの場合に限ります。 (2006年2月14日修正 use Fcntl のパラメータに :DEFAULT が抜けていたので追加しました。) コールバック・パターン イテレータにクロージャを渡して、イテレータの中から繰り返し呼び出してもらってコンテキストに副作用を及ぼす使い方です。クロージャの使い方の中でも最も自然に使えるものだと思います。以下、Ruby のブロック呼び出しっぽくコード・リファレンスを $yield パラメータに渡すことにします。へそ曲がりに BBS の CGI コード用に flock による排他ロックを例にしてみます。 package Mutex

    Tociyuki::Diary - perlでのクロージャの3パターン
    lesamoureuses
    lesamoureuses 2006/01/12
    クロージャの意味も知らないわけども
  • 1