「初めてのRuby」を読むの続き
6章 変数と式
6.2 演算子
から
■6.2 演算子
いっぱいある。省略
■6.2.1 再定義可能な演算子
・演算子の大部分は、実際にはメソッド呼び出しを読みやすくするための
シンタックスシュガー
→再定義可能
意味
再定義可能な演算の場合、同じ演算子でもメソッド呼び出しを受ける
オブジェクトによって意味は異なる
自己代入演算子
2項演算子と代入を組み合わせたもの(+=とか)
→自己代入演算は再定義できない
否定演算子
!= 比較演算子==の否定
!~ パターンマッチ演算子=~の否定
→Ruby1.8では否定演算子は再定義できない
Ruby1.9では再定義可能
インクリメント演算子、デクリメント演算子は、ない。
■6.2.2 再定義不能な演算子
・一部の演算子は言語本体の仕様で意味が決まっている
→再定義不能
代入
= オブジェクトの参照を代入
→a = b = c = 1のようにつなげて代入できる
多重代入
複数の式を並行して代入できる
a,b,c = 1,2,3
両辺の項目が合わない場合、あまったら捨てられ、足らないとnil
多値と配列展開
*が左辺に出ると、多値を配列にまとめてくれる
a,*b=1,2,3,4,5
p b => [2,3,4,5]
*が右辺に出ると、配列を多値に展開
array=[1,2,3]
a,b,c=*array
p a => 1
括弧を展開してくれる
(a,(b,(c,d)),e) = [1,[2,[3,4]],5]
p [a,b,c,d,e] => [1,2,3,4,5]
要素への代入
配列要素やハッシュ要素への代入
→[]=メソッドの呼び出し
■6.2.3 論理演算子
・論理演算子は真偽判断を扱うための再定義不能な演算子
→! not , && and, || orという意味は同じで優先順位だけ
違う相方を持っている
・否定論理演算し
!,!=,!~
→Ruby1.9では再定義できるが、真偽値は変わらない
→フックするために再定義できる
・論理和、論理積演算子
オペランドのいずれかを返す
例 nil || 50 → 50とかえる(trueでもfalseでもない)
・短絡評価
論理和、論理積の評価は短絡する
→副作用が発生しない場合がある
・初期化イディオム
@a ||= b
@aが真のとき、何もしない
@aが偽のとき、bメソッドを読んで、戻り値でaを初期化
■6.2.4 範囲演算子
・ a..b aからb(bが含まれる)
・ a...b aからbの前まで(bは含まれない)
■6.2.5 条件演算子
・条件によって値を振り分ける a ? b : c
if文と同じ
空白を省略してa?b:c とかくと、構文エラー
6章 変数と式
6.2 演算子
から
■6.2 演算子
いっぱいある。省略
■6.2.1 再定義可能な演算子
・演算子の大部分は、実際にはメソッド呼び出しを読みやすくするための
シンタックスシュガー
→再定義可能
意味
再定義可能な演算の場合、同じ演算子でもメソッド呼び出しを受ける
オブジェクトによって意味は異なる
自己代入演算子
2項演算子と代入を組み合わせたもの(+=とか)
→自己代入演算は再定義できない
否定演算子
!= 比較演算子==の否定
!~ パターンマッチ演算子=~の否定
→Ruby1.8では否定演算子は再定義できない
Ruby1.9では再定義可能
インクリメント演算子、デクリメント演算子は、ない。
■6.2.2 再定義不能な演算子
・一部の演算子は言語本体の仕様で意味が決まっている
→再定義不能
代入
= オブジェクトの参照を代入
→a = b = c = 1のようにつなげて代入できる
多重代入
複数の式を並行して代入できる
a,b,c = 1,2,3
両辺の項目が合わない場合、あまったら捨てられ、足らないとnil
多値と配列展開
*が左辺に出ると、多値を配列にまとめてくれる
a,*b=1,2,3,4,5
p b => [2,3,4,5]
*が右辺に出ると、配列を多値に展開
array=[1,2,3]
a,b,c=*array
p a => 1
括弧を展開してくれる
(a,(b,(c,d)),e) = [1,[2,[3,4]],5]
p [a,b,c,d,e] => [1,2,3,4,5]
要素への代入
配列要素やハッシュ要素への代入
→[]=メソッドの呼び出し
■6.2.3 論理演算子
・論理演算子は真偽判断を扱うための再定義不能な演算子
→! not , && and, || orという意味は同じで優先順位だけ
違う相方を持っている
・否定論理演算し
!,!=,!~
→Ruby1.9では再定義できるが、真偽値は変わらない
→フックするために再定義できる
・論理和、論理積演算子
オペランドのいずれかを返す
例 nil || 50 → 50とかえる(trueでもfalseでもない)
・短絡評価
論理和、論理積の評価は短絡する
→副作用が発生しない場合がある
・初期化イディオム
@a ||= b
@aが真のとき、何もしない
@aが偽のとき、bメソッドを読んで、戻り値でaを初期化
■6.2.4 範囲演算子
・ a..b aからb(bが含まれる)
・ a...b aからbの前まで(bは含まれない)
■6.2.5 条件演算子
・条件によって値を振り分ける a ? b : c
if文と同じ
空白を省略してa?b:c とかくと、構文エラー