メソッドの定義とメソッドの呼び出し
メソッドを利用するにはメソッドを定義し、メソッドを呼び出します。メソッドを呼び出すときには引数を指定することもでき、メソッド内で利用することができます。ここでは Ruby でメソッドを定義する方法、および定義したメソッドを呼び出す方法について解説します。
(Last modified: )
メソッドを定義する
メソッドの定義方法です。書式は次の通りです。
def メソッド名(引数1, 引数2, ...) 実行する処理 実行する処理 end
メソッドの定義は def
から開始し end
までとなります。 def
のあとにメソッド名を指定してください。メソッド名を指定する場合は次の規則に従って下さい。
1) 1文字目は英文字かアンダーバー(_) 2) 2文字目以降は英数文字、アンダーバー
変数名などと異なり大文字の英文字で開始することも可能です。ただし大文字で開始するのはお勧めはできません。(他にも記号「+,-,*,/」が使われたメソッドなどもあり、ユーザーが再定義することも実際には可能です。ここではあまり詳しく見ていきません)。
具体的には次のように記述します。
def printHello puts("Hello") end
上記では、メソッド名 printHello
と言う名前のメソッドを定義しています。このメソッドが呼び出されると "Hello" とだけ出力します。
またメソッドを呼び出す時には引数を指定することが可能です。引数を使用する場合はメソッド名の後の括弧 ()
内に引数名をカンマ(,)で区切って続けて記述します。括弧は省略可能です。
メソッドを呼びだす
定義したメソッドを呼び出すと、処理がメソッド内に移りメソッド内に記述された処理が実行されます。そしてメソッドの最後まで処理が終わると、メソッドを呼び出した次の行へ処理が戻ります。
メソッドを呼び出す時の書式は次の通りです。
オブジェクト.メソッド名(引数1, 引数2, ...)
メソッドはクラス内で定義され、そのクラスから作成されるオブジェクト(レシーバーと呼ばれます)に対して行わせたい処理を記述するものです。その為、メソッドを呼び出す時には対象となるオブジェクトと実行させるメソッド名を指定して呼び出します。
トップレベルに定義されたメソッドであっても同じなのですが、トップレベルに定義されたメソッドはレシーバーを省略して次のように呼び出します。
メソッド名(引数1, 引数2, ...)
メソッドを呼び出すときに括弧を省略しても構いません。その場合はメソッド名のあとに半角スペースを空けて引数を記述してください。
メソッド名 引数1, 引数2, ...
引数なしでメソッドを呼び出す場合は、括弧だけを記述してもいいですし括弧を省略しても構いません。
メソッド名() メソッド名
では定義されたメソッドを呼び出してみます。
def printHello puts("Hello") end printHello
上記では printHello
として呼び出していますが、括弧を省略せずに printHello()
と呼び出しても同じです。(ただしメソッド名を英文字の大文字で開始した場合には括弧は省略できません)。
引数があるメソッドの場合、例えば次のように記述します。
def printHello(msg) puts(msg) end printHello "Hello"
上記では printHello "Hello"
として呼び出していますが、括弧を省略せずに printHello("Hello")
to
呼び出しても同じです。
メソッドを定義する位置
メソッドは実際に呼び出されるよりも前に定義されていなければなりません。例えば次のようなプログラムはエラーとなります。
printHello def printHello puts("Hello") end
上記のようにメソッド呼び出しがメソッドの定義よりも前に実行されると undefined local variable or method
と言うエラーが表示されます。
メソッドの定義はメソッドが呼び出されるよりも前に記述して下さい。
では簡単なプログラムで確認してみます。
# encoding: UTF-8 def printHello puts("Hello") end puts("メソッドを呼び出します") printHello puts("メソッドを呼び出しました")
下記のように実行して下さい。
-- --
Ruby でメソッドを定義する方法、および定義したメソッドを呼び出す方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。