😺

【Ruby学習記録】メソッドといろいろな引数

2022/09/07に公開

お題1:下記のコードの introduce メソッドを拡張し、以下の条件を満たす内容を実装せよ

example.rb
def introduce
  name = "三郎"
  live = "宮崎"
end

result = introduce

puts result
  1. プログラムを実行すると以下のように出力される

    私は宮崎に住んでいる三郎です

  2. 戻り値は 1 で期待している文字列

解答

def introduce
  name = "三郎"
  live = "宮崎"

  return "私は#{live}に住んでいる#{name}です。"
end

result = introduce

puts result

ポイントは Ruby でのメソッドの実装の仕方。def メソッド名 ~ endで囲んだ範囲がメソッドとなる。
また、当初のコードだと変数に値を設定しているだけで終わっているため、result = introduce としても何も返ってこない。
なので、メソッドの最後で return "返す文字列" とすることでメソッドが戻り値を返すようになる。

なお、Ruby の場合、return 文を書かなくても、メソッドの最後に記述した処理の結果が戻される仕様なので、単に文字リテラルを書くだけでも OK。
*C あたりの古い言語でプログラム覚えた人間からすると、return 文で明示的に戻り値を書いていないとちょっと気持ち悪さがある。

お題2:greet というメソッドを定義して、実行したら"おはよう"と出力されるように実装せよ

def greet
  "おはよう"
end

puts greet

お題2はゼロから自分でメソッドを定義しましょう、というお題。
特記すべきポイントは無し。

お題3:下記のコードの間違いを修正し、文字列を大文字に変換するメソッドを実装せよ

wrong.rb
def upcase
  word.upcase
end

str = upcase(hello)
puts str

まず、上記の例での間違いは 2 か所。

  1. upcase メソッドが引数を受け取れるようになっていない
  2. upcase(hello) だと、hello という文字列ではなく、hello という名の変数を渡している
def upcase(word)
  word.upcase
end

str = upcase('hello')

puts str

間違いを修正すると上記の通り。
メソッドで引数を受け取りたい場合はdef メソッド名(引数, ...)という形で宣言する。

お題4:引数に渡した数字を倍にして返すメソッドを実装せよ

def multi(number:)
  number * 2
end

number = multi(number: 1024)

puts number

特に新たなポイントはないが、勉強のために「キーワード引数」というものを使ってみた。
multi(number:) という風に宣言しておくと、呼び出し時に明示的にキーワード名もつける必要がある。

「明示的にキーワード名もつける必要がある。」と言われると「呼び出し時のタイプ数が増えるだけで面倒くさい」となってしまうのだが、ちゃんとメリットもあって、

  • 引数の順序を気にしなくてよい
  • (命名の仕方次第だが)それぞれの引数が何を意味しているのか、呼び出す側のコードを見ただけでも想像できるようになる。
    • 要するにプログラムの可読性が上がる。

というところがメリットになる。

趣味で自己完結してプログラミングしているだけなら、あんまり考えなくても良いのかもしれないが、仕事としてプログラミングをする場合、作ったプログラムを作成者が一生メンテナンスするわけでは無い。
なので、他人が見たときにサッパリ分からないコードというのは、仕事の質としては非常に悪い、ということになる。
もっとも、自分が書いたプログラムであっても、時間をおいて改めて見ると当時の意図が分からなかったりすることもザラにあるので、未来の自分のためにもソースコードの可読性っていうのは非常に大事。

GitHubで編集を提案

Discussion