自転車とプログラミング

自転車メーカーに勤める会社員がプログラミングを学ぶ中で感じたことを書きます。最近サービス作りました。

人のプログラムを読解しよう カレンダープログラム編01−01

フィヨルドブートキャンプに所属しているYukiです。 今回はフィヨルドブートキャンプで課された「ターミナルでカレンダーを出力しよう」という課題を終了し、他の受講生の解答が見られるようになりましたので、その読解に取り組みます。

完成形

課題の完成形がこちらです。 bashでつかえるcalコマンド同じ見た目のカレンダーを出力しようというもの。

f:id:YukiWatanabe:20210429215144p:plain

画像上側がcalコマンドによるもので、下側が他の受講生がつくったものになります。 この他、コマンドライン上で年月を指定することができるようになっています。

読解

全体を見てみての所感

スマートなコードで感動。自分の課題とのギャップの悩みます。

スマートなコードを書きたいとは思っているのですが、プログラムを書くときに毎回悩むのはどこから書けばいいか、ということ。 私は全体像を捉えてから各機能(関数)を作っていって、最後に全てを出力する部分(メイン部)を作るという流れ。これはボトムアップ型と言うみたいです。

対して、メイン部から着手して不足する各機能を作っていくのがトップダウン型。 優劣の問題はなくどちらで取り組んでもいいようですが、トップダウン型は必須機能に絞ったコードになりやすく、ボトムアップ型はコードが肥大化しやすいのが特徴。

現状だと理解度が追いついてないので、ボトムアップで進めても機能の実現方法がわからない、ということに多く直面します。。。

条件演算子

day.to_i < 10 ? " #{day} " : "#{day} "
#整数化された変数dayの値が10より小さいかどうか。trueであれば" #{day} "をfalseであれば "#{day} "を返す

条件演算子を使った部分。 条件演算子式1 ? 式2 : 式3の形式で式1の結果がtrueであれば式2を、falseであれば式3を返す。 書き方はだいぶ違うけどやってることはif 式1 then 式2 else 式3 endと同様。

読解をやっていて思ったけど条件演算子を始めとする演算子式はコードがスマートになる分、なれた人ほどよく使う印象だ。私は疎かったので演算子式が出るたびに読解が止まって調べるのに時間がかかった。

文字色・背景色の変更

"\e[7;37m#{today}\e[0m "
#変数todayの文字色を白色にして、背景と文字色を反転させる。

エスケープシーケンスを活用して、カレンダーの今日の日付を反転表示する部分。 \e[〇〇以降はテキスト表示が変更され、\e[0mまでその効果が続く。 \e[7;37mの7は文字色と背景色の反転の指定、37は文字色を白色にする指定。通常は\e[7m\e[37mという書き方になるが、;\e[を省略して記述できる。

つづく