超初心者がエンジニアになるまでの力戦奮闘の軌跡

プログラミングをメインで学んだことのアウトプットブログ

技術面接に向けて #1

技術面接に向けて

転職活動を開始して約一ヶ月、自己分析や職務経歴書、履歴書についてはいろいろ対応してきましたが、エンジニア職は技術面接がある企業が多いのでそちらの対策も必要になってきました。

自分はRailsポートフォリオを作ったので技術面接もRubyをメインに想定して対策していきたいと考えています。

利用したサイト

techracho.bpsinc.jp ↑プログラミングスクールでもこちらのサイトを勧められたので、こちらの質問に答えられるようにまずはなろうと考えました。

参考サイト

[Q42] ぢみへんプログラミング日誌 Rubyにおける多重代入について

[Q43] Rubyのextendメソッドの使い方を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン

[Q44] Rubyのmoduleの使い方とメリットを理解して脱初心者!|TECH PLAY Magazine [テックプレイマガジン]

[Q45] 【Rails】 モデルのスコープ機能(scope)の使い方を1から理解する | Pikawaka

調べたことなど

Q41までは事前に終えていたのでQ42以降の問いで調べたことをまとめていきたいと思います。

splat演算子について(Q42)

splat演算子は、メソッドに渡される引数の数を事前に決めておきたくない場合に使われます。Rubyにはsplat演算子*とdouble splat演算子**の2種類があります。

一度も見かけたことがなかったので難しそうと思いましたが調べてみるとそうでもありませんでした。

spalt演算子を使うことによってメソッドの引数が可変できるようになり、配列として引数に渡されます

def spl(*a)
  a.each {|x| puts x }
end

spl(1,2)

# => 1
# => 2
# => [1, 2]

特徴的な点として引数に何も渡さなくてもエラーは起こらず、空の配列が渡されます。

def spl(*a)
  a.each {|x| puts x }
end

spl(1,2)
1
2
=> [1, 2]

spl
# => [ ]

double splat演算子**もspalt演算子と似ていますが、こちらは配列ではなく引数にキーバリューを取ります。

def double(**x)
  x.each {|k,v| puts v }
end

double('a':1, 'b':2)
# => 1
# => 2
# => {:a=>1, :b=>2}

double
# => {}

includeとextendの違いについて(Q43)

どちらもミックスインでモジュールの機能を追加するために使われるものです。

違いはincludeメソッドは「あるクラスにモジュールを取り組む際に使用する」のでインスタンスメソッドとしてアクセスしますが、extendメソッドは「オブジェクトに取り組まれた後で呼び出す」のでクラスメソッドとしてアクセスします。

loadとrequireの違い(Q44)

どちらもファイルを読み込みますが、

  • loadの場合、何回でも同じファイルを読み込むことができますが、ファイルの拡張子.rbの記述が必要となります。(例:'./test.rb')

  • requireの場合、1つのファイルは一度だけ読み込むことができ、ファイルの拡張子.rbの記述は必要ありません。(例:'./test')

クラスとモジュールの違い(Q45)

  • クラスはインスタンスを生成でき、継承することができます

  • モジュールはインスタンスを生成できませんが、他のモジュールやクラスにミックスインできます

スコープについて(Q46)

スコープをモデルなどで設定することで、よく使用されるクエリを定義できます。 それにより、定義したクエリロジックをいろいろな箇所でよびだせるようになり、コードが短くなったり、修正する場合にスコープのロジックを変更するだけで良かったりします。

今回はここまで