プログラミング言語 Ruby

[cover photo]
TOPICS
Programming , Ruby
発行年月日
PRINT LENGTH
472
ISBN
978-4-87311-394-4
原書
The Ruby Programming Language
FORMAT
Print PDF
Ebook
4,180円
Ebookを購入する
Print
4,180円

表現力の高い文法と、強力で内容の豊かなAPIを持つコアクラスライブラリを備えた動的プログラミング言語であるRubyは、プログラミングの楽しさを感じる言語として世界中のプログラマから大きな支持を集めています。本書はRubyプログラミング言語を徹底的に、かつわかりやすく解説するものです。字句構造、データ型、式と演算子から条件分離、関数プログラミング、クラスとモジュール、メタプログラミングまでRuby言語のすべてを包括的に説明しています。Rubyコアプラットフォームやプログラミング環境についても詳述。Rubyを学ぶすべての人におくるRuby解説書の決定版です。

目次

目次

著者まえがき
はじめに

1章	イントロダクション
    1.1 Rubyひとめぐり
        1.1.1 Rubyはオブジェクト指向言語
        1.1.2 ブロックとイテレータ
        1.1.3 Rubyの式と演算子
        1.1.4 メソッド
        1.1.5 代入
        1.1.6 記号のサフィックス、プレフィックス
        1.1.7 正規表現と範囲
        1.1.8 クラスとモジュール
        1.1.9 意外感の残るRubyの機能
    1.2 Rubyを使ってみよう
        1.2.1 Rubyインタープリタ
        1.2.2 出力の表示
        1.2.3 対話的Rubyのirb
        1.2.4 Rubyのドキュメントを表示するri
        1.2.5 Rubyパッケージ管理のgem
        1.2.6 Rubyのその他のチュートリアルについて
        1.2.7 Rubyリソース
    1.3 本書について
        1.3.1 本書の読み方
    1.4 Rubyによる数独ソルバ

2章	Rubyプログラムの構造と実行
    2.1 字句構造
        2.1.1 コメント
        2.1.2 リテラル
        2.1.3 記号類
        2.1.4 識別子
        2.1.5 キーワード
        2.1.6 空白
    2.2 構文構造
        2.2.1 Rubyのブロック構造
    2.3 ファイル構造
    2.4 プログラムのエンコーディング
        2.4.1 プログラムのエンコーディングの指定
        2.4.2 ソースエンコーディングとデフォルト外部/内部エンコーディング
    2.5 プログラムの実行

3章	データ型とオブジェクト
    3.1 数値
        3.1.1 整数リテラル
        3.1.2 浮動小数点数リテラル
        3.1.3 Rubyの算術演算
        3.1.4 2進浮動小数点数と丸め誤差
    3.2 文字列
        3.2.1 文字列リテラル
        3.2.2 文字リテラル
        3.2.3 文字列演算子
        3.2.4 文字や部分文字列へのアクセス
        3.2.5 文字列の反復処理
        3.2.6 文字列のエンコーディングとマルチバイト文字
    3.3 配列
    3.4 ハッシュ
        3.4.1 ハッシュリテラル
        3.4.2 ハッシュ値、等値性、ミュータブルなキー
    3.5 範囲
        3.5.1 範囲のメンバかどうかのテスト
    3.6 シンボル
    3.7 true、false、nil
    3.8 オブジェクト
        3.8.1 オブジェクト参照
        3.8.2 オブジェクトの寿命
        3.8.3 オブジェクト識別子
        3.8.4 オブジェクトのクラスと型
        3.8.5 オブジェクトの等値性
        3.8.6 オブジェクトの順序
        3.8.7 オブジェクトの変換
        3.8.8 オブジェクトのコピー
        3.8.9 オブジェクトの永続化
        3.8.10 オブジェクトのフリーズ
        3.8.11 オブジェクトの汚染状態

4章	式と演算子
    4.1 リテラルとキーワードリテラル
    4.2 変数参照
        4.2.1 未初期化変数
    4.3 定数参照
    4.4 メソッド呼び出し
    4.5 代入
        4.5.1 変数への代入
        4.5.2 定数への代入
        4.5.3 属性と配列要素への代入
        4.5.4 自己代入
        4.5.5 多重代入
    4.6 演算子
        4.6.1 単項+、-
        4.6.2 指数: **
        4.6.3 算術演算子: +、-、*、/、%
        4.6.4 シフトと追加: <<、>>
        4.6.5 補数、ビット単位AND、ビット単位OR、ビット単位XOR: ~、&、|、^
        4.6.6 比較: <、<=、>、>=、<=>
        4.6.7 等値: ==、!=、=~、!~、===
        4.6.8 論理演算子: &&、||、!、and、or、not
        4.6.9 範囲とフリップフロップ: ..、...
        4.6.10 条件: ?:
        4.6.11 代入演算子
        4.6.12 defined?演算子
        4.6.13 文修飾子
        4.6.14 演算子ではない記号

