関数型プログラミング

#0 F#とAtCoder

はじめに

「AtCoderではじめるF#入門」は、オンライン参加ができる競技プログラミングサービス "AtCoder" を通して、F#を習得するためのマガジンです。

F#とは

F#はMicrosoftが開発したOCamlベースの.NET向けのプログラミング言語で、OCamlと同様に関数型とオブジェクト指向を併せ持つマルチパラダイムな言語です。

2019年8月現在、関数型プログラミングが注目

もっとみる

#1 開発環境の構築

はじめに

まずはF#の開発環境を整えましょう。

すでに環境構築をされている方にはこの記事は不要ですので、次の記事へ移っていただいて結構です。

今回は、皆さんが現在利用しているマシンが Windows / Mac / Linux のいずれであっても、今後の説明に不都合が発生しないようにするため、

Visual Studo Code + .NET Core

で開発環境を構築していきたいと思い

もっとみる

圏論に案内される

『圏論の道案内』を読んだ。本稿はその読書メモである。

コンピュータ・ソフトウェア関係の人間であれば、だいたいHaskellのモナドから圏論に触れるのではないか。御多分に洩れず私もその一人だった。

私はHaskellが好きだし関数プログラミングは素晴らしいと信じているが、Haskellで仕事をしているプロフェッショナルのプログラマーではない。よって、私がHaskellに対して思っていることは、も

もっとみる

こわくない関数型プログラミング (8) 実例:単体テストとリファクタリング #4 〜カリー化と結合〜

数珠つなぎ、書きにくい

純粋関数の最高さを味わったところで、気になっている部分について考えます。ここです。

Validator.validateZip = function(state) { const state1 = Validator.normalizeToAscii(state); const state2 = Validator.normalizeZipFormat(state1

もっとみる

こわくない関数型プログラミング (7) 実例:単体テストとリファクタリング #3 〜仕様追加〜

リファクタリング=仕様変更フラグ!?

前回、いい感じでリファクタリングできましたが、ここでもっともな指摘が入ります。

さらに偉い人からも。

これに対処していきましょう。

方針:State.valueを変更すればいい

実は、リファクタリング前に作った、StateからDOMに書き戻す関数にこっそりこのための仕掛けを入れてました。

/** * StateオブジェクトからDOMに書き戻す *

もっとみる

こわくない関数型プログラミング (6) 実例:単体テストとリファクタリング #2

今度こそ「純粋関数は最高だ!」となるリファクタリングをしましょう。前回の単体テストの準備ができたコードはこちらです。

この js/validator.js をリファクタリングしていきます。

TDDは最高だ!

$ npx jest test/validator.test.js --watch

として、保存するたびに毎回テストが走るようにしておきます。

空チェックを共通化

まずわかりやすい

もっとみる

こわくない関数型プログラミング (5) 実例:単体テストとリファクタリング #1

ここから、「純粋関数は最高だー!」とつい思ってしまうようなリファクタリングをしていきますよ。

前回のフォームの入力値バリデーションのロジックを純粋関数にした記事からの続きです。

リファクタリング…の前に

さて、リファクタリングをするために必要不可欠なものがあります。そう、単体テストですね。テスト無しとか@t_wadaの(略)

Jestの導入

JavaScriptのテストフレームワークはい

もっとみる

こわくない関数型プログラミング (4) 実例:フォームの入力値バリデーション

さて、文章ばかり書いていてもなんですので、早速プログラムを書いていきます。最初の例はJavaScriptでやってみましょう。「お客様情報」を登録するフォームです。

関数型でないスタイルでべた書き

まずフォーム仕様の確認もかねてべた書きのコードから始めます。

見栄えを良くするためにMaterializeを、コードを短くするためにjQueryを使用していますが、やってることは以下の通りです。

もっとみる

こわくない関数型プログラミング (3) 純粋関数は最高だ

前置きが長くなりました。主題に入ります。

純粋関数には純粋でない関数と比べていくつかのわかりやすい利点があります。どれもぱっと考えれば当たり前のことばかりですが。

単体テストしやすい

ファイルも、DBも、ネットワークも、一定の状態に準備されたオブジェクトも、何も準備がいりません。ただ単に、ある引数を与えて関数を呼び、返り値をチェックするだけです。

実行が速い

だいたいの場合においてアプリ

もっとみる

こわくない関数型プログラミング (2) 用語の定義

最初にいくつかの基本的な言葉を確認しておきます。大丈夫です、このページでは例のモナドとかああいうこわいのは出てきません。(もっとずっと後のほうで出てくる予定)

関数

英語のFunctionをなんで関数って訳しちゃったんだろうと思うのですが、「機能」という直訳のほうがプログラミング的にはしっくりきますよね。もちろんプログラミングの文脈で関数と言ったら、引数を受け取って返り値を返す、あれのことです

もっとみる