2013年6月9日日曜日

Ruby技術者試験(Silver)自分用まとめ

公式サイト掲載の出題範囲を元に、出題予想問題の間違いやすいところのまとめ。

【実行環境】
   * 実行方法
   * コマンドラインオプション
  → ARGV[0]とか、コマンドライン引数の拾い方。
   * 環境変数
   * irb

【文法】
   * コメント
   * リテラル
  → ヒアドキュメント。
    「-」の 有無で、終了キーワードのインデント可否を問う。
  → ””と’’の違い。
    「”#hoge”」は式展開され、直前の変数hogeの値が文字列出力される。
    あと、「"hoge" 'hoge'」のように空白挟んでも一文字列となる。
    0で始まるのは8進数。
    'hoge'を%q!hoge!と指定できる。!を'として扱うという意味。
    ?\nだと\nの文字コードが出力される。
             指数表現について、3e-2 は 3.0*10-2乗を表す。
  → 正規表現
    最低これだけ以下だけ覚えておく。
    []は中に列挙した、いずれかの文字にマッチする。
    [^]がついた場合、括弧内に列挙されていない文字にマッチする。  
    \Aは文字列の先頭を指定する。
    \Zは文字列の末尾を指定する。
    \Sは空白以外。
    String#scan

   * 変数/定数とスコープ
  → (ローカル変数)頭文字が英字小文字か_、二文字目以降が英数字。
  → 問題「偽になるものを選べ」・・・nil、false
  → 問題「コード例外が発生しないものを選べ」
    スコープに注意。以下パターン参考。
    a) 変数が参照できずNameError例外が発生する
    b) 代入は実行されないが、宣言のみ有効となり、変数の中身はnil
    c) ブロック外の宣言、ブロック内で代入は可能
    d) 宣言されていない変数の自己代入は不可
    e) ブロック内で宣言した変数はそのブロック内のみ有効

   * 演算子
  → 再定義できないのは、=、?:、..、…、&&、and、||、orなど。
    私見だけど、基礎的な構文(C言語とかにもあるような)は再定義不可か。
    Arrayだと+、[]、<=>とかは再定義できる。
   * 条件分岐
   * ループ
   * 例外処理
  → begin/rescue/ensure
   * メソッド呼び出し
   * ブロック
   * メソッド定義
   * クラス定義
   * モジュール定義

【組み込みライブラリ】
   * 組み込み関数
   * 組み込みクラス
  → eqlとequalの差。
    eqlが値比較でequalはアドレス比較。
  → hashとarrayのメソッド。
    似てるの多いけどindex使う関数なんかはhashにはないので注意。
  → Arrayクラス頻出メソッド。
    map/collect
    &
    concat
    compact
    find/detect
    inject
    delete
    reject
    -
    |
    +
    slice
    join
    sort (<=>(大小比較)の定義が必要)
  → Hashクラス頻出メソッド
    length
    invert
    delete_if
    clear
    invert
  → Stringクラス頻出メソッド
    index
    delete(範囲指定)
    split
    chomp
    chop
    -はないので注意
  → Fileクラス頻出メソッド
    dirname
    open(引数)
    seek
    join
  → Dirクラス頻出メソッド
    glob 
  → IOクラス頻出メソッド
    seek
  → Timeクラス頻出メソッド
    strftime(書式指定文字列)
    %Y年(4桁)と%y(年2桁)
    %m月
    %M分

【オブジェクト指向】
   * ポリモルフィズム
   * 継承
  → class huge < object ; end
 * mix-in
  → includeメソッドで複数のモジュールをクラスに取り込むことができる
  → extendメソッドで特定のオブジェクトにモジュールを取り込むことができる

こんなもんかな?
とりあえず以上。