プログラミングF#

[cover photo]
TOPICS
Programming
発行年月日
PRINT LENGTH
436
ISBN
978-4-87311-466-8
原書
Programming F#
FORMAT
PDF
Ebook
3,960円
Ebookを購入する

マイクロソフトが注力する新しい関数型言語F#の解説書です。F#はOCamlやHaskellといった関数型言語から大きな影響を受けており、シンプルかつ強力で、効率良く開発できると注目を集めています。特に、高性能な数値計算、効率的な並列処理、ソフトウェアテストの向上など、数々の場面でに威力を発揮します。習得が難しいとされ、敷居が高い印象のある関数型言語ですが、F#は.NETプラットフォームで利用可能で、また本書では関数型言語の基本から解説しているので、関数型言語に初めて触れる方でも楽しく知識を身につけることができるでしょう。F#の言語の詳細を知りたい人はもちろんのこと、関数型言語について学びたい人にもおすすめの一冊です。F#開発チームの一員だった著者が効率的で楽しいプログラミングを約束します。

目次

目次
序
まえがき

I部 マルチパラダイムプログラミング
1章 F#の紹介
    1.1 F#のはじめの一歩
    1.2 Visual Studio 2010
        1.2.1 2つ目のF#プログラム
        1.2.2 値
        1.2.3 空白について
        1.2.4 .NETとの互換性
        1.2.5 コメント
    1.3 F# Interactive
    1.4 F#のソースファイルを管理する

2章 基本事項
    2.1 組み込み型
        2.1.1 数値型の組み込み型
        2.1.2 算術演算
        2.1.3 変換処理
        2.1.4 BigInt
        2.1.5 ビット演算
        2.1.6 文字
        2.1.7 文字列
        2.1.8 ブール値
    2.2 比較および同値性
    2.3 関数
        2.3.1 型推論
        2.3.2 ジェネリック関数
        2.3.3 スコープ
        2.3.4 制御フロー
    2.4 主要な型
        2.4.1 Unit
        2.4.2 組
        2.4.3 リスト
        2.4.4 集計演算子
        2.4.5 オプション
        2.4.6 Printfn
    2.5 F#プログラムの構造
        2.5.1 モジュール
        2.5.2 名前空間
        2.5.3 プログラムの起動

3章 関数プログラミング
    3.1 関数によるプログラミング
        3.1.1 不変性
        3.1.2 関数値
        3.1.3 再帰関数
        3.1.4 記号演算
        3.1.5 関数合成
    3.2 パターンマッチ
        3.2.1 マッチの失敗
        3.2.2 名前付きパターン
        3.2.3 マッチリテラル
        3.2.4 whenガード
        3.2.5 パターンのグループ化
        3.2.6 データの構造に対するマッチ
        3.2.7 マッチ式の外側
        3.2.8 ラムダ記法への置き換え
    3.3 判別共用体
        3.3.1 判別共用体で木構造を表現する
        3.3.2 パターンマッチ
        3.3.3 メソッドおよびプロパティ
    3.4 レコード
        3.4.1 レコードの複製
        3.4.2 パターンマッチ
        3.4.3 型推論
        3.4.4 メソッドおよびプロパティ
    3.5 遅延評価
        3.5.1 Lazy型
    3.6 シーケンス
        3.6.1 シーケンス式
        3.6.2 Seqモジュール関数
        3.6.3 集合演算

4章 命令型プログラミング
    4.1 .NETとメモリの関係を理解する
        4.1.1 値型と参照型
        4.1.2 既定値
        4.1.3 参照型のエイリアス化
    4.2 値の変更
        4.2.1 参照セル
        4.2.2 可変レコード
    4.3 配列
        4.3.1 配列のインデックス
        4.3.2 配列の分割
        4.3.3 配列の作成
        4.3.4 パターンマッチ
        4.3.5 配列の同値性
        4.3.6 Arrayモジュール関数
        4.3.7 多次元配列
    4.4 可変コレクション型
        4.4.1 List<'T>
        4.4.2 Dictionary<'K,'V>
        4.4.3 HashSet<'T>
    4.5 ループ命令
        4.5.1 whileループ
        4.5.2 forループ
    4.6 例外
        4.6.1 例外処理
        4.6.2 例外の再スロー
        4.6.3 例外の定義

5章 オブジェクト指向プログラミング
    5.1 オブジェクトによるプログラミング
        5.1.1 OOPの利点
        5.1.2 OOPが機能しない場合について
    5.2 System.Objectを理解する
        5.2.1 一般的なメソッド
        5.2.2 オブジェクトの同値性
        5.2.3 暗黙的に定義される同値性
    5.3 クラスを理解する
        5.3.1 明示的コンストラクター
        5.3.2 暗黙的コンストラクター
        5.3.3 ジェネリッククラス
        5.3.4 自己識別子
    5.4 メソッドとプロパティ
        5.4.1 プロパティ
        5.4.2 コンストラクター中でプロパティの値を設定する
        5.4.3 メソッド
        5.4.4 静的メソッド、静的プロパティ、静的フィールド
        5.4.5 メソッドのオーバーロード
        5.4.6 アクセス修飾子
    5.5 継承
        5.5.1 メソッドのオーバーライド
        5.5.2 クラスの分類
        5.5.3 キャスト
