T_Y_CODE

プログラミング学習記録

学習記録 1日目

Webエンジニアを目指して日々学習中です。
今日から学習内容をブログにまとめていきたいと思います。

現時点での学習進捗

趣味でゲーム制作をしていたためプログラミング(C#)の基礎知識はありました。(とは言っても全くオブジェクト指向でコードは書けておらずとても人に見せられるコードではなかったです。。。) Rubyの文法を軽く学習をした後現時点まで以下の学習をしました。

  • Ruby on Rails Tutorialを通して学習
  • リーダブルコード 5章まで読了
  • プロを目指す人のためのRuby入門 6章まで読了

学習計画

  • 前日の復習
  • プロを目指す人のためのRuby入門 7章
  • リーダブルコード 6章

学習内容

前日の復習

正規表現の復習をしました。メタ文字の一覧表を見て覚えるより実際に正規表現を書いて覚えた方が身につくと思ったので http://www2.otani.ac.jp/fkdsemi/seikihyogen/mondai.htmlで学習しました。今日は①基礎編, ②基本編を学習しました。間違えた問題と所感を以下に記録しておきます。

  • 1-9. 前方参照
/和風(?=懐石)/  #解答
/和風(?:懐石)/  #回答

前方参照の記法を忘れていた。

/藤原(道長|道隆|道兼)/  #解答
/藤原[道長|道隆|道兼]/  #回答

()でグループ化 []は1文字。凡ミスしました。。。

  • 1-11. 引用記号
/[ -~]+/  #解答
/[()\d\+\*\.\/=-]+/  #回答

回答の正規表現でも正しく拾ってくれますが解答の記法の方がシンプルなため覚えたいと思います。

  • 2-1. 数字の取り出し
/[1-9]?[0-9]/  #解答
/^[1-9]?\d$/  #回答

解答に疑問。^$で囲わないと00とか拾ってしまう気がします。

  • 2-2. 単語ごとに取り出す
/.*[05]/  #解答
/.*[05]$/  #回答

行末を示す$は必要だと思いますがなくても拾ってはくれます。

  • 2-5. 日付への一致1
/([1-9]|1[0-2])/([1-9]|[12][0-9]|3[01])/  #解答
/([1-9]|1[0-2])\/([1-9]$|[12]\d|3[01])/  #回答

解答だと10/46も拾ってしまう。行末を示す$が必要だと思います。/はエスケープが必要だと思います。

プロを目指す人のためのRuby入門 7章

  • 7.3.4 クラスメソッドの定義 (P.219)
class User
  #省略

  def self.create_users(names)
    names.map do |name|
      User.new(name)
    end
  end

  #省略

  names = ['Alice', 'Bod', 'Carol']
  users = User.create_users(names)
  users.each do |user|
    puts user.hello
  end
end

なぜself.create_usersメソッド内のnames.mapがeachメソッドではないのか疑問だった。違いを以下の記事で学びました。
qiita.com
mapメソッドはブロック内の戻り値を要素にした配列を戻り値にするためmapメソッドを使用する。
eachメソッドだと各userオブジェクトは作成されるがusersに代入されるのはnamesの配列になってしまう。

本日の総括

  • プロを目指す人のためのRuby入門 7章長くて学習に思った以上に時間がかかった。
  • リーダブルコードはまだついていけてない感ある。読みやすいコードってこんな感じなのかと思いながら読んでます。
  • 初めてはてなブログを書いた。日課にしていきたい。