LoginSignup
0
0

More than 3 years have passed since last update.

コーディングレビューを受けた話

Posted at

とある企業さんで丁寧にコーディングレビューの機会を設けて頂けてそれがとても感動&勉強になったので記録します。

問題

引数で与えられた文字列を空白の区切りごとに頭文字だけ大文字にするというものです。

例:hello programming world→→→Hello Programming World

私はRubyで挑戦しました。

Ruby

def LetterCapitalize(str)

//ここに処理を書く

end

puts LetterCapitalize("hello programming world")

考え方

ご教授頂いたことで勉強になった事は考え方です。

「まずやりたいことを細かく分けて考えよう。コードを書きながら頭を整理する感じで書いてみるといいよ。」
「実際の現場では内容よりも先にコードを見て、その後に内容を詳しく話すことも多いから変数名やメソッド名はできるだけ分かりやすく、何を表しているのか誰が見ても分かるようにしよう。」
「そのほうが自分も何を実現したいのか頭が整理されて考えやすくなるよ」

ととても丁寧にご教授頂きました。
感動して勉強になり過ぎて泣きそうでした。

では実際にやってみます。

文字列を空白ごとに分ける

splitを使って空白ごとに文字列を分けます。
公式リファレンス

words = str.split

このsplitを使って文字列を分けたんだということが分かるようにwordsという変数名にしました。
ちなみにsplitは引数に(,)のように指定すればカンマごとに分けることもできるみたいです。

splitによっての出力結果は以下のようになりました。

hello
programming
world

はい。分けることができました。

分けた文字列の頭文字を大文字にする

capitalizeを使って頭文字を大文字にします。
公式リファレンス

words = str.split
words.map do |word|
  word.capitalize
end

wordsは配列になっているのでそれに対して1つずつ処理ができるようmapを使います。
mapは配列の要素の数だけブロック内の処理を繰り返し値を書き換えるメソッドです。
公式がちょっと分かりにくかったのでこちら参考にしました→Rubyのmap, map!メソッドの使い方

そうすると出力結果は下記のようになります。

Hello
Programming
World

はい。全て頭文字を大文字にできました。

配列を結合させる

今は

words = [Hello, Programming, World]

という中身の配列になっているのでこれを結合します。

joinを使います。
公式リファレンス
join(' ')とすれば空白で区切りかつ結合できます。

でもここでこのまま

words.join

とすると

hello programming world

と出力されてしまいます。

これはmapが破壊的メソッドではないためmapで処理をした外に出ると、元々の文字列が書き換わっている訳ではないので元に戻ってしまっているのです。

ですので書き換えます。

words = str.split
words.map! do |word|
  word.capitalize
end

words.join(' ')

上記のようにしてみると下記のように出力されます。

Hello Programming World

はい。できました。
ただし、破壊的メソッドは元の値をそもそも書き換えてしまうので使い方によっては危険であるという認識を持つようにとご教授頂きました。

番外編

じゃあ、もしcapitalizeがなかったらどうする?
自分で全て処理を書くとしたらどうするか?とワクワクする問題を出されて考えてみました。

def LetterCapitalize(str)

  words = str.split
  words.map! do |word|
    letters = word.split('')
    letters[0].upcase!
    letters.join
  end

  words.join(' ')

end

puts LetterCapitalize("hello programming world")

まずwordsをmap!で繰り返すのは変わらず。
そのwordsの中身の[hello, programming, world]をさらにsplitで一文字ごとに分けます。
そしてupcaseで頭文字を大文字に変換します。
joinで文字を結合させます。
最後に文字列を結合させて完成です。

できた!
楽しい!

私はつい「これを実現するメソッドあるかな?」と探してしまうのですが、
今回みたいにメソッドがなくても実現できることにとても面白さを感じました。

メソッドに頼るから考えが浅いのだと痛感したので、今回を教訓にロジカルシンキングを鍛えて行こうと思います!

本当にこの企業さん神様みたいな対応してくれて感謝しております。

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0