TECH CAMP 26日目 応用カリキュラム完了

自分用のアウトプット。

オブジェクト指向
アプリケーションを作成するときに、登場する役割ごとに分けて実装する方法。
これにより、実装しやすくなる、後から改変する時に他のオブジェクトに影響しない、といったメリットがある。

スパゲッティコード
複雑に絡み合い、問題の生じてしまうようなコード。

正規表現
文字列のいち部分を抽出・置換したり、文字列が制約を満たしているかを調べるための表現方法。

subメソッド
文字列の指定した部分を別の文字列に置き換える。
asuka = “薬草をひろった”
asuka.sub(/薬草/, “弟切草”)
→puts asuka で”弟切草をひろった”と出力される。

gsubメソッド
文字列内に指定した文字が複数含まれている場合、その全てを置換する。
subメソッドの場合は最初の1つだけ。

matchメソッド
引数に指定した文字列がメソッドを使用した文字列に含まれているか、をチェックする。
含まれている→MatchData
含まれていない→nil
が返ってくる。

asuka = “裏白蛇島に挑戦”
asuka.match(/裏白蛇島/)
→#<MatchData “裏白蛇島”>

asuka.match(/表白蛇/)
→nil

パスワードの制約
条件:大文字小文字区別なし、英字もしくは数字8文字以上

pass = ‘Hoge1234’
pass.match(/[a-z\d]{8,}/i)
→#<MatchData “Hoge1234”>

passが’Hoge123’だとnilになる。

[a-z]
[]で囲まれた文字のうちいずれか1つがマッチするかをチェック。

\d
数字を表す。
[a-z\d]で、英数字のいずれか1つにマッチ。

{n, m}
直前の文字が少なくともn回、多くてもm回出現するものにマッチ。

iオプション
大文字小文字を区別せずに検索する。
‘Dog’.match(/dog/) →nil
‘Dog’.match(/dog/i) →#<MatchData “Dog”>

.
ハイフンやピリオドなども含めた全ての英数字において、どの1文字にもマッチする。

+
直前の文字が1回以上の繰り返しにマッチする。

.+で、何かしらの文字が1回以上繰り返すものにマッチする。

メールアドレスからドメイン部分だけを抽出

mail = ‘hoge@hukudabe.tank.jp’
mail.match(/@.+/)
→#<MatchData “@hukudabe.tank.jp”>

正規表現を利用して、バリデーションの詳細な設定をすることができる。
主な使用例
・郵便番号
・全角かな/カナ漢字の区別
・passwordの英数混合の判断

postal_code = “123-4567”
postal_code.match(/\A\d{3}[-]\d{4}\z/}

\A
直後に置いた文字を、文字列の先頭に持つ場合にマッチ。
\A\d{3}なら、文字列の先頭に少なくとも3回の数字がある、にマッチ。

\z
直前に置いた文字を、文字列の末尾に持つ場合にマッチ。
\d{4}\z/なら、文字列の末尾に少なくとも4回の数字がある、にマッチ。

[ぁ-んァ-ン一-龥]
全角かな/カナ漢字のチェック。

(/\A[ぁ-んァ-ン一-龥]+\z/)
先頭から末尾までかな/カナ/漢字である場合マッチ

?=
直後に設定した文字でチェックをかけて、設定した文字が続く文字列が存在する場合、その文字列にマッチする。

name = “マイケルジョーダン”
name.match(/マイケル(?=ジョーダン)/)
→#<MatchData “マイケル”>

name = “マイケルジャクソン”
name.match(/マイケル(?=ジョーダン)/)
→#nil

*?
*は直前の文字が0回以上続くとマッチ。
?をつけることで、チェックした文字列の中で?の直後の文字が出てきた段階でその1文字のみ返す。

うーむ。
この辺りの内容は調べればいくらでも出てくるから特に暗記する必要はないとのこと。
でも意味が分かるようにはしておかないといかんよね。

とりあえずこれで応用カリキュラムが完了です。
ライフコーチさんとも話したけど、発展に進む前にアプリの復習をしておいた方がよいとのこと。
今日はとにかく復習復習復習でいきます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする