hyoromoのブログ

最近はVRSNS向けに作ったものについて書いています

「初めてのRuby」を読んで

本の整理をしていたら「初めてのRuby」が出てきて、中途半端に読み止めていたことを思い出しました。
せっかくなので、読み進める上で気になった点を整理しておこうと思います。

1章 ようこそ、Ruby のある生活へ

メタプログラミング(P.8)
#! /usr/bin/ruby
# encoding: utf-8

class Duration
  %w[ days hours minutes seconds ].each do |name|
    attr_accessor name
  end
end

d = Duration.new
d.days = 3
d.hours = 5
p d.days

Module#attr_accessor について触れます。
これは外部から参照するためのアクセサを定義しています。
他の attr と一緒にまとめるとこうなります。

  • attr_reader(読み取りメソッド)
  • attr_writer(書き込みメソッド)
  • attr_accessor(読み取り&書き込みメソッド)

参照URL:http://doc.okkez.net/191/view/class/Module

メソッド名の表記(P.24)

オブジェクトのインスタンスメソッド:hoge#hogehoge
クラスのクラスメソッド:hoge::hogehoge

コールバック(P.24)
#! /usr/bin/ruby
# encoding: utf-8
require 'tk'

TkLabel.new {
  text "Hello, World"
  bg "red"
  pack
}
TkButton.new {
  text "Close"
  command{ exit }
  pack
}
Tk.mainloop

tk について触れます。
GUI プログラムを書くための標準ライブラリで、使い方は「るびま」や「逆引きRuby」を参考にすれば分かりやすそうです。
参考URL:http://jp.rubyist.net/magazine/?0003-RubyTkMovement
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=%B5%D5%B0%FA%A4%ADRuby%2FTk

4章 文字列

バックスラッシュ記法(P.58)

よく使いそうな記法を抽出しました。
\0:ヌル
\t:タブ
\n:改行

バッククォート文字列(P.62)

文字列をバッククオートで括ると、シェルコマンドを実行できます。

p `pwd`
パーセント記法(P.62)

よく使いそうな記法を抽出しました。
%r[ hoge ]:正規表現リテラル
%w[ hoge huga hugu ]:文字列を要素とする配列

ヒアドキュメント(P.63)

「<<が含まれる行の次の行」から「区切り語だけが行頭から書いてある行」までを文字列リテラル扱いにしてくれます。

#! /usr/bin/ruby
# encoding: utf-8

str = <<SQL
  SELECT
    book_id
  FROM
    book
  WHERE
    book_id < 100
SQL
p str

区切り文字は何でも良いみたいです。
また、<< の後に - を付けることにより、タブや空白を無視してくれるようになります。

#! /usr/bin/ruby
# encoding: utf-8

str = 
  "SELECT
    book_id
  FROM
    book
  WHERE
    book_id < 100"
p str

ダブルクォートでも似た書き方ができます。

正規表現(P.66)

後日、十分に勉強してからブログにまとめたいと思います。
使えはしますが、曖昧な部分も多いので整理したいんですよね。

6章 変数と式

範囲演算子(P.112)

.. 演算子は、a..b とした場合に b を含むが。
... 演算子は、a...b とした場合に b は含まない。

case 比較演算子

== より緩い演算子で、=== が存在します。
範囲比較などで使えます。

#! /usr/bin/ruby
# encoding: utf-8

a = 2
if (1..9) === a
  p "1〜9の間"
elsif (10..20) === a
  p "10〜20の間"
else
  p "それ以外"
end
イテレータ(P.119)

今までは times を使っていましたが、今度から upto / downto メソッドを使います。

1.upto(3) do |i| puts i end  #1 2 3

8章 オブジェクトとクラス

インスタンス化(P.146)

initialize という他言語で言うコンストラクタRuby にも存在する。

まとめ

これは良本でした。
前回、途中までしか読んでなかったんですよね。もっと早めに読み切りたかった一冊です。