Ruby学習者に圧倒的な支持を得ている「チェリー本」こと「プロを目指す人のためのRuby入門」でRubyの再学習をしています。
全然覚えていない事が多く、あっちへ行ったりこっちへ行ったりの超迷走中です。
目次
アウトプット問題への取り組み
著者である伊藤淳一さんが、ご自身のサイトで初心者用のアウトプット問題を紹介されていたので取り組んでみました。
今回は以前に取り組んだ「カレンダー問題」の記録を残しておきます。
はじめにお断りしておきますが、「綺麗ではないソースコード」です。
お見苦しい点はご了承ください。
特に大量のコメントアウトがありますが、覚書のためそのままにしてあります。
参考にさせていただいたサイト
下記のサイトを参考にして問題に取り組みました。
ありがとうございます。
カレンダー作成問題
「たのしいRuby」に載っている、オーソドックスなカレンダー作成問題です。
DateクラスのAPIさえわかれば、あとは基礎的なプログラミング知識だけでコードが書けると思います。
https://blog.jnito.com/entry/2019/05/03/121235
完成するとこんな感じに表示されます。
作成したソースコード
require 'date'
today = Date.today # 今日の日付を取得
year = today.year
month = today.strftime("%B") # 月を名称で取得
mon = today.month # 月を数値で取得
# firstday = Date.new(year, mon, 1).strftime("%a") irb確認用。何曜日?
firstday = Date.new(year, mon, 1).wday # monthではダメ
lastday = Date.new(year, mon, -1).day
top = "#{month} #{year}"
puts top.center(20) # 20文字分センターによせる
puts "Su Mo Tu We Th Fr Sa"
print " " * firstday # 曜日(添え字)の数値分余白をつくる。3*曜日
(1..lastday).each do |date| # 1日から最終日までのループ
print date.to_s.rjust(2) + " " # 日付右寄せ+余白1。to_sをつけないと怒られる。
firstday = firstday + 1 # 曜日の添え字に足していく
if firstday % 7 == 0 # 土曜日まできたら改行
print "\n"
end
end
print "\n" # 最後の改行
解説など何ひとつ必要ないほどにメモ書きが多いです(笑)
今後の見直しの為、流れを記録しておきたいと思います。
- Date class の読み込み
- 本日の日付を取得 → そこから年・月(名称&数値)を取得する。
- 今月の1日の曜日を数値にて取得する。
- 今月の末日を取得する。
- 月名称および年を表示する。
- 曜日一覧を各2文字で表示する。
- ループを作成し、日付を表示する。Sat.で改行をいれる。
内容のレベルとしては、昨日からRubyを始めた人でも読み解ける程度だと思います。
一応、公式の回答も作成後に確認しましたが、あまりにも自分のコードと違っていたのでぶったまげて落ち込みました。
Dateクラスの使い方を学べる良いアウトプットでした。
後日、再チャレンジしていく予定です。
また、忘れないうちに残りのアウトプット問題もアップして残していきたいと思っています。