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

これを表示させる。全然わからない。

クリアすべきこと(おそらく)。

  1. shell コマンドでのオプション設定 (-y&-m)OK 3
  2. 1行目の?月 ?年の表示 OK 2
  3. 2行目の曜日表示 OK 4
  4. カレンダー表示コマンドを探す OK 1
  5. 日にちの横並び表示
  6. 日にちの7日ごとの折り返し表示
  7. 1日目を表示する曜日の設定

  8. shellでのruby入力を省略する

でしょうか。。。

順番

  1. カレンダー表示コマンドを探す OK 1
  2. 1行目の?月 ?年の表示 OK 2
  3. shell コマンドでのオプション設定 (-y&-m)OK 3
    • シェルコマンドから数値入力できた
  4. 2行目の曜日表示 OK 4

    • ダブルクオテーションが木になるけれどとりあえず表示しているから次へ
  5. 日にちの横並び表示 <=イマココ

  6. 日にちの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文字ごとに改行する。 。。。感じかな。

明日やろう。楽しみです。