RubySilver直前確認をまとめてみた

# ページ概要
RubySilverのテスト直前に確認することをまとめた個人用のメモです。

- 進数
    - 0b 2進数を表すプレフィックス

- メソッドと変数に同名のものがある場合
    - メソッドと変数の探索順位は変数が先です。

- ERORR
    - TypeError
        - メソッドの引数に期待される型ではないオブジェクトや、期待される振る舞いを持たないオブジェクトが渡された時に発生します。
        - 例
            - raise ['error message']
                - raiseは、配列を引数に取らない。
                - exception class/object expected(クラスかオブジェクトを渡してください)と帰ってくる。
            - raiseメソッドの引数に文字列を渡すと、その文字列がエラーメッセージになる。
                - 第1引数に例外クラス、第2引数に文字列を渡すとRuntimeError以外の例外を発生させることができる。
    - ArgumentError
        - 引数の数があっていないときや、数は合っていて、期待される振る舞いを持ってはいるが、期待される値ではないときに発生します。
        - Argument = 引数という意味の英単語
    - RuntimeError
        - 特定の例外クラスには該当しないエラーが起こったときに発生します。
    - NoMethodError
        - 読み取り用のメソッドが定義されていないインスタンス変数を参照しようとするとNoMethodErrorが発生します。
    - NameError
        - 定義されていないローカル変数やメソッドが呼び出されている場合に、発生する。
            - インスタンス変数が未定義の場合は NoMethodError が発生する。

- rubyの予約語一覧
    - https://rubytips86.hatenablog.com/entry/2014/03/19/205559

- rubyにおける偽の値
　- falseとnil

- 文法
    - includeとrequireの違い
        - includeはモジュールをよぶためのメソッド
            - モジュールは、Math::PI みたいな書き方でも呼び出せる。
        - requireは外部ファイルやライブラリをメモリに読み込むのに使う
            - 別ファイルのクラスを読み込む時にも使う。

- Date#strftime
    - strftimeとは。
        - string format time　　＝　時間を文字列で表したもの。
    - %x	日付(%m/%d/%y)  = %D
    - %F	日付(%Y-%m-%d)
    - %Y	西暦4桁
    - %y	西暦の下2桁(00-99)
    - %m	月を表す数字(01-12)
    - %d	日(01-31)

- Object
    - dupメソッドを使用してオブジェクトをコピーすると、オブジェクトが持つidが新しく生成される

- Stringクラス
    - chop
        - 末尾の文字を取り除きます。ただし、文字列の末尾が"\r\n"であれば、2文字とも取り除きます。
破壊的メソッドではないので、selfは影響を受けません。
    - chomp
        - 末尾から改行コードを取り除きます。
        - もともと、chopというのがあり末尾1文字を消す事ができました。テキストファイルの末尾は改行で終わるのが(Unixの)マナーだったのでこれで問題なかったのですが末尾に改行がついてないことや1文字でない環境もあったりと問題になり「末尾の改行を削除する」関数が追加されchopのmultiline用だからchompになりました。
    - strip	
        - 文字列の先頭と末尾の空白文字(\t\r\n\f\v)を取り除きます。
    - strip!	
        - 文字列の先頭と末尾の空白文字(\t\r\n\f\v)を破壊的に取り除きます。

    - puts "Ruby on Rails".delete("Rails")
        - →"uby on"  ・・・含む単語全て消すから注意。

- Arrayクラス
    - compact 
     - 配列の要素がnilのものを削除
  - uniq
     - 配列の要素が重複しているものを削除
  - concat 配列を連結。これは破壊的。
  - detect(条件)
     - 条件に当てはまる最初の要素を返す。findと同じ。
  - *"a" → ["a"] 
     - 配列にする
  - each
     - レシーバの各要素に対してブロックの処理を行います。
  - each_width_index
     - レシーバの各要素とインデックスを渡しブロックの処理を繰り返します。
     - indexは、０から始まる。
  - each_index
     - レシーバの各要素のインデックスを渡しブロックの処理を繰り返します。

- 配列
    - p %(a b c)  # => "a b c"
    - p %W(a b c) # => ["a", "b", "c"]

- Hashクラス
    - reject(ブロック)
        - ブロックの実行結果が、trueになる要素を削除したハッシュを返す。非破壊的。
    - update
        - Hash.instance_methods.grep(/update/)
            - !ついてないのに、破壊的メソッドらしい。
    - invert
        - キーと値を入れ替える。revertはないから注意。
    - 空のHashオブジェクトを生成するにはHash({}), {}, Hash.newのいずれかを用います。