5章	文と制御構造
    5.1 条件分岐
        5.1.1 if
        5.1.2 修飾子としてのif
        5.1.3 unless
        5.1.4 case
        5.1.5 ?:演算子
    5.2 繰り返し
        5.2.1 whileとuntil
        5.2.2 修飾子としてのwhile、until
        5.2.3 for/inループ
    5.3 イテレータとEnumerableオブジェクト
        5.3.1 数値イテレータ
        5.3.2 Enumerableオブジェクト
        5.3.3 カスタムイテレータの書き方
        5.3.4 Enumerator
        5.3.5 外部イテレータ
        5.3.6 反復処理と同時変更
    5.4 ブロック
        5.4.1 ブロックの構文
        5.4.2 ブロックの値
        5.4.3 ブロックと変数のスコープ
        5.4.4 ブロックへの引数渡し
    5.5 制御フローの変更
        5.5.1 return
        5.5.2 break
        5.5.3 next
        5.5.4 redo
        5.5.5 retry
        5.5.6 throwとcatch
    5.6 例外と例外処理
        5.6.1 例外クラスと例外オブジェクト
        5.6.2 raiseによる例外の生成
        5.6.3 rescueによる例外処理
        5.6.4 else節
        5.6.5 ensure節
        5.6.6 メソッド、クラス、モジュール定義のrescue
        5.6.7 文修飾子としてのrescue
    5.7 BEGINとEND
    5.8 スレッド、ファイバ、継続
        5.8.1 並列実行のためのスレッド
        5.8.2 コルーチンのためのファイバ
        5.8.3 継続

6章	メソッド、proc、lambda、クロージャ
    6.1 単純なメソッドの定義
        6.1.1 メソッドの戻り値
        6.1.2 メソッドと例外処理
        6.1.3 オブジェクトからのメソッド呼び出し
        6.1.4 特異メソッドの定義方法
        6.1.5 メソッド定義の解除
    6.2 メソッド名
        6.2.1 演算子メソッド
        6.2.2 メソッドの別名
    6.3 メソッドとかっこ
        6.3.1 省略可能なかっこ
        6.3.2 必須のかっこ
    6.4 メソッド引数
        6.4.1 引数のデフォルト値
        6.4.2 可変長引数リストと配列
        6.4.3 実引数から仮引数へのマッピング
        6.4.4 名前付き引数のハッシュ
        6.4.5 ブロック引数
    6.5 Proc
        6.5.1 Procの作り方
        6.5.2 Procの実行
        6.5.3 Procの項数
        6.5.4 Procの等値性
        6.5.5 procとlambdaの違い
    6.6 クロージャ
        6.6.1 クロージャと共有変数
        6.6.2 クロージャと束縛
    6.7 Methodオブジェクト
        6.7.1 UnboundMethodオブジェクト
    6.8 関数プログラミング
        6.8.1 Enumerableへの関数の追加
        6.8.2 関数の合成
        6.8.3 関数の部分適用
        6.8.4 関数のメモ化
        6.8.5 Symbol、Method、Proc

7章	クラスとモジュール
    7.1 単純なクラスの定義方法
        7.1.1 クラスの作成
        7.1.2 Pointのインスタンス生成
        7.1.3 Pointの初期化
        7.1.4 to_sメソッドの定義
        7.1.5 アクセッサと属性
        7.1.6 演算子の定義
        7.1.7 []による配列、ハッシュアクセス
        7.1.8 座標の数え上げ
        7.1.9 Pointの等値性
        7.1.10 Pointの順序
        7.1.11 ミュータブルなPoint
        7.1.12 手っ取り早いミューテータクラス
        7.1.13 クラスメソッド
        7.1.14 定数
        7.1.15 クラス変数
        7.1.16 クラスインスタンス変数
    7.2 メソッドの可視性: public、protected、private
    7.3 サブクラス化と継承
        7.3.1 メソッドの継承
        7.3.2 メソッドのオーバーライド
        7.3.3 チェイニングによる動作の補完
        7.3.4 クラスメソッドの継承
        7.3.5 継承とインスタンス変数
        7.3.6 継承とクラス変数
        7.3.7 定数の継承
    7.4 オブジェクトの作成と初期化
        7.4.1 new、allocate、initialize
        7.4.2 ファクトリメソッド
        7.4.3 dup、clone、initialize_copy
        7.4.4 marshal_dumpとmarshal_load
        7.4.5 シングルトンパターン
    7.5 モジュール
        7.5.1 名前空間としてのモジュール
        7.5.2 ミックスインとしてのモジュール
        7.5.3 インクルードできる名前空間モジュール
    7.6 モジュールのload、require
        7.6.1 ロードパス
        7.6.2 ロードされたコードの実行
        7.6.3 モジュールの自動ロード
    7.7 特異メソッドと特異クラス
    7.8 メソッドの探索
        7.8.1 クラスメソッドの探索
    7.9 定数の探索

