ruby用語集

A

AWK

エイホ(A)、ワインバーガー(W)、カーニハン(K)による 小型のスクリプト言語

B

C

coerce

数値の型変換を行うメソッド.数値計算のメソッドは自分の知らな いインスタンスが引数として渡された時にはcoerce メソッドを使って変換を行うように取り決められている. coerceメソッドは引数として与えられた値(を変換し た値)と自分(必要ならば変換した値)のペアを返す.

rubyのライブラリの数値型の変換順序は

Fixnum -> Bignum -> Rational -> Float -> Complex
になっている.

D

Data

Cレベルのポインタをrubyオブジェクトとして見せるためのラッパー. Cポインタと,mark関数,free関数から作る.Cを使ってrubyに機能 を追加しようとする人はぜひこのクラスの使い方をマスターする必 要がある.逆にいうとそういう予定のない人には用事がないクラス でもある.

defined?

いろいろなもの(式)が本当に定義されているかどうか調べてくれる 演算子.定義されていなければFALSE,定義されてい ればその式の種別を示す文字列を返す.defined?は メソッドのようにみえるがrubyの文法に組み込まれた演算子で,引 数の評価を行わない.よって

defined? print("abc\n")

はなにも出力しない.

E

Eiffel

オブジェクト指向プログラミング言語.matzは昔この言語の作者の 本(Object-oriented Software Construction 邦訳「オブジェクト 指向入門」)を読んで目から鱗が落ちたらしい.その割にはrubyは Eiffelに似ていない.似ているのはブロックがendで 終るところと,rescueという予約語だけか.

end

ブロック構造を終える予約語.ある統計によればrubyを最初に見た 人の33%がこれを見てPascalを連想するという(嘘).しかし,実際 にはbeginと対にならないこの形式はPascalというよりAdaやEiffel に近い.

rubyがCやPerlで慣れ親しんだ {}を使わなかったの は以下の理由である

F

FAQ, Frequently Asked Questions

よくある質問とその答え集. rubyのFAQはまだまだ発展途上である.質問と答えは随時募集中.

G

H

I

J

K

L

M

MatchingData

正規表現のマッチに関する状態を表すオブ ジェクト.変数$~の値.この変数の値を変更すると 正規表現に関する変数群($1, $2..., $&, etc)の値も変わる.

matz

rubyの作者.まつもと ゆきひろとも言う. cmail と3人の子供の父親でもある.

mix-in

アイスクリームにいろんなものをまぜて新しい味を作ること.転じ てモジュールをクラスに混ぜて機能を追加 すること.継承を参照.

rubyでは多重継承を採用せず,is-aの関係のための継承と,機能の 共有のためのmix-inを用意している.これは多重継承を濫用すると 関係が混乱するというmatzの信念のためである.

N

O

P

Perl

何だったっけ?

Q

R

ruby

オブジェクト指向スクリプト言語.rubyの名前は「perlに続く (pearlは6月の誕生石,rubyは7月の誕生石)」という程度の意味で 名付けられた.rubyは別に何かの略ではない.

S

Sather

オブジェクト指向プログラミング言語.matzは EiffelよりもSatherが好きだ.しかし, Satherもやっぱりrubyには全然似ていない.

self

レシーバを参照する式.なぜ selfかというと,メソッド を動詞と考えるとレシーバは主語に当たり,メソッドから見ると 自分であるからという説があるが,rubyでは深 く考えず,単にSmalltalkを真似ただけだ,という説が有力である.

super

オーバーライドしたメソッドから上位のメソッドを呼び出す方法. 引数を省略した時には呼び出し元のメソッドと同じ引数で呼び出さ れる.

問題:
引数として与えられた変数の値を変更した場合には, superで元の値が渡るか,変更した値が渡るか.
def foo(a)
   print a
end
def self.foo(a)
  a=25
  super
end
foo(5)    # 5 or 25??
答え:
元の値(5)

T

thread

U

undef

メソッドの定義を否定すること.継承mix-inもクラスにメソッドを追加するこ とだが,undefを使えばメソッドを取り除くことがで きる.ただし,クラスの実装に必要なメソッド(メソッド内部から 呼ばれているメソッド)を外してしまうと痛い目に遭う.

V

W

X

Y

Z

イテレータ, iterator

繰り返し子.メソッドに渡すことのできるあるコードの集まりをイ テレータブロックと呼び,イテレータブロックの与えられたメソッ ドをイテレータと呼ぶ.イテレータの中では yieldを使ってイ テレータブロックを実行することができる.一般にイテレータブロッ クは複数回実行されるので繰り返し子(iterate=繰り返す)と呼ば れるが,必ずしも複数回繰り返して実行されるとは限らず,一度も 実行されないかもしれない.しかし,嘘つきとは呼ばないように.