6章 .NETプログラミング
    6.1 .NETプラットフォーム
        6.1.1 CLI
        6.1.2 ガベージコレクション
    6.2 インターフェイス
        6.2.1 インターフェイスの使用
        6.2.2 インターフェイスの定義
    6.3 オブジェクト式
        6.3.1 インターフェイス用のオブジェクト式
        6.3.2 派生クラス用のオブジェクト式
    6.4 拡張メソッド
    6.5 モジュールの拡張
    6.6 列挙体
        6.6.1 列挙体の作成
        6.6.2 変換
        6.6.3 判別共用体と列挙体の使い分けについて
    6.7 構造体
        6.7.1 構造体の作成
        6.7.2 制約
        6.7.3 構造体とレコードの使い分けについて

7章 関数プログラミングの応用
    7.1 測定単位
        7.1.1 測定単位の定義
        7.1.2 測定単位同士の変換
        7.1.3 ジェネリック測定単位
    7.2 アクティブなパターン
        7.2.1 単一ケースのアクティブなパターン
        7.2.2 部分的なアクティブなパターン
        7.2.3 引数を取るアクティブなパターン
        7.2.4 複数ケースのアクティブなパターン
        7.2.5 アクティブなパターンを活用する
    7.3 モジュールの使用
        7.3.1 モジュールからクラスへの変換
        7.3.2 意図的な隠ぺい(シャドウ化)
        7.3.3 モジュールの使用を制御する
    7.4 リストを使いこなす
        7.4.1 リスト演算
        7.4.2 リストを活用する
    7.5 末尾再帰
        7.5.1 スタックを理解する
        7.5.2 末尾再帰の紹介
        7.5.3 末尾再帰のパターン
    7.6 関数によるプログラミング
        7.6.1 カリー化
        7.6.2 冗長なコードの削除
        7.6.3 クロージャ
    7.7 関数パターン
        7.7.1 メモ化
        7.7.2 可変関数値
        7.7.3 遅延プログラミング

8章 オブジェクト指向プログラミングの応用
    8.1 演算子
        8.1.1 演算子のオーバーロード
        8.1.2 インデクサー
        8.1.3 スライスの追加
    8.2 ジェネリック型の制約
    8.3 デリゲートとイベント
        8.3.1 デリゲートの定義
        8.3.2 デリゲートの連結
    8.4 イベント
        8.4.1 イベントの作成
        8.4.2 Event<_,_>クラス
        8.4.3 Observableモジュール
        8.4.4 .NETイベントの作成

II部 プログラミングF#
9章 スクリプト
    9.1 F#スクリプトファイル
    9.2 ディレクティブ
        9.2.1 汎用のディレクティブ
        9.2.2 F#スクリプト特有のディレクティブ
    9.3 F#スクリプトのレシピ集
        9.3.1 色付きの出力
        9.3.2 音の生成
        9.3.3 ディレクトリ構造の走査
        9.3.4 プロセスを簡単に起動する
        9.3.5 Microsoft Officeの自動化

10章 計算式
    10.1 計算式に向けて
    10.2 計算式ビルダー
    10.3 カスタム計算式ビルダー
        10.3.1 非同期ワークフロー
        10.3.2 丸めワークフロー
        10.3.3 状態ワークフロー

11章 非同期および並列プログラミング
    11.1 スレッドとの連携
        11.1.1 スレッドの生成
        11.1.2 .NETのスレッドプール
        11.1.3 データの共有
    11.2 非同期プログラミング
    11.3 非同期ワークフロー
        11.3.1 非同期ライブラリ
        11.3.2 非同期操作
        11.3.3 非同期プリミティブを独自に作成する
        11.3.4 制限事項
    11.4 並列プログラミング
        11.4.1 Parallel.For
        11.4.2 Array.Parallelモジュール
    11.5 .NET Parallel Extensions
        11.5.1 プリミティブ
        11.5.2 並列データ構造

12章 リフレクション
    12.1 属性
        12.1.1 属性の適用
        12.1.2 新しい属性を定義する
    12.2 型リフレクション
        12.2.1 型情報の参照
        12.2.2 F#の型に対するリフレクション
    12.3 インスタンスの動的生成
        12.3.1 型の生成
        12.3.2 F#型のインスタンスの生成
        12.3.3 動的呼び出し
        12.3.4 疑問符演算子
    12.4 リフレクションの使用
        12.4.1 宣言的プログラミング
        12.4.2 プラグイン機構

13章 コード引用符
    13.1 コード引用符の基礎
        13.1.1 コード引用符の分解
        13.1.2 メソッド本体を表すコード引用符
        13.1.3 任意のコードに対する分析
        13.1.4 応用:計算処理を別のプラットフォームで行うよう延期させる
    13.2 コード引用符の生成
        13.2.1 スプライス
        13.2.2 コード引用符の評価
        13.2.3 応用:導関数の生成

付録A .NETライブラリ概要
    A.1 可視化
        A.1.1 Windowsフォーム
        A.1.2 Windows Presentation Foundation
    A.2 データ処理
        A.2.1 正規表現
        A.2.2 XMLとの連携
    A.3 データの保存
        A.3.1 ファイルIO
        A.3.2 データのシリアル化
        A.3.3 逆シリアル化
    A.4 F#ライブラリ
        A.4.1 FSharp.Core.dll
        A.4.2 F# PowerPack

付録B F#の相互運用性
    B.1 .NETの相互運用性
        B.1.1 C#からF#と相互運用する
        B.1.2 F#からC#と相互運用する
    B.2 アンマネージコードとの相互運用
        B.2.1 プラットフォーム呼び出し
        B.2.2 COMとの相互運用

索引