①チェリー本を改めて1周した
②RExを9割以上になるまでやる
なんとなく気になるところを自分なりにまとめていたものです👇
-
マジックコメント
エンコーディングはcoding: エンコーディング名
の前後に任意の文字を入れても良い&大文字・小文字どちらでも可 -
0x
でスタートする数値は16進数リテラル -
p [].size
は0になる。nilじゃない。 -
p [].to_i(to_sも)
は0ではなくエラーが起きる。 -
定数PI
はMathモジュールに定義されているもの -
sprintf関数
は書式を揃えるときに使う。第1引数にはフォーマットを指定する。第2引数にフォーマットしたい値を指定する。 -
Rubyではメソッド内で定数を定義することができない。
-
Hash({})
で空のHashオブジェクトを生成できる -
Stringクラスに
to_h
、to_a
のメソッドはない -
例外処理
StandardError
を継承しないクラスのインスタンスをraiseメソッド
の引数に指定すると、TypeError
が発生する -
<=>
では文字列と数値は比較できない -
- メソッドと変数の探索順位は変数が先
-
absはIntegerクラスSelfの絶対値を返す 正・負の方向に関係なく考えた時の値
-3
は3
-
require
-
require
するとファイルが評価される- 読み込んだものが
class
の場合、そのまま使える - 読み込んだものが
module
の場合、include
しないと使えない
- 読み込んだものが
-
-
extend
(モジュール)- extend Module_name とすると、特異クラスにモジュールのメソッドが追加される
do ... endと{ ... }を比べた場合、{ ... }の方が結合度が強い
p [1,2,3,4].map do |e| e * e end
do ... endの結合度が弱いため、p([1, 2, 3, 4].map)が評価されます。
Time系
||||
|----|-----|-----|----|
| %x | 日付(%m/%d/%y) | 01/05/15 |
| %D | 日付(%m/%d/%y) | 01/05/15 |
| %F | 日付(%Y-%m-%d) | 2021-11-01 |
|%r|時分秒とAM or PM(12時間制)|12:00:00 AM|
|%T|時分秒(24時間制)|03:46:11|
|%Y|西暦を表す数(9999)|2015|
|%y|西暦の下2桁(00-99)|15|
|%m|月を表す数字(01-12)|01|
|%d|日(01-31)|05|
|%-d|日(1-31)|2|
|%R|時分(24時間制)|03:46|
|%M|分(00-59)|00|
|%p|午前または午後(大文字)|AM|
|%P|午前または午後(小文字)|am|
判定式 == === eql? equal?違い
a = 2
b = 2.0
p a == b # => true
p a === b # => true
p a.eql? b # => false
nil.eql?(NilClass) #=> false
p a.equal? b # => false
目についたメソッドまとめ
gsub!とreplaceの違い
gsub!
gsub(pattern, replace) -> String
文字列中で pattern にマッチする部分全てを文字列 replace で置き換えた文字列を生成して返す。
replace:置き換える文字列のパターンを表す文字列か正規表現
str = "aaabbb"
str = str.gsub!("a","c")
puts str #=> cccbbb
replace
シーバーの値を新しい値に置き換えてしまうのはgsub!メソッドと同じ
gsub!メソッドのように部分的に一致する文字列を変更するということはできない。
文字列全部を新しい文字列全部に変更できる。
str = "aaabbb"
str = str.replace("c")
puts str # => c
%記法
%、%Q | ダブルクオートで囲う場合と同等 | 変数・定数の展開可能 |
%q | シングルクオートで囲う場合と同等 | 変数・定数の展開不可 |
%W | 配列を作る | 式の展開がされる |
%w | 配列を作る。配列の要素はスペース区切りで指定する。 | 式の展開はされない |
%I | 要素がシンボルの配列を作る。 | 式の展開がされる |
%i | 要素がシンボルの配列を作る。 | 式の展開がされない |
%x | コマンド出力を行う。バッククオートで囲った場合と同等 | |
%s | シンボル。 | 式の展開がされない |
メタ文字
- . 改行以外の任意の1文字にマッチする。ただしオプションmの指定によって複数行モードの場合は改行にもマッチする。
- [] []内のいずれかの1文字
- [^..] どの文字でもない
- a-z 英字にマッチする
- \w 英数字とアンダースコアにマッチする
- \W 英数字とアンダースコアではない文字にマッチする。(\w以外の1文字にマッチする)
- \s 空白文字にマッチする。(スペース、タブ、改行、復帰、垂直タブ)
- \S 空白文字ではない文字とマッチする。(\s以外の1文字)
- \d 0から9までの数字1文字にマッチする。
- \D 0から9までの数字ではない文字にマッチする。(\d以外の1文字)
- \A 文字列の先頭にマッチする。^とは違い改行の直後の文字ではない文字にマッチする。
- \z 文字列の末尾にマッチする。(改行含む)
- \Z 文字列の末尾にマッチする。(改行を含まない)
#Procクラス
ブロックを持ち運び便利なオブジェクトにしたもの
Proc.newで生成可能。作成されたProcオブジェクトはCallで呼び出し可能。
Procオブジェクトは変数は共有されない
仮引数を設定する事が可能
proc1 = Proc.new { |par1| p par1 }
proc1.call("arg") #=> "arg"
lambda
Procオブジェクトを作る方法の一つ
Proc.newで作成されたオブジェクトと違う点
###&演算子(積集合「&」)
重複している要素は取り除かれ、共通する要素を取り出す。
a = [1, 2, 3]
b = [1, 3, 5]
a & b #=> [1, 3]
###&&演算子
&&は a と b がどちらも真のとき、最後に評価された b を出力する
a && b #=> [1, 3, 5]
#&, &&, |, ||演算子それぞれの動きの違い
###|演算子(和集合「|」)
重複している要素は取り除かれ、重複している要素をまとめて出力する。
a = [1, 2, 3]
b = [1, 3, 5]
a | b #=> [1, 2, 3, 5]
###||演算子
||は a と b がどちらかが真のとき、最初に評価された a を出力する
a = [1, 2, 3]
b = [1, 3, 5]
a || b #=> [1, 2, 3]
a = nilの場合右辺の処理が行われる
a || b #=> [1, 3, 5]
よく使われる特殊文字
- \n:改行 LF文字(Line Feed)
- \r:改行 CR文字(Carriage Return)
- \t:タブ
10進数以外の整数リテラル
- 2進数の場合は0b
- 8進数の場合は0
- 16進数の場合は0x
unless文
条件式が偽になったときにだけ処理を実行する。unless文でelseは使えるがelsifは使えない。thenも使える。
お世話になった 偉大な記事
https://qiita.com/ffggss/items/0bab2a1e80e941378b49 https://qiita.com/kidach1/items/651b5b5580be40ad047e https://melborne.github.io/2012/06/18/i-am-inject-lover-too/