ForNext
Only Do What Only You Can Do
Chris Smith『Programming F#』
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イベントの作成
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 応用:導関数の生成