- Dirクラス
  - Dir.getwd 
     - 現行作業ディレクトリを取得できる。 Dir.pwdと同じかな。
  - delete / rmdir
     - 空のディレクトリを削除する

- Fileクラス
    - delete
        - 引数に指定したファイルを削除します。削除に成功した場合は削除したファイルの数を返し、削除に失敗した場合はエラーが発生します。
    - extname
        - ファイルの拡張子を返す。
        - extention　＝ 拡張子という意味の英単語
    - join
        - /を挟んでファイルパスを生成する。
        - p File.join("ruby", "exam","silver")
             - File#joinは、定数FILE::SEPARATOR "/"を使って文字列を連結します。
    - dirname
        - 引数に指定した文字列の一番後ろの/より前の文字列を返します。
    - chmod
        - fileのモードを変更する。
    - chown
        - ファイルのオーナーとグループを変更できる。
    - directory?
        - fileがディレクトリかどうかをtrue/falseで返却する。

- Threadクラス
    - ３つとも新しいスレッドを作成できる。
        - Thread.new
            - startとの違い
                - https://blog.nishimu.land/entry/20081209/1228797519
        - Thread.start
        - Thread.fork
    - スレッドを生成するメソッドの後にブロックを伴わない場合には作成できずThreadErrorを引き起こす

- 正規表現関連メソッド
    - match 
        - 一度マッチしたら処理を終える。
    - scan
        - 繰り返しマッチを行う。

- 正規表現
 - \w 単語構成文字 [a-zA-Z0-9_]
 - \W 非単語構成文字 [^a-zA-Z0-9_]

- IOクラス
    - rewind
        - ファイルポインターを先頭に移動させます。
    - seek
        - 指定した数だけ、ファイルポインタを移動する。 p267
        - IO#seek(offset, whence): ファイルポインタをwhenceからoffsetまで移動します。
            - io.seek(O, IO::SEEK_SET)
                - 先頭から0文字移動させる　＝　ファイルポインタを先頭に移動。
            - io.seek(0, IO::SEEK_CUR)
                - 現在のカーソル位置から0文字移動させる。
    - gets / readline
        - ファイルを一行だけ読み込んで返す。
    - read
        - IO.read ("README.md＂, 5)みたいに読み込む長さを指定できる。
    - readlines
        - ファイルを全て読み込んで、一行ごとに配列の要素にして返す。

- ヒアドキュメント
    - EOSと"EOS"はヒアドキュメント内で式展開を行います。
識別子をシングルクォートで'EOS'囲う場合は式展開は行われず、全て文字列として扱われます。

- p ?A
    - "A"
    - https://docs.ruby-lang.org/ja/latest/doc/symref.html 


# 復習する問題
https://rex.libertyfish.co.jp/exam_histories/44840/user_answers/ca1d0f1a-a6e0-4437-952a-d58690aef7cf
https://rex.libertyfish.co.jp/exam_histories/44840/user_answers/f177e779-195e-4ce7-a474-420cbeee49ae
https://rex.libertyfish.co.jp/exam_histories/44836/user_answers/5a2b0720-9469-42e5-91ea-770247f5ddd1
    - hashのdefault引数はpメソッドでは無視されるらしい。理由は不明...
https://rex.libertyfish.co.jp/exam_histories/44836/user_answers/ad875e00-5901-435d-8b0c-c42a31be2d22
https://rex.libertyfish.co.jp/exam_histories/44836/user_answers/ad5e48ab-f103-446f-850b-477e8c42cc08
https://rex.libertyfish.co.jp/exam_histories/44830/user_answers/26ae2282-00d3-4ea0-ba43-9d651948980b
https://rex.libertyfish.co.jp/exam_histories/44824/user_answers/c8c38cda-9820-4e32-a17e-2930567b35f9
https://rex.libertyfish.co.jp/exam_histories/44770/user_answers/d7ad6621-241a-49ed-89af-8bf92eed51db
https://rex.libertyfish.co.jp/exam_histories/44612/user_answers/6ead8277-c5dd-4e0b-a1d4-22b6675ad847
https://rex.libertyfish.co.jp/exam_histories/44612/user_answers/a5c1e09d-a589-4bd4-9870-383c21d3b3d5


https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0
- 問30、問31、問48、問50

# 参考記事
https://qiita.com/motty93/items/413485469e4ec665c329
https://teratail.com/questions/258497