タグ

closureに関するgan2のブックマーク (6)

  • [JavaScript] 猿でもわかるクロージャ超入門 1 問題 - DQNEO起業日記

    問題です。 問題: 呼び出すたびに、1,2,3,...を返すような関数 f( )を定義せよ。 f(); // 1 f(); // 2 f(); // 3 この問題、解けますでしょうか? 普通の関数では、できないと思います。 しかし「クロージャ」というのを使えば、このようなことができます。 クロージャって何だ? 「クロージャ」という言葉を、プログラムのやサイトで目にすることがありますよね。 私が最初に見たのは続・初めてのPerl 改訂版(アルパカ)でした。 まったく理解できませんでした。 その後、404 Blog not foundやnaoyaさんのブログなどで「クロージャ」という単語を目にしました。 やはり、まったく分かりませんでした。 とどめの一撃はWikipediaの解説記事。 クロージャ (クロージャー、Closure) は、プログラミング言語において引数以外の変数を実行時の環境

    [JavaScript] 猿でもわかるクロージャ超入門 1 問題 - DQNEO起業日記
  • 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')

  • JavaScriptクロージャを完全理解!スコープチェインを知る(後編) - builder by ZDNet Japan

    前回はスコープチェインのお話に入るための予備知識として「変数オブジェクト」についてのお話をしました。それを踏まえて、今回はスコープチェインと、それによって実現されているクロージャについてしっかり学んでいきたいと思います。 スコープチェインとは 変数オブジェクトに関する説明はしっかりご理解頂けましたでしょうか?JavaScriptの変数は、全て変数オブジェクトのプロパティとして扱われている事、そして変数オブジェクトは状況に応じて違うものが使われる(グローバルスコープであればグローバルオブジェクト、ローカルスコープであれば目に見えない変数オブジェクト)というものでした。ローカルスコープに対応する変数オブジェクトは「アクティベーションオブジェクト」と呼ばれ、関数呼び出しが行われると自動的に作成されます。 しかし実際は、変数を参照するという事は、その場における変数オブジェクト「だけ」を探す訳ではあ

    JavaScriptクロージャを完全理解!スコープチェインを知る(後編) - builder by ZDNet Japan
    gan2
    gan2 2008/08/03
    JS のクロージャはスコープチェインによって成り立っている。
  • Martin Fowler's Bliki in Japanese - CollectionClosureMethod

    http://martinfowler.com/bliki/CollectionClosureMethod.html (detectとinject部分を明確にするよう更新) Smalltalkでプログラミングを始めたときから、コレクションクラスが好きでした。 よく使う強力なオペレーションを簡単に使うことができました。 Javaが登場したとき、このようなメソッドがなくなって物足りないと感じました――Java(およびC#)のコレクションは、Smalltalkのそれと比べて非常に限定されたものでした。 というのも、JavaにはClosureが実装されていなかったからです。 Smalltalkの強力なコレクションのメソッドは、すべてクロージャに依存しています。 近年、私はRubyで頻繁にプログラミングをするようになりました。 Rubyに引き付けられたのは、Rubyには強力なコレクションメソッドがあ

    gan2
    gan2 2008/07/28
    「クロージャとコレクションのコンビネーションによって、素晴らしいことができる」
  • 2006-04-18 - バリケン

    Martin Fowler's Bliki in Japanese - Closureを読んでいたら、なんとなく「手続きオブジェクト」がわかってきたよ。まず、Rubyには「コードの塊(かたまり)」「コードブロック」あるいは単に「ブロック」と呼ばれるものがあるよ(全部同じことを言っているよ。以下「ブロック」で統一するよ)。たとえば、 { puts 'Hello, world!' puts 'Hello, world!' puts 'Hello, world!' } というのがブロックだよ。ブロック自体はリテラルじゃないけど、Procクラスを利用すると「手続きオブジェクト」としてオブジェクト化できるよ。 hello = Proc.new { puts 'Hello, world!' puts 'Hello, world!' puts 'Hello, world!' } 手続きオブジェクトに対し

  • Martin Fowler's Bliki in Japanese - クロージャ

    http://martinfowler.com/bliki/Closure.html 動的言語に興味がでてくると、 クロージャやブロックと呼ばれる概念に出会うと思います。 C/C++/Java/C# などクロージャを持たない言語をご使用の方は、 どういったものなのかご存知ないかもしれません。 ここでは簡単にクロージャについて説明します。 クロージャを持った素晴らしい言語を使ったことある方にとっては、 あまり面白くない話かもしれません。 クロージャは長年使用されてきました。 私が最初に出会ったのは、おそらく Smalltalk だったと思います。 Smalltalk ではブロックと呼んでいました。 Lisp ではクロージャを多用しています。 Ruby でもクロージャが提供されています――多くの rubyist がスクリプト言語に Ruby を選ぶのはこのためです。 基的にクロージャとは、ブ

    gan2
    gan2 2007/05/30
    分かりやすいクロージャの説明
  • 1