2024年バージョンの全面改定された新しい本が公開されているので移動してください 関数型プログラミングをゼロからわかりやすく実用的に幅広い視点から解説!〜 圏論からFRPの構築まで a岡部 健Ken Okabekentutorialbook@gmail.com 関数型プログラミングが『銀の弾丸』である という非常識な常識 2022Functional Programming as the Silver bullet, that is the Insane common sense 2022
この記事は、技術翻訳 Advent Calendar 2016 の15日目です(枠が空いてたので勝手にお邪魔してます)。前回(6日目)は、id:msyksphinz さんの「個人が趣味で技術書を翻訳するという意義について」でした。 今回ご紹介するのは、昨年末に公開された Kris Jenkins さん (@krisajenkins) の "What Is Functional Programming?" です。日本語訳の公開については著者から承諾済みです。また、London Functional Programmers meetup での同タイトルの講演動画が公開されています。 関数型プログラミングの考え方は、世間ではどうも小難しい話だと思われている節があります。その理由の一つに、議論の抽象度が(比較的)高いことが挙げられるでしょう。例えば、以前このブログで紹介した「なぜ関数プログラミング
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? この記事の補足を書きました。併せてご覧いただけると幸いです。 [「関数型プログラミングはオブジェクト指向の正当な後継である」がわからない理由] (http://qiita.com/retemo/items/ac2f35687c82192e8f30#_reference-615873c29073dacce79f) 対象読者 この記事はオブジェクト指向設計を本格的に学びドメイン駆動設計や責務駆動設計等を実践したことがある人々に「オブジェクト指向と関数型プログラミングの関係」を深く知ってもらうことを目的としています。これらの人々の中には手に馴
本稿では、関数型プログラミングのコンセプトを実用的な方法でRubyのコードに盛り込む方法について紹介します。これは、私が「関数型プログラミングのスタイル」と呼んでいるものです。 私が言う「実用的」とは、関数型プログラミングのスタイルを取り入れた後もなお、コードの見た目や印象にRubyの特徴が残っていることを意味します。Rubyは、Haskellではありませんし、Haskellであるべきでもありません。考え方としては、この言語の性質を 利用しよう とするものであって、それに反することをするわけではないのです。出来上がったコードは、Rubyユーザにとって簡単に理解できるものであるべきです。うまくいけば、使い慣れているものよりも簡単と感じていただけるはずです。 では、可変性を回避する利点、方法、欠点、そして可変性の回避が適切ではないケースについて見ていきましょう。 なぜ可変性を回避するべきなのか
※仕様の細かいツッコミはご勘弁を…。 オブジェクト指向で解く みんな大好きオブジェクト指向では、物単位で考えます。言わずもがなですね。やり方はいろいろあると思いますが、まずお弁当という単位で集めると 唐揚げお弁当クラス 状態 主食名 唐揚げ個数 値段 … 振る舞い: つまみ食い() 値段取得() 唐揚げ個数取得() … のような感じで、弁当に必要な要素と必用な処理をひとまとまりにして扱うというのがオブジェクト指向です。 お弁当スーパークラスを作って継承で唐揚げ弁当クラスを、というように拡張を考えた設計にするというのも汎用性が必要な場合は良いと思います。 では早速コードにしてみましょう。 言語はJavaScriptにしています。 (function(){ window.onload=function(){ ////////////////// // クラスの定義 // ///////////
私が関数型プログラミングについて度々耳にするようになったのは、数カ月前からです。でも当時は、それが何なのか見当もつかず、単なるバズワードだと思っていました。皆さんの中にも、そのような方は多いでしょう。それ以来、私は関数型プログラミングについて深く学び、この言葉を日々聞いてはいるものの内容を理解していない初心者の方のために、分かりやすく説明しようと思い立ちました。 関数型プログラミング言語の話になると、「 Haskell と Lisp は どちらが優れているのか 」という 議論 が 白熱する 傾向にあります。HaskellとLispはどちらも関数型言語ですが、実際には大きな違いがあって、それぞれに長所と短所があります。その具体的な内容については、この記事を読み終える頃には深く理解していただけると思います。この2つの言語には、それぞれから派生した言語があります。その中で恐らく皆さんが耳にしたこ
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 関数型プログラミングを業務開発で活用するために HaskellやScala、Erlang/Elixir、Clojureなどの関数型プログラミング言語に興味がある人は多いと思いますが、自分らが日常行なっている業務での開発では到底それらの関数型言語を採用できないのが現実、という場合があるかもしれません。 なので、当面はJavaやGroovy、JS,Ruby,Pythonなどの非関数型プログラミング言語の上で関数型プログラミングスタイルや考え方をなるべく使っていくことでFPの考え方や技法に馴染み広めていき、利点を享受しつつ、将来は大手を振って
関数型プログラミング (functional programming) の利点を説く際によく持ち出されるのが、QuickCheck の開発者の一人である John Hughes が 1984 年に著した論文 "Why Functional Programming Matters" だ。「なぜ関数プログラミングは重要か」という題名で日本語訳もされているので、読んだことがある人も多いと思う。 要旨としては、冒頭の1章および2章で述べられている「関数型プログラミングが優れているのは、高階関数と遅延評価という、モジュール同士を貼り合わせる強力な『糊』を持っているからだ」という話がほぼ全てで、以降はそれを具体例に基づいて説明する構成になっている。ただ、その具体例として「数値計算アルゴリズム」やら「ゲーム用人工知能アルゴリズム」やらの話が延々と続くし、しかもコード例が Haskell の先祖にあたる
最近Rを使っていて、dplyrなどの強力なパッケージで気軽にデータの成形ができることに感動しています。 先輩に渡してもらったコードの中で、tidyr::spreadにデータフレームをパイプ%>%で渡し、 データの成形を一気に終わらせていて、こいつはただごとではないと感じました。 その後、今日の仕事時間の半分はRで遊んでました。 もうPythonのpandasなんかでデータの集計なんてできません。 qiita.com ただ、私はPythonユーザーなので、リストっぽいものは全部リストっぽく操作できる統一的な世界観に慣れてしまっているため、 Rの無駄に高機能な関数を使って操作することに慣れません。 毎回「こんな関数ないかなー」と調べたり、「さっきも同じようなコード書いたよなあ」と思ったり、 強い関数を使っている分、多くの関数を知らないと意味が分からないコードになってしまいがちです。 ところで、
これは「関数型プログラマのための Rx 入門」の補足記事です(タイトル変えた)。 前編、後編とお送りしてきたこの記事だが、特に後編について「何を言ってるのか分からん」というコメントを何人かの方から頂いた。…なんというか、ごめんなさい。 繰り返しになるが、Rx を使う上で関数型プログラミングの知識は必ずしも必要ではないし、むしろ(関数型のコンセプトが基礎にあるのに関わらず)知らなくても使えるようになっている。ライブラリの作者たちは「過度な抽象化は害になる」ということを弁えているのだろう。 しかし、Rx と関数型プログラミングの関係を把握しておくと、非同期データストリームのビルディング・ブロックの作り方について大いに視野が広がるだろう。もし、貴方がこの記事の前提となる「関数型」のパラダイムに興味をお持ちなら、まずは「関数プログラミング実践入門」をお勧めしたい。 関数プログラミング実践入門 ──
jsCafe16(2013/11/10)で話したjavascriptでの関数型プログラミング入門の話です。Read less
さくらばさんに献本して頂きました。 ありがとうございます! Javaによる関数型プログラミング――Java 8ラムダ式とStream 物理的に薄い本ですし、ラムダ式と関数型プログラミングへの入門として良い本だと思います。 チームの後輩に読んで欲しい。 関数型プログラミングへの入門に丁度いいということで、数年前にコップ本で入門を済ませていた私としては少々物足りない気がしました。 ただし7章は末尾再帰の最適化を行うという内容で、そこはJavaコンパイラはサポートしていない部分なので興味深く読みました。 恥ずかしながら、末尾再帰の最適化を自分で書くという発想は無かったので参考になります。 以下、気になった点を挙げます。 タイポも含む。 2〜3ページ。宣言的なコードとはどういうことかを、 いきなりラムダ式を登場させるのではなくJava 7までの語彙で説明しているのが良いですね。 28ページの例2-
【他キーワード】 第一級関数(高階関数が扱える) カリー化(部分適用) 型推論 気をつけるべきは三点 JavaScriptで関数型を考えるにあたっては、 抑えるべきポイントは下記三点となります。 すべての関数が値を返す 関数に副作用がない(参照透過) 関数を値として扱える 関数型として気をつけることはほかにもあるのですが、 入門として今回は扱いません。 すべての関数が値を返す 関数がすべての値を返すようにします。 // Good function hello() { return 'Hello' } console.log(hello()); // Hello // Bad function hello() { console.log('Hello'); } hello();// Hello これによりその返り値を利用し、さらに関数を組み立てていきます。 関数に副作用がない(参照透過) 簡
JavaScriptは関数型言語の特徴を取り入れていると思いますが、純粋な関数型言語ではありません。通常はオブジェクト言語としてプログラミングするかと思います。しかし今、そしてこれからのトレンドは関数型言語と言われています。 そこでJavaScriptでより関数型言語的なプログラミングを可能にするfn.jsを使ってみましょう。慣れるまでは戸惑うかも知れませんが、面白いプログラミングができそうです。 試し中。 fn.jsのインストール fn.jsはクライアント/サーバサイドの両方で利用できます。クライアントサイドの場合は単純に読み込むか、require.jsが使えます。 <script src="path/to/fn.js"></script> // または <script> require.config({ paths: { fn: 'path/to/fn' } }); define(['
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く