1/16 学習記録 Ruby入門 4日目(最終回)〜FizzBuzz〜カレンダー
<目標>
- RUBY入門終了する
- 丁寧に作業する ペースを守る
- モチベーションをキープする
- 8ポモドーロ
- 日報の時間を測る
<メモ>
第11章 クラス
正規表現
.match?
文字列検索して true/falseを返すgub
置換するブロック
引数はオブジェクトを渡しているが、ブロックは処理を渡してる。
yeildをに書いたメソッドはメソッドの中で実行できる。
ブロックを引数(&をつける)で渡して、
.call
で実行できるProcオブジェクトブロックの処理をオブジェクト化したもの
FIZZBUZZ提出
### GITの復習
レポジトリをクローンするとフォルダごとクローンされる。
カレンダープログラム作成
$ ./cal.rb -y 2020 -m 11 11月 2020 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
これを表示させる。全然わからない。
クリアすべきこと(おそらく)。
- shell コマンドでのオプション設定 (-y&-m)OK 3
- 1行目の?月 ?年の表示 OK 2
- 2行目の曜日表示 OK 4
- カレンダー表示コマンドを探す OK 1
- 日にちの横並び表示
- 日にちの7日ごとの折り返し表示
1日目を表示する曜日の設定
shellでの
ruby
入力を省略する
でしょうか。。。
順番
- カレンダー表示コマンドを探す OK 1
- 1行目の?月 ?年の表示 OK 2
- shell コマンドでのオプション設定 (-y&-m)OK 3
- シェルコマンドから数値入力できた
2行目の曜日表示 OK 4
- ダブルクオテーションが木になるけれどとりあえず表示しているから次へ
日にちの横並び表示 <=イマココ
- 日にちの7日ごとの折り返し表示 <=イマココ
1 shell コマンドでのオプション設定 (-y&-m)
引数付きショートネームオプションの処理.
- オプションに
:
をつける
#!/usr/bin/env ruby require 'optparse' options = ARGV.getopts('a:') puts options
% ./arg.rb -a 111 {"a"=>"111"}
#!/usr/bin/env ruby
これ何?、、、shebangでした!直接ファイルに書いてよし! なるほどー。ほんとかなー。
#!/usr/bin/env ruby require 'optparse' options = ARGV.getopts('y:','m:') puts options puts options["y"] puts options["m"]
{"y"=>"2020", "m"=>"11"} 2020 11
よっしゃー。ARGV.getopts('y:','m:')
はハッシュを出力してたんですねー。これでシェルとRubyが繋がった!でもってハッシュから取り出した数字はSTRINGだったので、それをINTEGERに変更。
2. 1行目の?月?年の表示.
time = Time.now p time p time.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒")
実行結果
2018-01-02 03:04:05 +0900 "2018年1月2日 3時4分5秒"
time = Time.now p time.strftime("%-m月%Y")
この時間入力を
date = Date.new(2020,11.1) p date.strftime("%-m月%Y")
に変更して
"11月2020"
が得られる。
これにシェルから入力できるようにする。
p
ではなくputs
メソッドでダブルクオーテーションが取れた :) (p (数値)は""なしで出力される)
4 カレンダー表示コマンドを探す
require 'date' a = Date.new(1993, 2, 24) b = Date.parse('1993-02-24') b += 10 b - a #=> 10 b.year #=> 1993 b.strftime('%a') #=> "Sat" yesterday = Date.today - 1
曜日が出てきた! これを入力したらその月の初めの日が何曜日が特定できる
.strftime
メソッド
表示を選べる!
入力した日付と曜日を表示
require 'date' a = Date.new(2020, 11, 1) p a.strftime('%a') #=> "Sat"
曜日の日本語表示.
require 'date' date = Date.today weeks = ["月","火","水","木","金","土","日"] index = date.strftime("%u").to_i p date.strftime("%Y年%-m月%-d日 %u") p date.strftime("%Y年%-m月%-d日 #{weeks[index - 1]}曜日")
5. 日にちの横並び表示
6. 日にちの7日ごとの折り返し表示
きっとこれらは一緒にできる。 多分、日曜日から第一日までは空白で、その月の月末までの文字列をつくって、それを7文字ごとに改行する。 。。。感じかな。
明日やろう。楽しみです。