質問: react.jsとreduxを使ってコードを書いてると、reducerやaction creatorなどの関数をよくimportして使いますが、オブジェクト指向とは勝手が違うので、こんな関数ばっか使ってて良いものなのかと不安になります。 そもそも、オブジェクト指向で関数やユーティリティクラスが敬遠される理由って何なのでしょうか?(敬遠されてますよね?) 関数を多用するということは、OOPで敬遠されてるものを多用するってことになると思うのですが、関数を多用して上手いことアプリケーションの設計って出来るものなのでしょうか? □補足 reducerはpure functionですが、action creatorはpure functionではないですね。
回答: そもそもの所「敬遠されてますよね?」がfalseなんで、質問文の大部分が息してないかな... > > 敬遠されてますよね? > > > 関数型プログラミングと、オブジェクト指向プログラミングは それぞれが単体で副作用の管理が出来るという話であって、相反するものではないから共存可能だよ。 それを証拠にScalaやF#みたいな折衷案な言語も多数存在する。 OOPが敬遠されるのは腕が伴わないエンジニアでも動作はする糞みたいなコードが作れるのが原因。 関数型言語もちゃんとした腕が伴わなければ読みづらく処理効率も悪い糞なコードになる。 昔よく言われていたPHPerなんかと同じで、優れたエンジニアも多いけど、のけぞるコードを書く人も多く、風評被害にあってるのと一緒。 因みに折衷案にするとこんな使い分けな印象 * 関数型:リスト操作が上手い、宣言的に書く事でバグを減らせる、スマートな演算子を使ってシンプルに書ける * オブジェクト志向:連想配列に型を持たせたり、プロパティやメソッドを保証する > > 関数型プログラミングって何なのですか!? > > > 対義語はオブジェクト指向プログラミングではなく命令型プログラミング。 命令形プログラミングの象徴が`x = x + 1` 命令形プログラミングはマシンの都合に寄り添った書き方なんで、 参照透過性がなかったり、副作用があったりという犠牲を払う事が多い。 結果的に速度出やすいがバグが多くなりがちという泣き所がある。 関数型プログラミングは命題を書くように意識することで副作用を管理する。 参照透過性があり、かつ副作用のない関数はテストし易く動作を保証しやすい。