さらなる高みへ -higher ground -

プログラミング学習の定着を狙いとしたアウトプット(独り言)をしてみるブログ

自分で定義するメソッドについて

メソッドについて

メソッドについて改めて。
メソッドとはある処理をまとめることである。
定義したメソッドを呼び出すことで同じ処理を何度も実行することができる。

これまでにputsやto_sのようなメソッドを使用してきたが、今回は自分で定義するメソッドについてまとめたい。

メソッドを使うことのメリット

処理をメソッドに分離させることは、以下のようなメリットがある。

  • 同じ処理をする場合に何度も同じコードを書かずに済む
    例えば同じ処理を複数回実行したいケースがあるとする。
    このような時にメソッドを使用しないと、コードをコピーして実行したい箇所に貼り付けることになる。
    メソッドを使わずに、1~10までを3回出力したいとすると以下のような記述になります。同じ記述を3度もすることになるので、冗長になる。
    (下記の例だとputs "1"~"10”をさらにあと2回続けなくてはならなくなる)
    def number_count
      puts "1"
      puts "2"
      puts "3"
      puts "4"
      puts "5"
      puts "6"
      puts "7"
      puts "8"
      puts "9"
      puts "10"
    end
    
    number_count
    number_count
    number_count

     
  • 修正する場合も定義されたメソッドの処理を修正するのみで済む
    メソッドに処理をまとめておけば、処理の内容が変更になった時も定義元の処理を修正するのみで済む。
    例えば、先ほどのプログラムを「5から10までの数字を順番に出力するプログラム」に変更する必要が生じたとすると、メソッドを利用していない場合では修正箇所が多くて死ぬ。
    def number_count
      puts "5"
      puts "6"
      puts "7"
      puts "8"
      puts "9"
      puts "10"
    end
    
    number_count
    number_count
    number_count
  • メソッドに分離することで、コードが分散し管理しやすくなる

メソッドの定義方法

def メソッド名
  # 実行する処理
end

defの横に書いた文字が、メソッド名となる。

メソッドが呼び出されると、defとendの間に書かれた処理が全て実行される。
メソッドの定義はRailsでも頻繁に行うため、ここで書き方を覚えておきたい。

なお、メソッド名は好きにつけることができるが、ルールとして小文字の英語から始まり、単語と単語を繋ぐ場合は_で繋ぐ。

メソッドの呼び出し

メソッドを呼び出すときは、メソッド名を記述する。
メソッドを呼び出すだけで、メソッドの中に記述した処理を実行することができる。

def say_hello # メソッドの定義
  puts "Hello World"
end

  say_hello # メソッドの実行

メソッドの定義部分はそのメソッドが実行されるまで読まれないため注意が必要。
上記の例では、1 ~ 3行目までメソッドの定義部分なので始めは読み飛ばされる。

5行目でsay_helloを呼び出しているので、ここで初めて定義部分を読み、2行目のputs "Hello World"が実行されることになる。

以下の図で、コードが読まれる順番を確認する。

https://tech-master.s3.amazonaws.com/uploads/curriculums//e09b784134aecd25c955a68078fe12e8.png

メニューで分岐する各処理をメソッドに

これまでif文で処理していた各条件の処理をメソッドにする。

メソッド名 処理 入力された値

post_review

レビューを書く 0
read_reviews レビューを読む 1
end_program プログラムを終了する 2
exception 無効な値の入力を知らせる それ以外
# メソッドの定義
def post_review
  # 処理
end

if input == 0
  post_review # メソッドの呼び出し