Reactを導入して半年近くが経ちましたWantedlyでは、今年の初めからReact(+Redux)の導入に取り組み始めたので、気付けば半年近く立っていることになります。今自分がこの記事を書いているエディタから、Wantedly Adminのチケット画面まで、ある程度大きなアプリケーションを開発してきました。 そこで今回は、チームで継続的に開発していく過程で遭遇した問題と、それを解決するために導入したImmutable.jsについて紹介します。 増え続けるCallbackとAction、肥大化するStoreReactとセットで語られることが多いFluxアーキテクチャ。ここでは詳しい説明は省略しますが、とてもシンプルな考え方なので、チュートリアルなどで簡単に学ぶことができます。しかし、実際にチームで開発していくと、たしかに動いてはいるけど、綺麗とは言い難いコードが増えてしまいました。 Ac
本記事は、Yaphi Berhanu、Vildan Softic、Jani Hartikainen、Dan Princeが査読を担当しています。最高のコンテンツに仕上げるために尽力してくれたSitePointの査読担当者のみなさんに感謝します。JavaScriptがおもしろいのは、関数型言語としての側面です。JavaScriptの世界では関数は当初から第一級オブジェクトとして扱われてきました。それにより、さまざまな方法でエレガントで表現に富むコードを書くことができます。 しかし、単に関数型プログラミングの能力を持っているからといって、自動的に関数型プログラミングになるわけではありません。Ramda.jsは、JavaScriptを使って関数型プログラミングを始めるサポートをしてくれる人気のライブラリー です(GitHubで4000のスターを獲得しています)。 はじめに Ramda.jsを最

この記事は以下のページに移転しました.blog.ryota-ka.me 「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,Rust やSwift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには―問われたことがないのでわからないのだが―おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモ

JavaScriptに関数型プログラミングでアプローチするメリットは、小さくて理解しやすい個々の関数を用い、複雑な関数を構築できることです。しかし、もっともエレガントなソリューションを見出すには、ときには逆の方向から問題を見ることが必要になります。本記事ではJavaScriptの関数合成について分析し、それによってなぜ判断が簡単でバグが少なくなるのか、段階的なアプローチで説明します。 ネスト関数 関数合成は、複数の単純な関数を受け取り、指定した論理的順序でサブ関数を実行する1つの複雑な関数にまとめる手法です。 結果を得るには、1つの関数を別の関数にネストし、結果を生成するまで、外部関数の操作を内部関数の結果上で繰り返し実行します。結果は、適用された関数の順序によって異なります。 これは以下のように、JavaScriptでよく見られる関数呼び出しを別の関数への引数として渡すプログラミング手

この記事の前編はこちら:JavaScriptユーザのための関数型プログラミング(前編) 遅延評価 遅延評価 は、 サンク や ジェネレータ などのもっと具体的な概念をカバーする一般的な用語の一種です。遅延評価は、その言葉が表すとおりのことを行います。つまり、値が必要になるまで評価しません。可能な限りずるずると、先延ばしにします。例えば、洗わなければならない食器が大量に、もしかすると無限にあるとします。食器を全て流しに置いて一度に洗うのではなく、ゆっくり、一度に1つずつ取って洗うのに似ています。 遅延評価の本質を少しでも理解しやすくするために、Haskellを使って説明したいと思います。まず、 プログラムがどのように評価を行うか を理解する必要があります。皆さんが慣れているほとんど全ての言語は、 最内簡約 を用いています。最内簡約とは、次のようなものです。

私が関数型プログラミングについて度々耳にするようになったのは、数カ月前からです。でも当時は、それが何なのか見当もつかず、単なるバズワードだと思っていました。皆さんの中にも、そのような方は多いでしょう。それ以来、私は関数型プログラミングについて深く学び、この言葉を日々聞いてはいるものの内容を理解していない初心者の方のために、分かりやすく説明しようと思い立ちました。 関数型プログラミング言語の話になると、「 Haskell と Lisp は どちらが優れているのか 」という 議論 が 白熱する 傾向にあります。HaskellとLispはどちらも関数型言語ですが、実際には大きな違いがあって、それぞれに長所と短所があります。その具体的な内容については、この記事を読み終える頃には深く理解していただけると思います。この2つの言語には、それぞれから派生した言語があります。その中で恐らく皆さんが耳にしたこ

FunctionalJavaScript(関数型言語としてのJavaScript)JavaScriptでは関数型言語の一部の機能が備わっています。 ここでは小難しい話は抜きにして、より可読性やメンテナンス性などをよくするために、 実践的なJavaScriptの関数型について考えていきます。 関数型の特徴 JSでの実装のみを知りたい場合は、 この項を飛ばして、気をつけるべきは三点へどうぞ。 関数型言語では関数でプログラムを組みます。 特徴としては 変数は再代入禁止である 関数は参照透過性が保たれている(副作用がない) があります。 しかし、前者の「変数の再代入禁止」は縛りとして強すぎるので、 JSでの実装においてはそこまで重視しません。 ただ再代入が少ない程、可読性はあがりやすいです。 後者の「参照透過性」とは、 「引数が同じであれば何回その関数を実行しても結果が変わらない」ことをいいま

1リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く