2009-05-06 4 views
12

私は現在、毎日javascriptをやっています。私はオブジェクト指向の背景から来ており、私が接触しているコードのほとんどは手続き型/オブジェクト指向スタイルです。私は、多かれ少なかれ典型的なWebプログラミングタスクを機能的な方法で解決する良い例を探しています。javascriptを使用した機能スタイルウェブプログラミングの良い例は何ですか?

私は、機能的に見える任意の例を持つことには興味がありません。私は、別のアプローチよりも問題を解決するために機能力をどのように使用するかを示すことができる例を探しています。私はこれが主観的/様式依存の一種であることを知っていますが、あなた自身(自分自身)にとってはそれほど難しくありません。私が覚えている

答えて

17

まず、機能プログラミングの意味を理解したいと思います。つまり、核心的な概念は何であり、どのように言語があなたがそれらの概念を遵守することができるかです。 OOPの場合、コア概念はカプセル化、継承、多態性(または小さなトークャのためのメッセージパッシング)です。 FPについては、中心の教義はreferential transparency(無国籍を意味する)です。機能的な機能(例えばファーストクラスのオブジェクトとしての機能)をサポートしていない言語で機能スタイルでプログラミングしようとすると、不可能ではないにしても厄介なことになります。 OOP機能を持たない言語でOOPでプログラミングする場合と同じです。

幸い、Javascriptはマルチパラダイムであり、両方をサポートしています。 「機能的」なコードの例を探すのではなく、参照の透明性を確保するためのすべての方法について考えてみてください。は、ラムダ、クロージャ、高次関数などのFP機能を使用しています。

真剣にも、これは無回答ではありません。私は本当にこれが最も刺激的で効率的なアプローチ方法だと思っています。

これはうまくいけば役に立つリンクです。

  1. FP programming in JavaScript

  2. Mostly adequate guide to FP

+0

答えがかなりわかりました。私はこの質問を書いている間、本当にわからなかった。私の前提はjavascriptは関数型言語と見なされていましたが、今は本当にそうではありません。私はそれについて考えてみても実際のプロトタイプ言語ではありません:) –

+0

JSは「束縛と規律」言語ではないと言う方がおそらくもっと公正でしょう(それは通常型式規律を指しますが)。ほとんどすべてのスタイルのプログラミングが可能です。 「Functional」と「OOP」は単なるスタイルです。いくつかの言語はあなたを1つのスタイル(JavaやOOP)にしてくれますし、他のスタイル(OOPやFunctionalのC#)やJavaScriptのような本当に気にしないものも許可しています。 –

+0

私はJavaScriptの機能的な使い方についてもっと学ぶことを意味してきました。これは素晴らしい答えです。また、@ Kevin Hakansonが以下に投稿したものに加えて、ここには[Douglas Crockfordを特集したyoutube video](http://www.youtube.com/watch?v=v2ifWcnQs6M) – blong

1

一例としては、それはスコープ(カリー)を扱うと便利ですされているイベントハンドラとして

function bind(aHandler, aBind) { 
    var handler = aHandler; 
    var bind = aBind; 
    return function(event) { 
     return handler.call(bind, event); 
    } 
} 

を登録するためのオブジェクトにバインドされている機能です。

+0

どのようにあなたは、このバインド()関数を呼び出していますか? –

+0

関数someFunctionを持つオブジェクトmyObjectがあるとします。次に、element.addEventHandler( "eventtype"、bind(someFunction、myObject))を呼び出します。だからイベント時にあなたのオブジェクト上の関数は –

0

jQueryをご覧ください。このブログは、それが機能的なスタイルの良いケースを作り出しています。まだ取得 - JSが本当に関数型言語(IMO)ではないので、ハンマーとドライバーを使用して開発者は(と一つであることがそれを強制しようとすると、おそらく最も効率的なパスではない、と述べた http://importantshock.wordpress.com/2009/01/18/jquery-is-a-monad/

壁に釘がありますが、それほど速くはありません:)。それではまた、それはラムダ言語です。

+0

と呼ばれますこれを詳しく教えてください?あなたの主な理由は、javascriptは関数型言語ではないと主張していますか?違いは何ですか? –

+1

私はより明確にすべきだった。これは「純粋に」機能的な言語ではありません。確かにラムダとクロージャーを利用してそのスタイルを書くことができますが、その結果のシンタックスは、JavaScriptに古典的継承を強制しようとするときと同じようなものです。ちょっとひどいですね。完全な開示:私は機能的なスタイルでコード化しないので、あなたの人のために、構文はおそらく完全に受け入れられます。 – pluckyglen

5

ダグラス・クロフォードはリソースページからFunctional JavaScriptにリンクしています。サイトからの抜粋です:

機能は、JavaScriptのプログラミング の機能のためのライブラリです。これは、map、reduce(aka foldl)、 select(別名フィルタ)などの標準高次関数 を と定義しています。また、部分的な機能のために、 curry、rcurry、および partialのような関数を定義しています; アプリケーション;機能レベルのプログラミングまで、compose、guard、 これらの関数はすべて、より冗長な 関数(x){return x + 1}の同義語として、 'x - > x + 1'、 'x + 1'、または '+1'などの文字列を として受け付けます。

関連する問題