【6日目:Rubyのメソッド知ろう!】改訂3版基礎Ruby on Railsを読むで!

シェアする

  • このエントリーをはてなブックマークに追加
41AkxXsz+5L._SX258_BO1,204,203,200_

メソッド

メソッドとはコードのかたまりに名前をつけたもの。機能をもってるんやで。
Rubyが用意しているものだけでなく自分で作ったメソッドを利用することもできるよ。

定義と呼び出し

メソッドをつくるには下記のようにする。

def メソッド名(引数,引数,...)
    メソッドの内容となるプログラム
end

引数のないメソッドの例

def hello
  puts "こんにちは "
  puts "それではまた"
end
hello
result
こんにちは
それではまた

メソッド名には半角のアルファベット、数字、アンダースコアを使い、
一文字目は必ず半角アルファベットまたはアンダースコアにすること。

メソッド名の最後には「?」「!」を付けることができる。

スコープについて

スコープとは変数が通用する範囲のこと。
ローカル変数をメソッド内で作成するとそのメソッド内でしかつかえない。

メソッド外に同名の変数があるとそれは別々の変数とみなされる。

またブロックの中でもローカル変数はスコープを持つ。
if式やunless式の中のローカル変数はスコープを持たない。

num = 123
def method
  num = 456
  puts num
end
method # =>456と表示
puts num # =>123と表示

引数と戻り値

メソッドに引数を持たせるにはメソッド定義で「(」と「)」のあいだに、
引数名をカンマで区切ってならべる。
戻り値を返したいときは、最後に変数名を1行書いておく。

※Rubyではメソッド内で最後に実行された式の値が戻り値になるんやで。

引数と戻り値は詳しく知っといたほうがええで

※参考リンク
【引数やで】

http://www.rubylife.jp/ini/method/index3.html

【戻り値やで】

http://www.rubylife.jp/ini/method/index6.html

引数を2つ持ち、戻り値を返す例。

resultの一行で、resultの値が戻り値になる。

def triangle(base, height)
  result = base * height / 2.0
  result
end

area = triangle(11,9)
puts "面積は#{area}です。"

↑引数を持つメソッドを呼び出すときには、メソッド名の後ろに引数を並べる。

最後の式の値が戻り値になるから下記のように簡単にもかける。

def triangle(base, height)
  result = base * height / 2.0
end

※メソッドを呼び出すときにかっこ()を省略できるよ。

returnとは

メソッドの途中で戻り値を指定してメソッドから抜ける場合につかう。

次の例では引数のどちらかの負の値であったら戻り値がnilになる。

def triangle(base, height)
  return nil if base < 0 || height <0
  base * height / 2.0
end

area = triangle(-1,9)
puts area

マイナス1が引数に入ってるからnilが返る。

引数のデフォルト値と不定の数の引数

メソッドの引数にはデフォルト値を設定できる。

デフォルト値はメソッドを呼び出したときに引数が設定されていなければ、
代わりに使われる値です。「引数名 = 値」のように記述する。

def putmsg(msg= "こんにちは")
 puts msg
end
putmsg

Rubyではメソッド定義で引数名に*をつけると引数の数を不定にできる。

下記の例では、メソッドの引数に*をつけ、メソッドを呼び出すときに引数を並べてる。
するとその引数を要素にした配列messagesがメソッドに渡される例です。

配列の要素が順に出力される(eachメソッド)

def put_messages(*messages)
 messages.each { |m| puts m }
end
put_messages "こんにちは", "さようなら"

また次のように*付きの引数の前に普通の引数を置いた時は、

第一引数がfirstに入り、第2引数以降が配列messagesの要素になる。

def put_messages(first, *messages)
 puts first
 messages.each { |m| puts m }
end
put_messages "こんにちは", "さようなら","また会う日まで"

「?」と「!」が付くメソッド。

Rubyのメソッドには「?」と「!」が付くメソッドがある。これは文法というより慣習。

「?」が付いたメソッドはtrueまたはfalseを返す。
StringクラスやArrayクラスのempty?メソッドは文字列や配列が空かを調べる。

if message.empty? then puts "空です" end

「!」が付いたメソッドはそのオブジェクトの中身を変更する
たとえばStringクラスのchomp!メソッド(末尾の改行を降り除く)など。

「!」が付かない同名のメソッドはオブジェクトを変更せずに新しいオブジェクトを返す。

line.chomp!  # lineの末尾の改行を取り除く
line2 = line.chomp  # 末尾の改行を取り除いた新しい文字列を返す。

↑lineの内容がずっと変わるのが!つき、一時的(chompの処理が行われたとき)だけ変わるのが!なし。

!なしは一時的だから、line2に代入して変化を残している。

今日はここまでにしとくか。

本記事は下記本の勉強記事です。初学者にとても良い本です。

スポンサーリンク
Sponsored Link
Sponsored Link

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
Sponsored Link