JavaScript関数型プログラミング 複雑性を抑える発想と実践法を学ぶ

JavaScript関数型プログラミング 複雑性を抑える発想と実践法を学ぶ

¥3,400+税

品種名
書籍
発売日
2017/6/9
ページ数
336
サイズ
B5変形判
著者
Luis Atencio 著/株式会社イディオマコムニカ 加藤 大雄 著
ISBN
9784295001133

エレガントさだけではない関数型のメリット

JavaScript関数型へスキルアップ。もう1つのパラダイムへ転換可能に! --本書では、この関数型思考の実践を第1の目標にしています。関数型のメリットに触れながら、ECMAScript 2015(ECMAScript 6)をベースに、再利用性を高める実践テクニックを網羅的かつ段階的に解説。また、より現場指向のテクニックとして、テストや最適化の手法、非同期処理を扱う手法も説明。一般的なテクニックに飽き足らず、より上位レベルの技術の習得を目指すJavaScriptプログラマーに格好の一冊です。

「読者アンケートに答える」「読者プレゼントに応募」の場合もこちらをご利用ください。

アンケートに答える

書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。

学校・法人一括購入に関するお問い合わせはこちらへ。

一括購入窓口

詳細

著者プロフィール

◎ Luis Atencio(ルイス・アテンシオ)

仮想化ソフトウェアベンダーのシトリックスシステムズに所属するソフトウェア開発エンジニア。コンピュータサイエンス分野で学士号と修士号を取得。現在はJavaScript、Java、PHPのアプリケーション開発/設計にフルタイムで従事。技術コミュニティに積極的に参加、ローカルのイベントではプレゼン発表も行う。ソフトウェアエンジニアリングについてのブログ(luisatencio.net)を公開。Twitterアカウントは@luijar

訳者プロフィール

◎ 加藤 大雄(かとう ひろお)

株式会社イディオマコムニカ所属、ITエンジニア。大学で機械工学を専攻するも、IT業界に飛び込んで以来、ITエンジニア一筋。技術者として設計開発・運用保守だけでなく、製品開発、QA、保守の技術部長も経験。日英/英日の技術翻訳、特許翻訳も行う。Valente翻訳スクールにてITコースの講師を担当。IT技術で世の中の役に立てるよう自己研鑽の日々を送る。モットーは「生涯一エンジニア」。仕事上で好きなことは、他人のコードを読むこと、新しい言語や概念を理解すること。趣味は、海外ドラマ鑑賞、語学(仏語など)、登山、旅行、食べ歩き。

http://idioma-comunica.jp/

目次

■Part1 発想の転換とキーコンセプト

第1章 関数型で思考する
1.1 関数型プログラミングを学ぶと役に立つのか?
1.2 関数型プログラミングとは何か
1.3 関数型プログラミングの利点
1.4 まとめ

第2章 関数型言語としてのJavaScript
2.1 なぜJavaScriptなのか
2.2 関数型プログラミング vs. オブジェクト指向プログラミング
2.3 関数
2.4 クロージャとスコープ
2.5 まとめ

■Part 2 関数型のデザインとコーディング

第3章 データ構造の数を減らし、操作の数を増やす
3.1 アプリケーションの制御フローを理解する
3.2 メソッドチェーン
3.3 関数チェーン
3.4 コードを把握する
3.5 再帰的に考えることを学ぶ
3.6 まとめ

第4章 モジュール化によるコードの再利用
4.1 メソッドチェーンと関数パイプライン
4.2 互換性のある関数のための要件
4.3 カリー化された関数評価
4.4 部分適用とパラメータ束縛
4.5 関数パイプラインを合成する
4.6 関数コンビネータを使ってフロー制御を管理する
4.7 まとめ

第5章 複雑性を抑えるデザインパターン
5.1 命令型エラー処理の欠点
5.2 より優れたソリューション:ファンクター
5.3 モナドを使った関数型エラー処理
5.4 モナドチェーンと合成
5.5 まとめ

■Part 3 関数型のスキルを磨く

第6章 関数型コードのテスト
6.1 ユニットテストへの関数型プログラミングの影響
6.2 命令型プログラムのテストにおける課題
6.3 関数型コードをテストする
6.4 プロパティベースのテストを利用して仕様を把握する
6.5 コードカバレッジにより有効性を測定する
6.6 まとめ