8章	リフレクションとメタプログラミング
    8.1 型、クラス、モジュール
        8.1.1 祖先とモジュール
        8.1.2 クラス、モジュールの定義
    8.2 文字列とブロックの評価
        8.2.1 Bindingとeval
        8.2.2 instance_evalとclass_eval
        8.2.3 instance_execとclass_exec
    8.3 変数と定数
        8.3.1 変数の取得、設定、テスト
    8.4 メソッド
        8.4.1 メソッドのリストアップと有無のテスト
        8.4.2 Methodオブジェクトの取得
        8.4.3 メソッドの呼び出し
        8.4.4 メソッドの定義、定義解除、別名の定義
        8.4.5 未定義メソッドの処理
        8.4.6 メソッドの可視性の設定
    8.5 フック
    8.6 トレーシング
    8.7 ObjectSpaceとGC
    8.8 カスタム制御構造
        8.8.1 実行の先延ばしと反復: afterとevery
        8.8.2 同期ブロックによるスレッドセーフの実現
    8.9 method_missingとconst_missingの活用
        8.9.1 const_missingによるUnicodeコードポイント定数の作成
        8.9.2 method_missingによるメソッド呼び出しのトレーシング
        8.9.3 委譲によるオブジェクトの同期
    8.10 メソッドの動的な作成
        8.10.1 class_evalによるメソッド定義
        8.10.2 define_methodによるメソッド定義
    8.11 エリアスチェイン
        8.11.1 ファイルのロード、クラスの定義のトレーシング
        8.11.2 スレッドセーフを実現するためのエリアスチェイン
        8.11.3 トレーシングのためのメソッドチェイン
    8.12 ドメイン固有言語(DSL)
        8.12.1 method_missingによる単純なXML出力
        8.12.2 メソッド生成による有効なXMLの出力

9章	Rubyプラットフォーム
    9.1 文字列
        9.1.1 文字列の整形
        9.1.2 バイナリ文字列のパック、アンパック
        9.1.3 文字列とエンコーディング
    9.2 正規表現
        9.2.2 正規表現ファクトリメソッド
        9.2.3 正規表現の構文
        9.2.4 正規表現によるパターンマッチ
    9.3 数値と数学
        9.3.1 Numericのメソッド
        9.3.2 Mathモジュール
        9.3.3 10進演算
        9.3.4 複素数
        9.3.5 有理数
        9.3.6 ベクトルと行列
        9.3.7 乱数
    9.4 日付と時刻
    9.5 コレクション
        9.5.1 Enumerableオブジェクト
        9.5.2 配列
        9.5.3 ハッシュ
        9.5.4 集合
    9.6 ファイルとディレクトリ
        9.6.1 ファイルとディレクトリ名
        9.6.2 ディレクトリリスト作成
        9.6.3 ファイルのテスト
        9.6.4 ファイルとディレクトリの作成、削除、名称変更
    9.7 入出力
        9.7.1 ストリームの開きかた
        9.7.2 ストリームとエンコーディング
        9.7.3 ストリームからの読み出し
        9.7.4 ストリームへの書き込み
        9.7.5 ランダムアクセスメソッド
        9.7.6 ストリームの閉じ方、フラッシュ、テスト
    9.8 ネットワーキング
        9.8.1 非常に簡単なクライアント
        9.8.2 非常に簡単なサーバ
        9.8.3 データグラム
        9.8.4 より複雑なクライアント
        9.8.5 多重化サーバ
        9.8.6 Webページのフェッチ
    9.9 スレッドと並列処理
        9.9.1 スレッドのライフサイクル
        9.9.2 スレッドと変数
        9.9.3 スレッドのスケジューリング
        9.9.4 スレッドの状態
        9.9.5 スレッドとスレッドグループのリストの作成
        9.9.6 スレッドのサンプル
        9.9.7 スレッドの排他処理とデッドロック
        9.9.8 QueueとSizedQueue
        9.9.9 条件変数とQueue

10章	Ruby環境
    10.1 Rubyインタープリタの起動オプション
        10.1.1 一般的なオプション
        10.1.2 警告と情報のオプション
        10.1.3 エンコーディングオプション
        10.1.4 文字列処理オプション
        10.1.5 その他のオプション
    10.2 トップレベル環境
        10.2.1 定義済みモジュールとクラス
        10.2.2 トップレベル定数
        10.2.3 グローバル変数
        10.2.4 定義済みグローバル関数
        10.2.5 ユーザー定義グローバル関数
    10.3 実用的な抽出と報告のためのショートカット
        10.3.1 入力関数
        10.3.2 使うべきでない抽出関数
        10.3.3 レポート関数
        10.3.4 1行スクリプトのためのショートカット
    10.4 OS呼び出し
        10.4.1 OSコマンドの実行
        10.4.2 子プロセスの作成
        10.4.3 シグナルのトラップ
        10.4.4 プログラムの終了
    10.5 セキュリティ
        10.5.1 汚染状態のデータ
        10.5.2 制限実行とセーフレベル

索引