学習の書き留め プログラミング勉強中

プログラミングで学んだことを日記として残して行こうと思います

今日の学習

今日学んだこと 2021/01/14

学習項目

オブジェクト指向
正規表現
railsの基本概念

学習内容

オブジェクト指向

アプリケーションを作成するときに、登場する役割ごとに分けて実装する方針のこと設計思想の一つ
メリット
実装がしやすくなる
後からコードを改変するときも他のオブジェクトに影響しない

単一責任の原則

アプリケーションの設計を考える上で、必要となる決まりの1つ。
「1つのクラスは1つの振る舞いしか持たない」という原則の下設計をする。

正規表現

文字列の一部分を抽出・置換したり、文字列が制約を満たしているかを調べるための表現方法
例えば、
090-1234-5678 09012345678 はコンピューターは別物と認識するから、合わせるよう組み替えたりする技術

上のパターンでは

irb
tel = '090-1234-5678'
tel.gsub(/-/'')

でできる。
.subは何かを何かに置換したい時に使えるもので、

変数.sub(/置き換えたいもの/'取り替えるもの')

と記述する。.gsubは置き換えたいもの全てを対象にする。
例のものはハイフンを空白に置き換えるという意味になる。

パスワード等が問題なく入力できているか調べる方法

パスワードやメールアドレスこれらの字数制限や@の有無はPC上でどのように認識しているのか。

まず、与えられた文字列に対して、内容をチェックするmatchメソッドがある。

word = 'hello, world'
word.match(/hello/)
=> #<MatchData "hello">

このように、match(/検索ワード/)でその文字列に検索ワードがあるかどうかを調べることができる。 その際にヒットしたワードはMatchDateという種類のオブジェクトで返される。
まあMatchDateに変換される感じかな、、、多分

これを使うことによって、文字列に何が入っているかを調べる。

表現方法のいくつか

[a-z] : aからzまでのどれかを指す
[\d] : 数字を指す
{n, m} : 少なくともn回多くてもm回を指す
i : 大文字、小文字を区別しない時に入れる

これらを使って、パスワードが満たしているかどうかを調べられる

password = '好きなパスワード'
password.match(/[a-z\d]{8,16}/i)
=> MatchDate or nil

上記の書き方を日本語にすると、
aからzの英語、数字を含む、8文字から16文字の大文字小文字は両方入っていてもいいパスワード
になる

. : ハイフンやピリオドなど含めた全ての英数字を指す
+ : 直前の文字が1回以上の繰り返しを指す

これを組み合わせて、

.match(/@.+/)

とすると、@以降に1文字以上の繰り返し、つまり@以降に何かの文字がある
と言うことになる。

\A : 直後に置いた文字を文字列の先頭に持つことを指す
\z : 直後に置いた文字を文字列の末尾に持つことを指す
[ぁ-んァ-ヶ一-龥々] : あらゆる日本語に対応することを指す
?= : 直後に設定した文字でチェックをかけて、設定した文字が続く文字列が存在する場合を指す
* : 直前の1文字が0回以上続く場合を指す

.match(/\A([a-z.\d])+(@.+)+([?=com jp])\z/i)

組み合わせると、おそらくこう言うのもありのはず。

railsの基本概念

レールズには言わずもがなDRYの概念があり、同じ情報を繰り返し定義しないと言うものがある
それ以外にフレームワークの概念として、
CoCと言う概念があり、設定よりも規約を優先すると言うものがある。これは簡単に言うと、多分自分で何か設定するより、そもそもあるものを先に使いなさいと言う意味だと思います。
これにより、開発スピードが上がり質も担保できることや、規約は開発者同士の共通認識であるため可読性が向上するなどのメリットがある。

まとめ

railsの基礎概念やそもそものrubyの概念、今後使っていくであろう正規表現の技術と深いところに近づいてきた。ゆっくり、ゆっくりと自分のものにしていく。