あ,そうそう.イテレータでないメソッドにイテレータブロックを 与えてもなにも起きない.エラーも起きないが,がっかりしないよ うに.

インスタンス, instance

オブジェクトのこと.オブジェクトがある クラスに所属することを強調する意味あいがあるらしい.オブジェ クトなんだかインスタンスなんだか混乱してオブジェクト指向に挫 折する人は多いと聞く.

インスタンス変数, instance variable

オブジェクトに固有の変数のこと.rubyのインスタンス変数は識別 子の直前に@をつけたものであり,メソッドの中から しか参照できない.

オーバーライド, override

再定義のこと.スーパークラスまた はincludeしているモジュールで定義され ているメソッドと同じ名前のメソッドを定義すること.オーバーラ イドした上位のメソッドは superを使って呼び出すこと ができる.

オブジェクト, object

もののこと.「愛」は多分オブジェクトではな いが,「ラブレター」はオブジェクトである.あるものがものであ るか,そうでないかは多分に哲学的である.この辺がオブジェクト 指向は難しいといわれる原因かも知れない.コンピュータ業界では メモリ中の特定の空間のことをオブジェクトと呼ぶ人がいたりする 人がいる.困ったものだ.カプセル化抽象データ型参照.

カプセル化, encapsulation

データに対する直接的な操作はデータの型に付随する特定の手続き (メソッドと呼ぶ)からだけ行うことにより, 内部構造や処理のアルゴリズムを外部から隠してしまうこと. 抽象データ型参照.

rubyはインスタンス変数はメソッドからしか参照できないので,カ プセル化が強制されているといえる.

関数, function

厳密にいうとrubyに関数はない.しかし,レシーバを省略したメソッ ド呼び出しは外見が関数に似ているし, selfやインスタンス変数など レシーバの情報を全く参照しない事実上の関数として働いていると いっても良いメソッドもある.だから厳密でない言い方としてそう いうメソッドを関数と呼ぶこともある. そういう関数(的メソッド)は大抵レシーバを省略した形式でしか呼 び出せないように可視性がprivateに 設定してある.このようなメソッドの代表として モジュール関数がある.

クラスメソッド, class method

クラスのメソッド.全てのクラスのクラス Classで定義されている クラス共有のメソッドとクラスそれぞれが固有に持っている 特異メソッドとがあるが,そんな ことは大した問題ではない.クラスメソッド内での selfはクラスであるので勘違いしないように.

グローバル変数, global variable

プログラム全体から参照できる変数.危険である.多用しないこと.

継承, inheritance

あるクラスに機能を追加した新しいクラス を作ること.継承はis-aの関係を表現するのに有効である.たとえ ば,学生一般の性質を記述した「学生」クラスを継承して,実験に 苦しめられる「工学部生」クラスを作ることができる.is-aの関係 がなく,単に性質や機能を共有する場合にはmix-in を使うことが望ましいとされる.

再定義, redefinition

オーバーライドのこと

初期化, initialize

インスタンスの初期化には initialize メソッドを再定義する.クラスのメソッド newのデフォルトの 定義は新たに生成したインスタンスに対して, initializeを実行する.newへの 引数はそのままinitializeに渡される.また, newがイテレータとして呼び出された時には initializeもイテレータとして呼び出される.

ということはClass#new を再定義する必要はないはずだ.

スクリプト言語, script language

スクリプトに従ってバッチ処理を行うイン タープリタのこと.人間も台本を読むという点においてスクリプト 言語である.

スクリプト, script

台本.転じて,インタープリタが解釈する比較的短いプログラムの こと.もちろん中には超大作の台本もある.

即値,immediate value

参照ではなく,実際の値が変数に格納さ れるもの.rubyの現在の実装ではFixnumとnil/TRUE/FALSEだけが即 値である.しかし,Fixnumが即値でないrubyの実装があっても構わ ないし,モデル上全ての値がオブジェクトへの参照であると考えて も差し支えない.

ソート, sort

順番に並べ替えること.ruby は数え上げる事ができて (Enumerable がincludeされていて),各要素に順序 が定義されて(<=> が定義されて)いれば,配列に限らずどん な複雑なオブジェクトの集まりもソートしてくれる.

大域脱出, non-local exit

break, next, redo, retry, return などのメソッドの範囲内での脱出ではなく,捕捉されない限りメソッ ド呼び出しの階層を遡って中断するタイプのものを大域脱出と呼ぶ. rubyの大域脱出には rescueで捕捉でき るものと捕捉できないものがあり,前者には SystemExit(exitで発生する)や 例外があり,後者には捕捉することに意味 がないもの(例:メモリ割当に失敗した/インタプリタそのもののバグ) がある.