第7章 関数型コードの最適化
7.1 関数実行の中身を調べる
7.2 遅延評価を使用して実行を遅らせる
7.3 "必要に応じて呼び出す"戦略を実現する
7.4 再帰と末尾呼び出し最適化(TCO)
7.5 まとめ

第8章 非同期イベント/データのための関数型手法
8.1 非同期コードの課題
8.2 Promiseによる第一級非同期処理
8.3 遅延データ生成
8.4 RxJSによる関数型プログラミングとリアクティブプログラミング
8.5 まとめ

付録A 本書で使用したJavaScriptライブラリ
A.1 関数型JavaScriptライブラリ
A.2 本書で使用したその他のライブラリ

関連書籍

好評発売中

WebデベロッパーのためのReact開発入門 JavaScript UIライブラリの基本と活用

好評発売中

ゲームで学ぶ JavaScript 入門 HTML5&CSS も身につく!

「JavaScriptでココまでできる!」ラクラク学べるゲームプログラミング入門書の決定版!

好評発売中

改訂3版基礎 Ruby on Rails

ウェブアプリケーション開発を学ぶ定番書!

ダウンロード

本製品の読者さまを対象としたダウンロード情報はありません。

お詫びと訂正

誤記のためにご迷惑をおかけし、誠に申し訳ございません。

  • 8ページ リスト1.2直下の1行目(1文目)
    • [誤]
      見た目でもはっきりと区別できように
    • [正]
      見た目でもはっきりと区別できるように
  • 25ページ 冒頭のコード上から3行目(リスト1.6の6行目)
    • [誤]
      val = val.replace(/^\s*|\s*$|\-s/g, '');
    • [正]
      val = val.replace(/^\s*|\s*$|\-/g, '');
  • 86ページ 3.3.3項。リスト3.4後の1つ目の網掛け部分(原著訂正)。
    • [誤]
      const cityPath = ['address','city'];
      const cityLens = R.lens(R.path(cityPath), R.assocPath(cityPath));
    • [正]
      const countryPath = ['address','country'];
      const countryLens = R.lens(R.path(countryPath), R.assocPath(countryPath));
  • 119ページ リスト4.3の11行目
    • [誤]
      'Invald input. Expected non-empty value!');
    • [正]
      'Invalid input. Expected non-empty value!');
  • 158ページ 5.1.3項の網掛け部分(原著訂正)。
    • [誤]
      下記のように変更。
    • [正]
  • 179ページ リスト5.6の解説①(原著訂正)。
    • [誤]
      ①Either型のコンストラクタ関数。この関数は例外または成功値(Right)を保持する
    • [正]
      ①Either型のコンストラクト関数。この関数は例外または成功値(Right)を保持する。簡略化のため、このクラスではブール値isRightとisLeftは省略。これらの実装は容易である。Eitherの完全な実装に関しては、コードレポジトリを参照。
  • 194ページ 図5.13の2個所(原著訂正)
    • [誤]
      nullをError msgに変更。
    • [正]
  • 204ページ 6.2.1項の本文3行目(3文目)
    • [誤]
      単一で、モノシリック
    • [正]
      単一で、モノリシック
  • 211ページ 6.3.2項の本文4行目(5文目)
    • [誤]
      幸い、Loadashや
    • [正]
      幸い、Lodashや
  • 214ページ 6.3.3項の最初の網掛け部分。コード上から4行目(原著訂正)。
    • [誤]
      getOrElse('unable to find student'),
    • [正]
      getOrElse('Unable to find student'),
  • 232ページ 図6.13の図(原著訂正)。
    • [誤]
      下記の図に差し替え。
    • [正]
  • 245ページ 図7.4の図(原著訂正)。
    • [誤]
      下記の図に差し替え。
    • [正]
  • 258ページ リスト7.3の下から7行目(原著訂正)。
    • [誤]
      if (fn.length === 0 || fn.length > 1) {
    • [正]
      if (fn.length !== 1) {
  • 280ページ 8.1.3項のリスト8.4後の網掛けコードの2行目(原著訂正)。
    • [誤]
      let student = students[i];
    • [正]
      var student = students[i];
  • 281ページ 図8.3後の本文4行目(原著訂正)。
    • [誤]
      letでブロックスコープを指定
    • [正]
      varで関数スコープを指定
  • 311ページ A.2.2項の本文1行目(2文目)
    • [誤]
      JQuery
    • [正]
      jQuery

お問い合わせ

書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。

お問い合わせフォーム