Ruby技術面接に向けて #2
概要
#1に引き続き、下記のサイトを利用してRubyの技術面接対策を行います。Q47〜Q53
参考サイト
[Q47] 【まとめ】インスタンス変数、クラス変数、クラスインスタンス変数 - Qiita
[Q49] map, select, collect, each の違いところ - Qiita
[Q52] 【Ruby入門】private と protected の使い方まとめ【メソッドのアクセス制御】 | 初心者向け完全無料プログラミング入門
[Q53] シングルトンパターン(Singleton) | Ruby デザインパターン | 酒と涙とRubyとRailsと 【Rubyによるデザインパターンまとめ10】シングルトンパターン - 銀行員からのRailsエンジニア
調べたことなど
インスタンス変数とクラス変数の違い(Q47)
インスタンス変数:変数の前に@をつけて定義します。オブジェクトの外からは直接変更などができません。なのでinitializeメソッドやインスタンスメソッドからのアクセスはできますが、クラスメソッドからのアクセスはできません
クラス変数:変数の前に@@をつけて定義します。そのクラス全体で共有されます。オブジェクト外から値の変更も可能。
「find」,「find_by」,「where」の違い(Q48)
find:引数とマッチする主キー(id)を持つデータを検索するメソッド。主キー以外の条件では検索できず、エラーが返ってくる。
find_by:主キー以外の条件でも検索でき(主キーも可)、複数の条件を指定できる。同じ条件を持つデータが複数ある場合、最初に見つかったデータ1件のみ取得する
where:検索した条件のデータを配列として取得する。そのため、複数のデータを取得できる。
「select」,「map」,「collect」の違い(Q49)
select:ブロック内の条件に合う要素を探して、ブロック内の処理を実行し戻り値を配列に入れる。もし要素に条件にあうものがなければ空の配列となる。
map:要素の数だけブロックの処理を実行し、その戻り値を配列に入れる。そのため戻り値がない場合はnilが入る。
collect:mapのエイリアス(別名)のためmapと同じ動きをする。
map!は破壊的メソッドで、今ある配列の中身を書き換えます。
a = [1,2,3] a.map{|n| n*3 if n == 1} #=>[3, nil, nil] a #=>[1,2,3] a.map!{|n| n*3 if n == 1} #=>[3, nil, nil] a #=>[3, nil, nil]
select!でも同様です。
CRUDのHTTP verb(動詞、メソッド)とそれに対応するアクション(Q50)
HTTP verb | アクション |
---|---|
GET | index |
GET | new |
POST | create |
GET | show |
PATCH/PUT | update |
DELETE | destroy |
Rubyの3段階のアクセス制御に関して(Q52)
Rubyではクラスの中のメソッドを外部から直せるアクセスできないように制御する設定することができます。
public:デフォルトで設定されている任意のオブジェクトから呼び出せます=>制御しない設定です
private:設定されたメソッドは関数形式でしか呼び出せません。そのオブジェクト自身=>同じインスタンスからしか見えない設定です。レシーバーを指定できません。
protected:クラスの外からは呼び出せません。他のインスタンスでも同じクラスやサブクラスなら呼び出せます。
正直この問題に関してはまだ曖昧さが残っており、他のサイトなどの例などを見ながら理解していきたいと思います。
シングルトンとは(Q53)
シングルトンパターンを提供するモジュール。 シングルトンパターンとはクラスにインスタンスを1つしか持たせないデザインパターン。アプリケーションで一度しか使わないインスタンスを設定することができるので、newメソッドをprivateメソッドに設定して新しくインスタンスを作れなくします。