抽象データ型, abstract data type

データの構造とそのデータに対する操作をひとまとめにしたものを 抽象データ型と呼ぶ.抽象データに対する操作は必ずその操作を経 由する必要がある.結果,データ構造は外部からは直接参照されず, 内部構造の変更が外部に悪影響を及ぼさない.このことを カプセル化と呼ぶ.

特異メソッド, singleton method

ある特定のオブジェクトにだけ定義されたメソッド. メソッド参照. 特異メソッドは以下の場合に他のオブジェクトにも引き継がれる.

特異メソッドで元のクラスのメソッドをオーバーライドした場合は もとのメソッドはsuperで呼び 出すことができる.

ドキュメント, document

matzの苦手なもの.彼は普段から「ソースがドキュメントだ.バグ も完全に記述されている」と主張しているが,誰も受け入れない. 当り前だ.

バイトオーダー, byte order

0x1234という4バイトデータを1,2,3,4 と配置するか,4,3,2,1と配置するかということ.前 者をビッグエンディアン,後者を リトルエンディアンと呼ぶ.どちらが 良いかという論争は時のはじめから続いていてまだ結論が出ていない.

破壊的, destructive

String#chop!, Array#concat などの メソッドは,レシーバの状態を変化させるので,「破壊的な作用を する」という.めったにコンピュータを壊すことはない.

ビックエンディアン, big endian

アメリカ大陸原住民…はインディアン.こっちはエンディアンで語 源はスウィフトの「ガリバー旅行記」に出て来る卵を丸い端から食 べる人たちである.当然,尖った端から食べる人たちは リトルエンディアンである. コンピュータ業界ではCPUなどがデータを並べる時の形式のひとつ で,ネットワーク族はビッグエンディアンを好むという. バイトオーダー参照

ビルトインクラス, built-in class

rubyインタプリタ組み込みでインスタンスの構造が通常のオブジェ クトと異なるクラス.これらのクラスやそのサブクラスのインスタ ンスはインスタンス変数を持 てないなど,構造の違いから来る制限がある.これらのクラスを継 承したクラスを定義することはお勧めしない.rubyのビルトインク ラスは以下の通りである

ポリモルフィズム, 多態, polymorphism

対象になるオブジェクトによって実際の操作が決定されること. rubyではレシーバのオブジェクトに応じ てメソッドが選択されることによって実現されている.

obj = "abc"
print obj.length, "\n"		# => 3
obj = [1,2,3,4]
print obj.length, "\n"		# => 4

モジュール関数, module function

関数のように用いられるメソッドの中で, モジュールのメソッドとしても,特異メソッドとしても定義されて いるものはモジュール関数と呼ばれる.例えば Mathモジュールのほとんどのメソッドは モジュール関数である.これらのメソッドは,例えば

Math.sqrt(2)
という形式でも
include Math
sqrt(2)
という形式でも使えて便利である.

メソッド, method

オブジェクトに対する操作.操作対象のオ ブジェクト(レシーバ)は selfで参照できる. rubyの場合ビルトインクラスのオブ ジェクトを除けば,オブジェクトの構造は動的に決まるので,ある オブジェクトの性質はそのオブジェクトに定義されているメソッド によって決定される.

リトルエンディアン, little endian

最初10人いて段々減っていく.コンピュータ業界ではデータを並べ る時の形式のひとつで,非常に大きなシェアを持つあるCPUメーカー はリトルエンディアンを好むという.バイト オーダー参照

例外, exception

例外的な状況で発生するもの.例外が発生すると beginrescue節を使って明示的に捕捉されない限り,呼び 出し階層を遡ってプログラム(thread)の実行は中断される.例外の おかげでrubyプログラムはほとんどの場合例外的な状況についていちいち チェックせずにすむ.例外の発生した場所の情報は $@に,例外そのものに関する情報は$!に格納 されている.

レシーバ, receiver

メソッドの実行主体.メソッド呼び出し式の`.'の左 側にあるもの.メソッド内では selfで参照できる.レシーバ のインスタンス変数@変数名という形式でアクセスできる.

ローカル変数, local variable

ある範囲内でのみ参照可能な変数.その範囲をスコープと呼ぶ. rubyのスコープは

で,イテレータブロックだけは外側のスコープのローカル変数もア クセスできる.ローカル変数の有効範囲はスコープでの最初の代入 が現れた場所からスコープの終りまでである.有効範囲は静的に決 まり,実際に実行されるかどうかは関係ない.

Symbol


Last modified: Thu Jun 19 20:38:32 1997