たのしい Ruby 達成度確認テスト
問1
irb の "i" は、どういう意味か。
問2
「\n」や「\t」などの、「\」と英数字との組み合わせで構成される文字のことをなんというか。
問3
[ "abc", 123, "def", "ghi" ]
このような配列を作ることはできるか?できないか?
問4
文字列オブジェクトをシンボルオブジェクトに変換するときに用いるメソッドは何か。
問5
{ name: "井上" }
このようなオブジェクトをハッシュオブジェクトというが、「ハッシュ」と呼ばれる所以は何か。
問6
/ruby/ =~ str
の結果が「0」のとき、それはどういう意味か。str は文字列オブジェクトとする。
問7
puts name unless name
、このコードが name の値を標準出力するケースは、以下のうちどれとどれか。
- name の値が "井上"
- name の値が空文字列
- name の値が nil
- name の値が true
- name の値が false
問8
一般的に、 ARGV
とはどういう意味(何の略)か。
問9
file = File.open(filename)
text = file.read
print text
file.close
と
file = File.open(filename)
file.each_line do |line|
print line
end
file.close
これら2つのプログラムについて、どちらがどう優れているか。
問10
def test
end
上記のようなメソッドを実行したとき、どうなるか。
問11
def hello
print "hello"
end
というようなメソッド hello があるとき、 a = hello
とすると a には何が入るか。
問12
いわゆるオブジェクト指向プログラミングにおける「クラス」とはどんなものか。簡潔に説明せよ。 (大きく外れているような説明になっていなければ良いものとする)
問13
いわゆるオブジェクト指向プログラミングにおける「オブジェクト」とはどんなものか。簡潔に説明せよ。 (大きく外れているような説明になっていなければ良いものとする)
問14
Ruby で扱える変数の種類のうち、 @@x
は何変数というか。「x」は変数名とする。
問15
TEST = 1
TEST = 2
このコードを実行したとき、どうなるか。理由も合わせて簡潔に答えよ。
問16
a, *b, c = [ 1,2,3,4,5,6 ]
p [ a, b, c ]
上記のコードを実行したとき、どうなるか。
問17
case item
when String
p "ok"
else
p "ng"
end
これはどういう挙動をするコードか。
問18
case value
when A
p "A"
when B
p "B"
else
p "other"
end
これと同じ挙動をするコードを case - when の代わりに if を用いて書き換えなさい。
問19
変数 a の値が "test" のとき、 a.equal?(b) が true となるような 変数 b を宣言しなさい。
問20
for i in 1...5
p i
end
このコードの実行結果を書きなさい。
問21
i = 1
while i < 3
puts i
i += 1
end
上記のようなコードの出力結果は何か。
問22
names = [ "awk", "Perl", "Python", "Ruby" ]
という配列があったとき、
この配列の値全てを標準出力するようなコードを書きなさい。
ただし、Array#each を用いること。
問23
names = [ "awk", "Perl", "Python", "Ruby" ]
i = 0
names.each do |name|
i += 1
puts name
if i == 1
next
elsif i == 2
redo
elsif i == 3
break
end
end
このコードの実行結果を書きなさい
問24
a = 'abc'
b = '123'
a + b
上記のコードのうち、「メソッド」はどれか。
問25
オブジェクト.メソッド(引数)
の構文のうち、「レシーバ」とも呼ばれるものはどれか。
問26
「Array.new」の new、「Time.now」の now などのような呼び出し方のできるメソッドを、何メソッドというか。
問27
def test(a, b)
if a > b
a
else
return b
end
end
上記のようなメソッド test があったとき、test(3,2) としたときの戻り値はなにか。
問28
def test(a, b)
if a > b
return a
end
end
上記のようなメソッド test があったとき、test(3,5) としたときの戻り値はなにか。
問29
def myloop
while true
yield
end
end
上記のようなメソッドが定義されていたとき、下記のような出力を得るコードを書きなさい。 ただし、myloop メソッドを用いること。
1
2
3
4
5
問30
引数の数をあらかじめ決められないようなメソッドを定義する際、引数はどのように定義すれば良いか。
問31
def foo(arg)
p arg
end
上記のようなメソッド foo が定義されているとき、foo(a: 1, b: 2) として foo を呼び出した時の arg は何クラスのオブジェクトか。
問32
def bar(arg1, arg2)
[arg1, arg2]
end
上記のようなメソッド bar が定義されているとき、 bar(a: 1, b: 2, 3)
という呼び出し方は可能か、不可能か。理由も合わせて答えよ。
問33
オブジェクト指向において、既に定義されているクラスを継承することによって新たに作られたクラスのことを、何クラスと呼ぶか。
問34
オブジェクト指向において、既に定義されているクラスを継承し新たなクラスを作ったとき、継承のもととなったクラスのことを何クラスと呼ぶか。
問35
class Test
def number(num)
@n ||= num
end
def output
puts @n
end
end
上記のようなメソッドが定義されているとき、 test = Test.new; test.number(1); test.output
としたときの出力結果はどんなものか。
問36
class Test
attr_writer :number
def initialize(num)
@number = num
end
end
上記のようなクラスが定義されているものとする。このクラスと同等の働きを持つクラスを、 attr_writer
を用いずに定義しなさい。
問37
class Test
attr_accessor :number
def set_number(number)
(※)
end
def output
puts number
end
end
上記のようなクラスが定義されているものとする。このとき、 test = Test.new; test.set_number(5); test.output
としたときの出力を「5」にするためには、
Test#set_number の実装の※の部分に、どのような実装をすればよいか。
問38
HelloWorld.hello('John')
とすることで「John said hello.」と出力されるようなメソッドを持つクラス、HelloWorld を定義しなさい。
問39
下記のコードには問題がある。どのような問題があるか。
class HelloCount
attr_accessor :count
end
HelloCount.count = 5
puts HelloCount.count
問40
class HelloCount
@@count = 0
def HelloCount.count
@@count
end
def initialize(myname = 'Ruby')
@name = myname
end
def hello
@@count += 1
puts "Hello, world. I am #{@name}\n"
end
end
上記のようなクラスが定義されているとき、
bob = HelloCount.new('Bob')
alice = HelloCount.new('Alice')
ruby = HelloCount.new
bob.hello
alice.hello
ruby.hello
p HelloCount.count
上記のように実行した場合、最後に得られる出力はなにか。理由も合わせて簡潔に答えよ。
問41
class HelloCount
@@count = 0
def initialize(myname = 'Ruby')
@name = myname
end
def hello
@@count += 1
puts "Hello, world. I am #{@name}\n"
end
def goodbye
puts "Good bye, #{@name}\n"
end
public :goodbye
private
def count_reset
@@count = 0
end
end
上記のようなクラスが定義されているとき、 initialize
hello
goodbye
count_reset
のそれぞれは、「public メソッド」「private メソッド」「protected メソッド」のうち、どれに属するか。ひとつずつ答えよ。"
問42
あるクラス(Aクラスとする)を継承したクラス(Bクラスとする)において、Aクラスで既に定義されているものと同じ名前のメソッドをBクラスにて再定義したとき、その再定義メソッド内で、Aクラスの元のメソッドを呼び出す際に指定する句はなにか。
問43
既に存在するメソッドに別の名前を割り当てる際に用いる句はなにか。
問44
クラスとモジュールの異なる点として、「モジュールはインスタンスを持つことができない」と、あとひとつはなにか。
問45
include を使い、モジュールに含まれるメソッドや定数をクラスの中に取り込むことをなんというか。
問46
module HelloModule
Version = '1.0'
def version
puts Version
end
end
上記のようなモジュールが定義されているとき、 HelloModule.version
とするとエラーになる。これをエラーとならないようにするには、モジュールをどのように定義すればよいか。
問47
module M
def meth
'M#meth'
end
end
class C
def meth
'C#meth'
end
include M
end
c = C.new
p c.meth
上記のような場合、最後の行の出力としては何が得られるか。理由も合わせて簡潔に答えよ。
問48
オブジェクト指向における「カプセル化」について説明しなさい。
問49
オブジェクト指向における「ポリモルフィズム(ポリモーフィズム)」について説明しなさい。
問50
a = 2
a ||= 3
puts a
上記のようなコードの出力結果は何か。理由も合わせて簡潔に答えよ。
問51
a = 1
b = nil
puts b || a
上記のようなコードの出力結果は何か。
問52
a = 1
b = nil
puts b && a
上記のようなコードの出力結果は何か。
問53
a = 1
b = 2
v = (a > b) ? a : b
p v
上記のようなコードの出力結果は何か。
問54
$ ruby test.rb
test.rb:3:in `read': No such file or directory @ rb_sysopen - /no/file (Errno::ENOENT)
from test.rb:3:in `initialize'
from test.rb:7:in `new'
from test.rb:7:in `<main>'
実行すると上記のようなエラーメッセージが出るような test.rb を書け。ただし、行番号については上記と一致していなくてもよい。
問55
def error_test
begin
1 / 0
p '1'
rescue
p '2'
ensure
p '3'
end
end
上記のようなメソッド error_test があるとき、この error_test を呼び出したときに行われる標準出力はどのようなものになるか。
問56
def error_test(number)
p Integer(number) rescue nil
end
上記のようなメソッド error_test があるとき、 error_test('abc')
と呼び出した時の標準出力はどのようなものになるか。
問57
array = ['Ruby', 'Perl', 'PHP', 'Python']
上記のような配列 array の中の文字列を長い順にソートするようなコードを、 Array#sort を用いて書きなさい。"
問58
def total(from, to)
result = 0
from.upto(to) do |num|
result += yield(num)
end
result
end
上記のようなメソッド total が定義されているとき、 total(1,10) { |num| num * 2 }
の実行結果として何が出力されるか。
問59
def total(from, to, &proc)
result = 0
from.upto(to) do |num|
result += proc.call(num)
end
result
end
上記のようなメソッド total が定義されているとき、 total(1,10) { |num| num * 3 }
の実行結果として何が出力されるか。
問60
x = 1
y = 1
ary = [1, 2, 3]
ary.each do |x|
y = x
end
p [x, y]
上記のようなコードの実行結果として得られる標準出力はどのようなものになるか。
問61
Rational(2, 5)
これは何を表すか。
問62
puts (1 + 1.0).class.name
このコードを実行して得られる標準出力の内容はなにか。
問63
5 / 2
の結果を答えよ。
問64
p 1.1.to_i
このコードを実行して得られる標準出力の内容はなにか。
問65
ソフトウェアでは本物の乱数を作ることができず、計算によって「乱数のように見える値」を作っている。この乱数のことを「擬似乱数」と呼んでいるが、この擬似乱数では、乱数を生成するきっかけとなる値が必要となる。この値のことを、「乱数の何」というか。
問66
a = 0.1 + 0.2
b = 0.3
のとき、 a == b はfalse になる。これは何によるものか。
問67
p [1, 2, 3, 4, 5][-2]
このコードを実行して得られる標準出力の内容はなにか。
問68
p [1, 2, 3, 4, 5][1..3]
このコードを実行して得られる標準出力の内容はなにか。
問69
p [1, 2, 3, 4, 5][1..10]
このコードを実行して得られる標準出力の内容、もしくは結果はなにか。
問70
p [1, 2, 3, 4, 5].values_at(2,3,4)
このコードを実行して得られる標準出力の内容はなにか。
問71
a = [1, 2, 3]
b = [2, 3, 4]
のとき、 p a & b
を実行して得られる標準出力の内容はなにか。
問72
「キュー」「スタック」それぞれに対しての要素の追加・取り出しの特徴を表した「FIFO」「LIFO」であるが、それぞれどちらがどちらの特徴を表した言葉か。
問73
p [1, 2, 3, 4, 5].pop
このコードを実行して得られる標準出力の内容はなにか。
問74
a = [1, 2, 3, 4, 5]
a.pop
p a
このコードを実行して得られる標準出力の内容はなにか。
問75
p [1, 2, 3, 4, 5] << 3
このコードを実行して得られる標準出力の内容はなにか。
問76
「破壊的メソッド」とは、どのような特徴をもつメソッドのことか。
問77
p [1, 2, 3, 4, 5].map{ |a| a * 2 }
このコードを実行して得られる標準出力の内容はなにか。
問78
a = [1, [2, [3]], [4], 5]
上のような配列 a を、下記のような配列にするコードを書きなさい。
p a #=> [1, 2, 3, 4, 5]
問79
p %Q|I am a pen.|
このコードを実行して得られる標準出力の内容はなにか。
問80
n = <<INT
123
INT
p n.class.name
上記のコードを実行して得られる標準出力の内容はなにか。
問81
x = 'abc'
a = x
b = x
a << 'z'
p b
上記のコードを実行して得られる標準出力の内容はなにか。理由も合わせて簡潔に答えよ。
問82
p ('aaaaa' < 'b')
このコードを実行して得られる標準出力の内容はなにか。
問83
puts 'I am a pen.'.upcase
このコードを実行して得られる標準出力の内容はなにか。
問84
h = Hash.new(0)
puts h['key']
上記のコードを実行して得られる標準出力の内容はなにか。理由も合わせて簡潔に答えよ。
問85
puts person_age['feedforce']['a-know'] #=> 33
puts person_age['kaizen']['naoya'] #=> 38
上記のような値を持つ変数 person_age を作成しなさい。
問86
"012\nABC" という文字列の「ABC」の部分にマッチする正規表現は /\AABC/
/^ABC/
のうち、どちらか。
問87
文字列 'aBcabc' に対して、正規表現 /a[^A-B]c/
でマッチする部分はあるか。ある場合、それはどこか。
問88
文字列 'ABBC' に対して、正規表現 /A.C/
でマッチする部分はあるか。ある場合、それはどこか。
問89
文字列 'BC' に対して、正規表現 /A*C/
でマッチする部分はあるか。ある場合、それはどこか。
問90
文字列 'AB CD' に対して、正規表現 /A.*C/
でマッチする部分はあるか。ある場合、それはどこか。
問91
文字列 'AAC' に対して、正規表現 /AAA+C/
でマッチする部分はあるか。ある場合、それはどこか。
問92
文字列 'AAC' に対して、正規表現 /AAA?C/
でマッチする部分はあるか。ある場合、それはどこか。
問93
文字列 'ABCDCBA' に対して、正規表現 /A.*?B/
でマッチする部分はあるか。ある場合、それはどこか。
問94
文字列 'ABCBADCBCD' に対して、正規表現 /^(AB|CD)+$/
でマッチする部分はあるか。ある場合、それはどこか。
問95
/ABC/i =~ "ABCDE"
というようなときの「i」はどういう意味か。
問96
/(.)(.)(.)/ =~ "abc"
p $1
このコードを実行して得られる標準出力の内容はなにか。
問97
p "a@@b@@c@@d@@e".sub(/@+/, '*')
このコードを実行して得られる標準出力の内容はなにか。理由も合わせて簡潔に答えよ。
問98
File.open('foo.txt') do |io|
while line = io.gets
# some operations
end
end
上記のコードに、io.close が無くても問題ないのはなぜか。
問99
hello = Proc.new do |name|
puts "Hello, #{name}."
end
hello.xxx("World") # 実行結果: Hello, World.
上記の通りとなるような結果を得たい場合、xxx はどんなメソッドになるか。
問100
%w(1 2 3).map(&:to_i)
を、Proc.new を用いて同じ動きをするよう、書き換えなさい。