上京エンジニアの葛藤

都会に染まる日々

「初めてのRuby」を読んだ(1章)

「初めての Ruby」を読み始めたので、まとめていこうと思います。

「初めての Ruby」の初版は 2008年で約10年前です。(僕が高校生の頃ですね)
そのため Ruby のバージョンも 1.8 or 1.9 系を対象に書かれており、少し古いので今から読む方はその点を頭に入れておく必要があります。

Rubyオブジェクト指向言語

数値、文字列、正規表現、入出力、クラス全てオブジェクトでメソッドやコードブロックもオブジェクトとして扱うことができる

そもそもオブジェクトとは

  • アイデンティティを持っている
    オブジェクトは何らかのクラスに属している
    自分と自分以外を区別する
  • メッセージを受け取る
    メッセージの送受信ができる
  • 内部状態を持つ

Domain Specific Language (DSL)

Ruby ではブロック付きメソッドなどを活用して Ruby であり DSL でもあるような言語を定義することができる
DSL が汎用プログラミング言語の中に埋め込まれた形なので、言語内DSLという

処理系と実行環境について

Ruby はかつては ruby と呼ばれていたが、実装と区別するために MRI と呼ばれており、実装は C言語で書かれていることから CRuby と呼ばれる
Java 仮想マシンで動作する Ruby の処理系は JRuby と呼ばれる

バージョン

MRI のバージョン番号は、(MAJOR).(MINOR).(TEENY) で MINOR が偶数のバージョンが安定版、奇数のバージョンは開発版である
※1.9系は例外で TEENY が1以上のバージョンが安定版で、0 のバージョンが開発版である

パッチレベルについて

1.8.6-p114 などについている -p114 はパッチレベルと呼ばれるもので、バグ修正をカウントする整数を示している
したがって、パッチレベルが上がる場合非互換性の心配はない

Ruby の構成

  • 言語本体
    • 変数
    • クラス定義
    • メソッド定義
    • 制御構文
  • 組み込みライブラリ
    入出力、文字列ライブラリ、配列などのことで、Ruby 起動時に自動的に有効になる
    • 組み込み定数
      グローバルに参照可能な定数のこと
    • 組み込み関数
      特殊なグローバル変数
    • 組み込みクラス
      文字列、配列、範囲、時間などの基本的なクラス
  • 標準添付ライブラリ
    処理系に付属して一緒に配布されている外部ライブラリでユーザー側が明示的に読み込まないと使えない

構文解析

クラス定義は解析フェーズで構文上の妥当性のみ検証される
require, load メソッドは実行時ロードする

ガベージコレクション

オブジェクトの占有しているメモリーは処理系が管理し適切に解放するので、メモリ管理に悩むことはない

対話的実行環境

irb を使うことで対話的に Ruby を実行できる

リファレンス

ri コマンドで読むことができる

ri String#length

ブロック付きメソッドとは

メソッド呼び出し式の後に do...end or {...} で括ったコードブロックを続けれる

array = ["hoge", "bar", "foo"]
array.each do |name|
  puts name
end

上記例で行くと eachイテレータとなる

続きはこちら

okkun-sh.hatenablog.com