はじめに
今週は勉強会に参加させていただき、自分のRuby力のなさを痛感しました💦
そこで、ruby力を高めたいという思いから、@hiroshagureさんと一緒にビンゴカード作成問題に取り組みました。
ビンゴカード作成問題はJunichiItoさんのブログから、引用させていただきました。
実際のコーディングでは、20分取り組んで、その後進捗を共有。意見を交換し合い、再度取り組むというサイクルで2人でやってみましたが、普段複数人で一つの課題に向けてプログラミングをしたことがなかったので、とても新鮮で面白い体験でした😆
そして、今回は自分がどう考えてコードを書いたのかを残しておくために、YouTubeにライブコーディング動画をアップしました(予めある程度完成したコードを用意しているので、しっかりしたライブコーディング動画とは言えませんが💦)
なんちゃってライブコーディング動画
実際に書いたコード
gistのURL↓
https://gist.github.com/NMP300/4a25e5c22fb610b2594db7f0df337c59
# frozen_string_literal: true class Bingo def numbers # 改善点:DRY原則に反している row_b = (1..15).to_a.sample(5) row_i = (16..30).to_a.sample(5) row_n = (31..45).to_a.sample(5) row_g = (46..60).to_a.sample(5) row_o = (61..75).to_a.sample(5) row_n[2] = " " [row_b, row_i, row_n, row_g, row_o] end def generate_card title = %w[B I N G O].map { |t| t.rjust(2) }.join("|") print "#{title}\n" numbers.transpose.each { |num| print "#{num.join("|").rjust(14)}\n" } end end bingo = Bingo.new bingo.generate_card
改善点
コメントにも書いていますが、DRY原則に反している部分があります。動画でも説明してますが、each_sliceメソッドを使って、その後に真ん中にスペースを開けるという処理が思いつきませんでした💦
これから、解答を拝見して勉強していきたいと思います💪 また、リファクタリング案があれば、ブログコメントで教えていただきたいです
最後に
週に1本程度は動画をアップしたいと考えていましたが、中々動画に注力することができず、前回の動画からかなり間が空いてしまいました💦
ただ、このようなアウトプットをすることで、よりインプットを頑張ろうと思いました🔥
これからも就職目指して頑張っていきたいです🔥
引用させていただいたサイト
CodeIQに「ビンゴカード作成問題」を出題しました。みなさんの挑戦をお待ちしてます! - give IT a try
[2019.11.25 追記] 自分のコードをリファクタリング
Itoさんの以下の解答を見て、自分のコードをリファクタリングしました。
リファクタリング後のコードはこのようになりました。
改善点の部分は、純粋に変数にしてしまって、そのあとで、真ん中を開ける処理をすれば良かったんですね💦 難しく考えすぎていました💦