5分で解けないとマズいらしい

目次

  1. 1. 事の発端
  2. 2. 問題
  3. 3. 回答例
  4. 4. 感想

たまにはちょっとしたプログラミングの記事でも書いてみたいとおもいます。

事の発端

先日、Qiita でこんな記事を見かけました。

知ってたら5分かからないくらいで書けちゃうコードなんですよね。
Rails系のプログラミングスクールを卒業しても、戦力になっていない人が多いのは、
単純に、Rubyの最低限の基礎知識もわかってないからなんだろうなと、切に思います。
もし、あなたがプログラミングスクールを卒業しても、
この問題を5分足らずで書けないなら、Rubyの基礎をしっかり固める時期だと認識しましょう。

ビクッ(゚Д゚;)

Ruby は1年くらいは扱ったので一応初学者ではない(はず)ですが、正直業務に必要なことだけを都度覚えていっただけで、特に体系的に学習をしたわけではないので、ちょっと気になってこのお題をやってみることにした次第です。

問題

「User.new(first_name: ‘太郎’).first_name」で「太郎」を取得できるよう、
クラス「User」を作成してください。
また、「User.new(first_name: ‘太郎’, last_name: ‘田中’).full_name」で
「田中太郎」が取得できるよう、インスタンスメソッド「full_name」を定義してください。

先ほどの記事からそのまま引用してきました。ふむ。

回答例

とりあえず問題の条件を満たすことだけを考えてサクッと書いてみました。

# class 定義
class User
attr_accessor :first_name, :last_name

def initialize(hash)
@first_name = hash[:first_name]
@last_name = hash[:last_name]
end

def full_name
@last_name + @first_name
end
end

# main
p User.new(first_name: '太郎').first_name #=> '太郎'
p User.new(first_name: '太郎', last_name: '田中').full_name #=> '田中太郎'

これだと initialize の引数を増やしたいときに面倒だとか、hash のキーが Symbol 決め打ちじゃないかとか、そもそも hash 限定かよ、とかいろいろツッコミどころはあるんですがそのへんのリファクタは今回はしないのでご容赦ください。

感想

とりあえずちょうど5分くらいでできましたのでほっとしました。(出来はともかく)
たまにはこういう何か問題演習のようなことをやるのもいいですね。

気が向いたらまたこういうのやってみます。