6-2-2 自作のメソッドを定義して実際に使ってみよう

メソッドの雛形を用意する

テキストエディタを開き、以下のようにメソッドの雛形を記述し、ファイル名をnew_method.rbとして保存します。

# 自作のメソッドを定義して実際に使ってみよう
def generate_sentence_and_abbreviation(words)
end

メソッドを呼び出す記述を追加する

定義したgenerate_sentence_and_abbreviationメソッドを呼び出す記述を追加し保存します。

# 自作のメソッドを定義して実際に使ってみよう
def generate_sentence_and_abbreviation(words)
end

p generate_sentence_and_abbreviation(%w(United States of America)) # 追加

保存したプログラムを実行する

保存したプログラムを実行します。何も処理が記述されていないので、戻り値にnilが表示されます。

$ ruby new_method.rb
nil

文字列を連結する処理を記述する

まずは、配列の各要素である文字列を半角スペース区切りで連結する処理と、戻り値のハッシュを定義する処理を以下の通り記述して保存します。

# 自作のメソッドを定義して実際に使ってみよう
def generate_sentence_and_abbreviation(words)
  sentence = words.join(' ') # 追加
  { sentence: sentence } # 追加
end

p generate_sentence_and_abbreviation(%w(United States of America))

修正したプログラムを実行する

保存したプログラムを実行します。実行結果に、{:sentence=>"United States of America"}というハッシュが表示されます。

$ ruby new_method.rb
{:sentence=>"United States of America"}

先頭が大文字の略語を戻り値のハッシュに追加する

次に、配列の各要素である文字列の先頭が大文字だった場合、略語として用いる処理と、戻り値のハッシュに追加する処理を以下の通り記述して保存します。

# 自作のメソッドを定義して実際に使ってみよう
def generate_sentence_and_abbreviation(words)
  sentence = words.join(' ')
  abbreviation = words.map { |w| w[0] }.select { |w| w == w.upcase }.join # 追加
  { sentence: sentence, abbreviation: abbreviation } # 変更
end

p generate_sentence_and_abbreviation(%w(United States of America))

修正したプログラムを実行する

保存したプログラムを実行します。実行結果に、{:sentence=>"United States of America", :abbreviation=>"USA"}というハッシュが表示されます。

$ ruby new_method.rb
{:sentence=>"United States of America", :abbreviation=>"USA"}

その他の引数を指定して実行する

メソッドを呼び出す際に指定している引数をUnited States of AmericaからPen Pineapple Apple Penに変更して保存します。

# 自作のメソッドを定義して実際に使ってみよう
def generate_sentence_and_abbreviation(words)
  sentence = words.join(' ')
  abbreviation = words.map { |w| w[0] }.select { |w| w == w.upcase }.join
  { sentence: sentence, abbreviation: abbreviation }
end

p generate_sentence_and_abbreviation(%w(Pen Pineapple Apple Pen)) # 修正

修正したプログラムを実行する

保存したプログラムを実行します。実行結果に、{:sentence=>"Pen Pineapple Apple Pen", :abbreviation=>"PPAP"}というハッシュが表示されます。

$ ruby new_method.rb
{:sentence=>"Pen Pineapple Apple Pen", :abbreviation=>"PPAP"}

メソッド定義前にメソッドを呼び出す処理を追加する

メソッドを定義するdefの前にメソッドを呼び出します。以下の通りプログラムを修正し保存します。

# 自作のメソッドを定義して実際に使ってみよう
p generate_sentence_and_abbreviation(%w(Pen Pineapple Apple Pen)) # 修正

def generate_sentence_and_abbreviation(words)
  sentence = words.join(' ')
  abbreviation = words.map { |w| w[0] }.select { |w| w == w.upcase }.join
  { sentence: sentence, abbreviation: abbreviation }
end

修正したプログラムを実行する

保存したプログラムを実行します。実行結果に、generate_sentence_and_abbreviationという変数やメソッドが定義されていないことを示すNoMethodErrorが表示されます。

$ ruby new_method.rb
new_method_no_method_error.rb:2:in `<main>': undefined method `generate_sentence_and_abbreviation' for main:Object (NoMethodError)