my.code();

my.code();

  • Python
    • 1.環境構築と基本思想
    • 2.基本構文とデータ型
    • 3.リスト、タプル、辞書、セット
    • 4.制御構文と関数
    • 5.モジュールとパッケージ
    • 6.オブジェクト指向プログラミング
    • 7.ファイルの入出力とコンテキストマネージャ
    • 8.例外処理
    • 9.ジェネレータとデコレータ
  • Ruby
    • 1.rubyの世界へようこそ
    • 2.基本構文とデータ型
    • 3.制御構造とメソッド定義
    • 4.すべてがオブジェクト
    • 5.コレクション (Array, Hash, Range)
    • 6.ブロックとイテレータ
    • 7.クラスとオブジェクト
    • 8.モジュールとMix-in
    • 9.Proc, Lambda, クロージャ
    • 10.標準ライブラリの活用
    • 11.テスト文化入門
    • 12.メタプログラミング入門
  • C++
    • 1.C++の世界へようこそ
    • 2.型システムとメモリ
    • 3.関数と参照
    • 4.ポインタと動的メモリ
    • 5.クラスの基礎
    • 6.クラスを使いこなす
    • 7.継承とポリモーフィズム
    • 8.テンプレート
    • 9.STL ①:コンテナ
    • 10.STL ②:アルゴリズムとラムダ式
    • 11.RAIIとスマートポインタ
    • 12.プロジェクトの分割とビルド

第4章: すべてがオブジェクト

Rubyの設計思想における最も重要かつ強力なコンセプトの一つは、「すべてがオブジェクトである」という点です。他の言語、例えばJavaやC++では、数値(int, double)や真偽値(boolean)は「プリミティブ型」として扱われ、オブジェクトとは区別されます。

しかしRubyでは、5 のような数値も、"hello" のような文字列も、そして nil さえも、すべてがメソッド(振る舞い)を持つオブジェクトです。

🎯 Rubyの核心: 5.times の衝撃

他の言語の経験者がRubyに触れて最初に驚くことの一つが、以下のようなコードが動作することです。

5 という数値リテラルが .times というメソッドを呼び出しています。これは、5 が単なる値ではなく、Integer クラスのインスタンス(オブジェクト)だからです。

同様に、文字列もオブジェクトです。

"hello, world" という String オブジェクトが、upcase や length というメソッド(メッセージ)に応答しています。

.class メソッドを使うと、そのオブジェクトがどのクラスに属しているかを確認できます。

👻 nil オブジェクト: 無ですらオブジェクト

Rubyには「何もない」「無効」な状態を示す nil という特別な値があります。これは他の言語における null や None に相当します。

しかし、Rubyの哲学を徹底している点は、この nil ですらオブジェクトであるということです。

nil は NilClass という専用クラスの唯一のインスタンスです。オブジェクトであるため、nil もメソッドを持ちます。

nil がメソッドを持つことで、null チェックに起因するエラー(例えば null.someMethod() のような呼び出しによるエラー)を避けやすくなり、より安全で流暢なコードが書ける場合があります。

📨 メソッド呼び出しの仕組み: メッセージパッシング

Rubyのメソッド呼び出し オブジェクト.メソッド名(引数) は、厳密には「メッセージパッシング」という概念に基づいています。

5.times というコードは、以下のように解釈されます。

  1. レシーバ(受信者): 5 という Integer オブジェクト
  2. メッセージ: :times というシンボル(メソッド名)
  3. 5 オブジェクトに :times というメッセージを送る。
  4. 5 オブジェクト(の所属する Integer クラス)は、そのメッセージを解釈し、関連付けられた処理(ブロックを5回実行する)を実行する。

この考え方は、オブジェクト指向の「カプセル化(オブジェクトが自身の振る舞いを決定する)」を強力にサポートします。+ などの演算子でさえ、実際にはメソッド呼び出しのシンタックスシュガー(糖衣構文)です。

🛠️ よく使う組み込みクラスのメソッド

すべてがオブジェクトであるため、Rubyは基本的なデータ型に対して非常に多くの便利なメソッドを標準で提供しています。

String (文字列)

String クラスには、テキスト操作のための豊富なメソッドが用意されています。

string_methods.rb
ruby string_methods.rb

Integer / Float (数値)

数値クラス (総称して Numeric) も便利なメソッドを持っています。

📜 この章のまとめ

  • Rubyでは、数値、文字列、nil を含むすべてが オブジェクト です。
    • すべてのオブジェクトは クラス に属しています(例: 5 は Integer クラス)。
    • オブジェクトであるため、すべての値は メソッド を持つことができます(例: 5.times, "hello".upcase)。
    • メソッド呼び出しは、オブジェクトへの メッセージパッシング として理解されます。
    • nil も NilClass のオブジェクトであり、メソッドを持ちます。

練習問題1: 文字列の操作

変数 sentence = " Welcome to the Ruby World! " があります。String のメソッドを組み合わせて、最終的に "WELCOME, RUBY" という文字列をコンソールに出力してください。

  • ヒント: strip, upcase, gsub (または sub), slice (またはインデックスアクセス []) などが使えます。
practice4_1.rb
ruby practice4_1.rb

練習問題2: 数値と判定

Float の値 123.456 があります。この値を四捨五入して整数(Integer)にした後、その整数が偶数(even)か奇数(odd)かを判定して、"Result is even" または "Result is odd" と出力するコードを書いてください。

practice4_2.rb
ruby practice4_2.rb