##Ruby Silver 試験ポイントまとめ(自分用)
自分用メモで汚いですが間違えやすいところをまとめてますぜひ
-
Ruby 2.0以降では、デフォルトのスクリプトエンコーディングはUTF-8
-
Hash#eachのブロックパラメータはArray。
-
Hash#size はhashの要素の数を返す
-
Enumerable#select selfからブロックの条件に該当する要素を集めて返す。
-
Enumerable#find selfからブロックの条件に該当する最初の要素を返す。
-
Array#delete selfから引数の要素を削除。削除した要素を返す。破壊的メソッド。
-
例外処理について
- Rescue 節で省略するとstandard error とそのサブクラスを拾う
- Ensure節は必ず実行される
- raiseメソッドは引数を指定していなければ、RuntimeError例外を発生
-
八進数表記
- 0から始まるもの
- Puts 090 などでエラー
-
演算子の優先順位は*よりも**が高い
-
Ruby定数は大文字で始める
- 変更可能だが警告が出る
-
Ruby変数名
- 1文字目はアルファベット小文字か_で始める必要がある。
- 2文字目以降はアルファベットもしくは数字を使用
-
可変長変数
- *a などで宣言
- 任意の数の引数が取れ、aに配列が格納される
-
Initializeメソッドは何回でも読み出され書き直される
-
Super の記述場所は任意の位置でおk
-
外部モジュール読み込みについて
- 数学PIなどをしようする場合Mathモジュールを読みこむ必要がある
- 読み込み方法例
- Include Math
- Math::PI
-
クラス拡張のメソッドより特異メソッドが優先して実行される
-
.. , … 演算子について
- a = [1,2,3,4]
- a[0..3] => [1,2,3,4]
- a[0..-1] => [1,2,3,4]
- a[0,3] => [1,2,3]
-
find_all == select
-
map == collect
-
正規表現記号
- *は直前の文字列の0回以上の繰り返しを表す
- Iオプションで大文字と小文字の区別しない
- . は任意の文字を表す
- {m}は直前の正規表現のm回の繰り返しを意味
- Mオプションで.が改行にもマッチする
- \d+などの+は連続を表す
- Matchは一度しか行わない
- Scanは繰り返し行われる
- \wは単語構成文字の省略記号
-
65を”A”にしたい時
- 65.chr
- 逆は”A”.ord
-
ヒアドキュメント
- <<-識別子' のように-' を付けて書くことで終端行をインデントすることは可能
- 通常は空白を開けるとエラー
-
Chompメソッドで\r\n全て消す
-
chopメソッドで末尾の文字を消す
-
IO#rewindはファイルポインターを先頭に移動する
-
Splitメソッドは引数で特定の文字列を区切り文字として指定できる。また第二引数で生成される配列の個数を指定することができる。
-
“0-5”は範囲指定になるが、”8-”では範囲指定にならず8と-を削除します
-
eql は 文字列が同じ場合true
-
equal は オブジェクトが同じかどうかを見る
-
inject はブロックに要素を割り当てる…|i,j|
-
IO
- IO#getsとIO#readlineはファイルオブジェクトから一行読み込んで、読み込みに成功した時にはその文字列を返す。
- IO#getsとIO#readlineの違いはEOFに到達した時の振る舞いのみ。IO#getsはnil, IO#readlineはEOFErrorを返す
foo = [1,2,3]
bar = foo
p foo === bar # => true
Module Foo
def foo //インスタンスメソッドとして定義
puts("foo")
end
end
Class Bar
extend Foo //FooモジュールのインスタンスメソッドをBarクラスの特異メソッドとして定義
end
Bar.foo #=> foo という使い方ができる
-
::Fooのような::演算子から始まる定数は、トップレベルで定義されている定数
-
slice!はスライス後を参照している
-
ファイルの末尾(EOF)への反応の仕方
- getsの場合、nilが帰る
- Readlineの場合、EOFError例外が発生する
-
File#mtimeメソッドは更新が保存されるがFile::Stat#mtimeメソッドは更新が保存されない
- File::Statクラスはnewメソッドのみクラスメソッド
-
ファイル名と拡張子が".“で区切られているファイル名から任意の拡張子を取り除く時に、第2引数として”.*"を指定してFile.basenameを呼び出します
-
"%2d%s"の"%2d"は出力したい数値が2桁より少なければ、空白スペースを入れるようにする指定
(1..5).each_cons(3) {|arr| p arr }
# <実行結果>
# [1, 2, 3]
# [2, 3, 4]
# [3, 4, 5]
(1..10).each_slice(3) {|arr| p arr }
# <実行結果>
# [1, 2, 3]
# [4, 5, 6]
# [7, 8, 9]
# [10]
arr = [1,2].zip([3,4])
p arr
# <実行結果>
[[1, 3], [2, 4]]
a1 = [1,2,3]
a2 = [4,2,3]
p a1 - a2
# <実行結果>
[1]
p ({a: 100, b: 100}).invert
# <実行結果>
# {100 => :b}
1: s = ["one", "two", "three"]
2: s.shift
3: s.shift
4: s.unshift
5: s.push "four"
6: p s
# <実行結果>
# 1: ["one", "two", "three"]
# 2: ["two", "three"]
# 3: ["three"]
# 4: ["three"]
# 5: ["three", "four"]
p "Ruby on Rails".delete("Rails")
# <実行結果>
# "uby on "
a, b = 0 # a => 0, b => nil
c, a = 1 # c => 1, a => nil
a, d = 1, 2 # a => 1, d => 2
b, c = 3 # b => 3, c => nil