お知らせ
またまたやります、コードレビューライブ!
というわけで、弊社ソニックガーデン主催の 第5回スキルアップ勉強会「コードレビューライブ 〜伊藤淳一からの挑戦状 part2〜」 のお知らせです。
開催日時は2024年12月9日(月) 20時です。
今回もオンライン開催ですので、みなさんどうぞお気軽にご参加ください!
「コードレビューライブ」って何なん?
コードレビューライブは、
- 僕がプログラミングのお題を出し、
- 参加者のみなさんがそのお題を解いて提出し、
- 当日僕がその場でコードレビューする、
そんな勉強会です!
コードレビューを通じて、良いコードを書く上で大事な考え方や実践的なフィードバックをみなさんに提供できればと考えています。
ちなみに、コードは書かずに当日勉強会に参加してコードレビューの様子を眺めるだけ、でもOKです。
ですが、自分で事前にコードを書いておいた方が、当日の学びが100倍アップすると思います!
今回のお題は「変なカレンダー生成問題」です
今回の勉強会では、みなさんに「見にくくてあまり実用性のない、変なカレンダー」を生成してもらいます。
ちょっと難しいかもしれないので、挑戦者のレベルにあわせて3つのパターンを用意しました。
レベル1: 横向きに出力
レベル1では年を指定すると、横向きのカレンダーが1年分出力されます。
calendar = SgStrangeCalendar.new(2024) puts calendar.generate
上のプログラムを実行して、以下のようなカレンダーが出力できれば完成です。
いやあ、とても見にくいですね、実用性ゼロ!(苦笑)
レベル2: 今日の日付を強調
「そんなの簡単、簡単!」という人はレベル2へ。
レベル2では今日の日付を[ ]
で囲んで強調表示します。
以下は今日の日付が2024年12月9日だった場合のコードと、その出力例です。
calendar = SgStrangeCalendar.new(2024, Date.today) puts calendar.generate
ちょっとわかりにくいかもしれませんが、12月9日の"9"が[9]
になっています。
レベル3: 縦向きに出力
「レベル2も余裕でしたけど?」という人はレベル3にチャレンジ!
レベル3はレベル2の縦向きバージョンです。 行と列を入れ替えてカレンダーを出力します。
calendar = SgStrangeCalendar.new(2024, Date.today) puts calendar.generate(vertical: true)
generate
メソッドにvertical: true
オプションを渡しているので、カレンダーは下のように縦向きで出力されます。
12月9日の日付が[9]
になっている点にも注目してみてください。
「よっしゃ、チャレンジしたる!」という人はプルリクを送ってね😘
プログラム仕様の詳細や解答の方法については以下のGitHubリポジトリで説明しているのでこちらをご覧ください。
上記リポジトリをフォークし、コードを書いてプルリクエストを作成すれば提出完了です!
なお、予めテストコードが用意してあるので、問題が解けたかどうかはテストが全パスするか否かで判断できます。
↓こんなふうにテストが全パスすればOKです。
$ ruby test/sg_strange_calendar_test.rb --no-plugins Run options: --seed 16463 # Running: ......... Finished in 0.001414s, 6364.9222 runs/s, 6364.9222 assertions/s. 9 runs, 9 assertions, 0 failures, 0 errors, 0 skips
レベル3は必須ではありません。
レベル1で提出してもらっても良いですし、腕に自信がある人はレベル2、レベル3と進んでもらってもOKです。
みなさんが「ここまでならできそう」というレベルまで完成したら、解答コードを提出してください。
前回のコードレビューライブの様子や反響など
前回のコードライブでは「ローマ数字変換プログラム」をお題として出していました。
romanizer = SgRomanizer.new # アラビア数字 → ローマ数字 romanizer.romanize(1) #=> "I" romanizer.romanize(2) #=> "II" romanizer.romanize(3) #=> "III" # ... romanizer.romanize(3999) #=> "MMMCMXCIX" # ローマ数字 → アラビア数字 romanizer.deromanize("I") #=> 1 romanizer.deromanize("II") #=> 2 romanizer.deromanize("III") #=> 3 # ... romanizer.deromanize("MMMCMXCIX") #=> 3999
こんな感じで、僕が画面共有しながら、RubyMine上で提出されたコードにコメントしたり、リファクタリングしていました。
Image:あなたのコードをその場でレビュー&リファクタリング!「コードレビューライブ - 株式会社ソニックガーデン
当日のXのポストから、参加者のみなさんのコメントをいくつか紹介させていただきます。
#sgtech
— wataru kubota (@wkubota) 2024年10月28日
コードレビューデバッグしながらするってあまりやったことなかったので新鮮
indexとかiとかじゃなくて、ズバリ座標って変数名にするのか。なるほど〜 #sgtech
— ほりゆう@英語 (@yuki82511988) 2024年10月28日
見てる。見入りすぎて呟く暇が無いw #sgtech
— タカハシ/Takahashi (@tttol777) 2024年10月28日
こんなコード短く出来るのか。
— 奥日曜 (@Okunichiyou) 2024年10月28日
僕のプルリクの半分以下の長さやん。
#sgtech
参加してくださったみなさん、どうもありがとうございました!
まとめ
というわけで、今回は2024年12月9日(月)に開催するオンライン勉強会「第5回スキルアップ勉強会・あなたもチャレンジ!コードレビューライブ 〜伊藤淳一からの挑戦状 part2〜」についてお知らせしました。
前回参加した人も、そうでない人も、ぜひご参加ください。
あなたの書いたコードをお待ちしています!😄