PRESS』編集部が自信を持ってお届けするシリーズです。「関数プログラミング」は,関数型言語プログラマのみならず,すべてのプログラマにとっても急激に身近なものになってきました。2014年に初版を執筆した後,このたび増補改訂を進めてきた間にも,関数型言語での関数プログラミングだけではなく,既存の言語で関数プログラミングをしてみようといった試みを綴るインターネット上の記事や書籍についても少しずつ増加してきています。関数プログラミングは,ますます多くのソフトウェア技術者の人口に膾炙(かいしゃ)する(広く知れわたる)ようになってきています。みなさんがよく知るメジャーな命令型言語の最近のバージョンでも,関数プログラミングのエッセンスを取り入れた機能が入ってきています。関数型言語を使わない人であっても,使っている言語の新機能をうまく取り入れて開発を続けていくためには,関数プログラミングを学ぶ必要が出てきたということでもあります。関数プログラミングは,その名のとおり「関数」を基本単位とし,関数の組み合わせでプログラムを構成します。関数プログラミングというスタイル自体は,実用的な言語であれば,恐らくどの言語でも可能です。関数プログラミングを行いやすいのは,そのために作られた関数型言語ということになるでしょう。耳にあるいは目にしたことがあるかもしれませんが,関数プログラミングにはさまざまな噂が存在します。火のない所に煙というわけでもありませんが,これらの噂が出てくるにはそれなりの理由が存在します。本書初版が執筆された2014年は,広く使われているオープンソースソフトウェアの深刻な脆弱性が立て続けに発覚しました。みなさんの中にも対応に追われることになった方がいるのではないでしょうか。この状況は,今回の改訂版の執筆中も,残念ながらほぼ変わりはありませんでした。「if」(もしも)の話をしても,まったく詮無(せんな)きことではありますが,複雑な仕様に対してもコードが簡潔に保ちやすい言語,あるいは,プログラマの些細なミスも敏感に検出する安全な言語が使われていたならば,もしかすると防げていたものがあったかもしれません。噂に挙げられたような特性がもし本当であるのならば,関数プログラミングは,世界中の人々が脆弱性対応のために浪費してしまった時間を,丸々なかったことにできたかもしれないのです。本書は,関数プログラミングや関数型言語とは一体どういうものなのかを明らかにします。その中で,前述したような噂が出てくる理由も示します。最終的に,みなさんの道具箱の中の一つとして,関数プログラミングの基礎を加えます。この道具は,実際に関数型言語を使う場合のみならず,みなさんが普段使っている言語にまで活かせる道具となるはずです。関数プログラミングや関数型言語に関する書籍は,すでにいくつか存在しています。本書では,関数型言語としてHaskellを説明に用います。関数プログラミングの基礎のほか,以下の2点に力を入れています。本書の想定読者は,これまでに他の言語をそれなりに使ってきていて,これから関数プログラミング/関数型言語も志す方々および学生の方々です。本書では,よく知られた言語との比較を多めにすることで,関数型言語が持つ利点/欠点などの差異が明確になるようにしました。ここには,単純な比較だけではなく,関数型言語の特定の有用な機能を別のメジャーな言語に取り入れようとするとどうなるかといった話も含まれます。,「関数プログラミングにおける思考方法」は,よく知られた構造化プログラミングやオブジェクト指向プログラミングのそれとはかなり違います。他の関数プログラミング関連書籍を読んだことのある方でも,ともすれば「どう考えて書いていったら良いか」設計方法/思考方法がピンとこない方がいるかもしれません。書き方がわかっても,考え方が伴わなければ,プログラムとはそうそう書けるものではありません。そのため本書では,関数型言語で関数プログラミングを行う際,どのように考えを進めていけば関数型言語らしい簡潔なコードになるかを説明しています。読者のみなさんが,本書から安全なプログラムを記述するための知見を手にし,関数型言語によって,あるいは,みなさんが関わることになる言語に知見を取り入れることによって,より良い未来を築き上げていく一助になればと思います。キヤノンソフトウェア(株)を経て,(株)朝日ネットにて,HaskellでのWebアプリケーション開発や,開発環境/インフラの構成管理などに携わっていた。してAgdaで仕事ができないものか虎視眈々と隙を窺っている。バージョンアップ毎にだんだんと増えていくGHCのコンパイル時間が最近の悩み。べてのエンジニアのための,プログラミング技術情報誌です。TopicsUbuntuコミュニティに興味があるユーザ向けに,ML・Wiki・フォーラムなどの最新の話題を1週間分厳選してお届けします。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。~ソフトウェア開発の荒野を生き抜く~現代のソフトウェア開発の対象領域は,広く複雑で不確実なものになりました。Test)に関わるトピックを中心に,ソフトウェア開発の荒野を生き抜いていくためのプログラミングやソフトウェアエンジニアリングの考え方を書いていきたいと考えています。書籍『ピタゴラスの定理でわかる相対性理論』の補足的な事柄を,本連載としてメモすることにします。読者のみなさまからのご感想やご質問などをお待ちしております。新しく登場したHTTP/3とQUICのしくみをゼロから徹底解説します。HTTP/3では,TCPに代わって新しく策定されたQUICというプロトコルを活用し,より速く,より安全に,より効率的にHTTPメッセージをやりとりします。ブラウザやWebサービスでは,すでにHTTP/3とQUICの利用が開始されています。Web開発者である本誌読者のみなさんには必読の特集です!いま,見ておきたいウェブサイトこの連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。......押さえておきたい輻輳制御アルゴリズム本連載ではTCP/IPの中でも特に,新たなアルゴリズム登場の背景として,ネットワーク環境の変化や,TCP輻輳制御アルゴリズムの変遷と概要をみていきます。