文法、オブジェクト指向、組み込みライブラリ、実行環境の知識に標準添付ライブラリ知識やアプリケーション設計に必要となるクラスやオブジェクトに関する知識などRubyによるプログラム設計技術を問います。
この模擬問題集は、CTCテクノロジーのオリジナルです。
問題は四択で10問ずつ合計60問あります。各問題には解答がついていますが、はじめは閉じた状態でトライしてみてください。
10問毎に「終了/採点」ボタンをクリックすると採点ができます。次の10問へお進みください。繰り返しトライすることも可能です。
[コード] class Foo def bar(obj=nil) __(1)__ end private def foo puts "foo" end end Foo.new.bar(Foo.new)
[実行結果] foo
private以降で定義されたメソッドはそのクラス、またはサブクラス内でのみ使用することができます。 そのメソッドを使用する時にはレシーバを指定することができません。
[コード] class Foo def foo __(1)__.bar end def bar puts "bar" end end Foo.new.foo
[実行結果] bar
クラス内で定義したメソッドは、そのクラスのインスタンスから呼び出すことができます。 インスタンスメソッド内で「self」というキーワードを使用すれば、メソッドを呼び出したオブジェクト自身を参照することができます。 「it」、「this」といったキーワードはありません。
[コード] class Hello def greet "Hello " end end class World < Hello def greet __(1)__ + "World" end end puts World.new.greet
[実行結果] Hello World
親クラスの同名のメソッドを子クラスから呼び出す場合は「super」というキーワードを使用します。
[コード] a, *b = *[1, 2, 3] p a p b
以下のように変数に値を代入することができます。 a, b = 1, 2 p a #=> 1 p b #=> 2 また、配列の頭に「*」を付けると要素を展開することができます。 代入式の左辺の変数の先頭に「*」を指定すると複数の要素を配列に集約して受け取ることができます。
[コード] module M CONST = "HELLO" end puts __(1)__
[実行結果] HELLO
定数にアクセスする場合「::」という記号を使用します。 モジュールによって定数の名前空間が分かれておりますので、「モジュール::定数」の形式でアクセスします。 また、モジュールやクラスなどの定義の一番外側の領域をトップレベルと呼びます。 トップレベルより定数にアクセスする場合は「::モジュール::定数」という形式でアクセスすることができます。
[コード] class Error1 < StandardError; end class Error2 < Error1; end begin raise Error2 rescue Error1 => ex puts ex.class end
rescue節で捕捉できる例外は、指定した例外クラスと、そのクラスのサブクラスです。 この場合、捕捉する例外としてError1を指定していますが、Error1のサブクラスとして定義されたError2の例外がraiseメソッドで発生されているため、Error2の例外を捕捉することができます。
ENVは環境変数を表すオブジェクトです。 ARGVはコマンドライン引数を表すオブジェクトです。 ARGFはコマンドライン引数に指定されたファイルを表すオブジェクトです。
[コード] class Foo def foo puts "foo" end end __(1)__
[実行結果] foo
クラス内で定義したメソッドはインスタンスメソッドになります。 インスタンスメソッドは「オブジェクト.メソッド」の形式で呼び出すことができます。 オブジェクトは「クラス.new」で生成することができますので、連続して指定すると「クラス.new.メソッド」という指定になります。
[コード] class Foo def bar(obj=nil) __(1)__ end protected def foo puts "foo" end end Foo.new.bar(Foo.new)
[実行結果] foo
protected以降で定義されたメソッドは、そのクラスとサブクラスのインスタンスから呼び出すことができます。 しかし、クラスをレシーバとして呼び出すことはできませんので、「Foo.foo」ではエラーになります。