2007-11-24基本文法
コメント
print "hello world\r\n" # ここはコメントです。 =begin この中は コメント扱いになります。 =end
変数・定数
ローカル変数
小文字([a-z])か'_'で始まる。
foobar
インスタンス変数
'@'で始まる。特定のオブジェクトに所属。
初期化していない時の値は nil 。
@foobar
クラス変数
'@@'で始まる。クラス定義の中で定義される。
class Foo @@bar = 0 end
グローバル変数
'$'で始まる。
基本的には使わない。
$foobar
擬似変数
self, nil, true, false, __FILE__, __LINE__
定数
大文字([A-Z])で始まる。
FOOBAR
リテラル
数値リテラル
puts 255 #10進数 puts 0xff # 16進数 puts 0b11111111 # 2進数 puts 0o377 # 8進数
文字列リテラル
ダブルクォートかシングルクォートで囲む。
ダブルクォートの場合、中の文字列はバックスラッシュ記法・式展開が有効になる。
シングルクォートの場合、中の文字列の解釈は行われない。
print "hello world \\\r\n" print 'hello world \\\r\n'
コマンド呼出し
バッククォートで囲むとコマンドを呼び出せる。
print `dir`
ヒアドキュメント
「<<識別子」から「識別子」までを文字列とする。「<<」と識別子の間は空白を入れない。
「<<-識別子」だと終端行をインデントできるので見栄えが良くなる。
「<<'識別子'」だと文字列内のバックスラッシュ記法、式展開が無効になる。
「<<"識別子"」だと文字列内のバックスラッシュ記法、式展開が有効になる。何もつけない場合と同じ。
foo = <<EOS hello world1 hello world2 hello world3 EOS print foo
配列式
配列はArrayクラスのインスタンス。
print [1, 2, 3]
ハッシュ式
Hashクラスのインスタンス。
foo = {
'key1'=>'value1',
'key2'=>'value2',
1=>2
}
puts foo['key1']
puts foo['key2']
puts foo[1]
% 記法
'," を多用する場合にエスケープを減らすための記法。
- %!STRING! : ダブルクォート文字列
- %Q!STRING! : 同上
- %q!STRING! : シングルクォート文字列
- %x!STRING! : コマンド出力
- %r!STRING! : 正規表現
- %w!STRING! : 要素が文字列の配列(空白区切り)
- %W!STRING! : 要素が文字列の配列(空白区切り)。式展開、バックスラッシュ記法が有効
- %s!STRING! : シンボル。式展開、バックスラッシュ記法は無効
print %(hello\r\n) # ダブルクォート文字列 print %Q(hello\r\n) # 〃 print %q(hello\r\n) # シングルクォート文字列 print %x(dir) # コマンド出力
制御構造
if
if 式 # elsif 式 # else # end
if 修飾子
右辺の条件が成立する時に、左辺の式を評価してその結果を返す。条件が成立しなければ nil を返す。
print "debug¥n" if $DEBUG # $DEBUGが有効だったら出力する。
unless
if の逆。elsifは無い。
unless 式 # else # end
unless 修飾子
右辺の条件が成立しない時に、左辺の式を評価してその結果を返す。
print "stop¥n" unless valid(passwd)
case
age = 12 foo = nil ary1 = [7, 8, 9, 10, 11, 12] ary2 = [13 .. 18] case age when 0, 1, 2 foo = "baby" when 3 .. 6 foo = "little child" when *ary1 foo = "child" when *ary2 foo = "youth" else foo = "adult" end print foo
while
ary = [0,2,4,8,16,32,64,128,256,512,1024] i = 0 while i < ary.length puts ary[i] i += 1 end
while 修飾子
右辺の式を評価した値が真の間、左辺を繰り返し実行する。
式 while 式
until
until 式 # end
until 修飾子
右辺の式を評価した値が真になるまで、左辺を繰り返して実行する。
式 until 式
for
for idx in 1 .. 20 puts idx end <<| *** break 内側のループを抜け出す。caseは抜けない。 - while - until - for - イテレータ *** next 内側のループの次の繰り返しにジャンプする。 *** redo ループ条件のチェックを行なわず、現在の繰り返しをやり直す。 *** retry *** raise 例外を発生させる。 >|ruby| raise "raise test" # RuntimeErrorを発生させる raise SyntaxError, "invalid syntax" # SyntaxErrorを発生させる raise # 最後の例外を再発生させる
begin
例外の補足。
resucueでエラーを省略するとStandardErrorのサブクラスの例外を補足する。
begin raise "runtime error" #raise IOError, "io error" rescue RuntimeError puts "rescue RuntimeError: RuntimeErrorが発生した場合" print $@, ' ', $!, "\r\n" rescue StandardError puts "rescue StandardError: StandardErrorが発生した場合" print $@, ' ', $!, "\r\n" rescue puts "rescue: 上記のrescue以外(StandardErrorと同じ)" print $@, ' ', $!, "\r\n" else puts "else: 例外未発生" ensure puts "ensure: 必ず実行される" end
rescue 修飾子
式1 rescue 式2
式1で例外が発生したとき、式2を評価する。以下と同じ意味。StandardError以下しか補足できない。
begin 式1 rescue 式2 end
return
メソッドの実行を終了し戻り値を返す。値の省略時は nil が返る。
return return 12 return 1,2,3
BEGIN
ファイル内の一番最初に実行されるブロック。複数あった場合は、指定された順番に実行される。
ローカル変数を共有できない。ブロックの外と情報を伝達するには定数やグローバル変数を解する必要がある。
BEGIN { # }
END
後始末ルーチン。インタプリタ終了時に実行される。複数登録されている場合は、登録と逆順に実行される。
実行時に登録するので実行されない場合もある。
END { # }
メソッド呼出し
クラス定数を呼び出す場合は '::' を使う。
foo.bar() foo.bar bar() print "hello world¥n" print Class.new Class::new
super
現在のメソッドがオーバーライドしているメソッドを呼び出す。
括弧省略時は現在の引数がそのまま渡される。引数なしの場合は super() とする。
super super() super(1,2,3)
ブロック付きメソッド呼び出し
イテレータと呼ばれることもある。
[1,2,3].each do |i| print i*2, "¥n" end [1,2,3].each {|i| print i*2, "¥n" }
クラス・メソッドの定義
クラス名はアルファベットの大文字から始まる。
rescueも書ける。
class Foo < Super def initialize # コンストラクタ end def test # testメソッド end class Bar # クラスのネスト end end class Foo def bar # Fooクラスに定義を追加 end end class Foo::Bar2 # クラスのネスト2 end
モジュール定義
module Foo def test # モジュールを定義 end end
メソッドの定義
rescueも書ける。
def test() puts "hello" end test()
引数のデフォルト値の指定
# 引数 a のデフォルト値は 0 def test(a = 0) puts a end test test(1)
クラスメソッドの定義
呼出し制限
- public に設定されたメソッドは制限なしに呼び出せる。
- private に設定されたメソッドは関数形式でしか呼び出せない。
- protected に設定されたメソッドは、そのメソッドを持つオブジェクト のメソッド定義式内でなければ呼び出せる。
def foo # デフォルトは private end class C def bar # デフォルトは public end def ok # デフォルトは public end private :ok # …だが、ここで private に変わる def initialize # initialize は private end end a=C.new a.bar #a.ok # これはエラーになる。
定義に関する 操作
alias
メソッド・グローバル変数に別名を付ける。
alias 新メソッド名 旧メソッド名 alias 新グローバル変数名 旧グローバル変数名
undef
undef foo
defined?
式が定義されていなければ、偽を返す。定義されていれば式の種別 を表す文字列を返す。
defined? 式
2007-11-23
本
お奨めの本は何だろう。
↓ あたり?
たのしいRuby 第2版 Rubyではじめる気軽なプログラミング
- 作者: 高橋征義,後藤裕蔵
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/08/05
- メディア: 単行本
- 購入: 11人 クリック: 323回
- この商品を含むブログ (266件) を見る
よく分からないので、今度書店へ行ってみよ。
それまではWebで。
Web情報
とりあえず。んー、当分Webだけでいけそうな気がしてきた。