irb の "i" は、どういう意味か。
「\n」や「\t」などの、「\」と英数字との組み合わせで構成される文字のことをなんというか。
[ "abc", 123, "def", "ghi" ]
このような配列を作ることはできるか?できないか?
文字列オブジェクトをシンボルオブジェクトに変換するときに用いるメソッドは何か。
{ name: "井上" }
このようなオブジェクトをハッシュオブジェクトというが、「ハッシュ」と呼ばれる所以は何か。
/ruby/ =~ str
の結果が「0」のとき、それはどういう意味か。str は文字列オブジェクトとする。
puts name unless name
、このコードが name の値を標準出力するケースは、以下のうちどれとどれか。
- name の値が "井上"
- name の値が空文字列
- name の値が nil
- name の値が true
- name の値が false
一般的に、 ARGV
とはどういう意味(何の略)か。
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つのプログラムについて、どちらがどう優れているか。
def test
end
上記のようなメソッドを実行したとき、どうなるか。
def hello
print "hello"
end
というようなメソッド hello があるとき、 a = hello
とすると a には何が入るか。
いわゆるオブジェクト指向プログラミングにおける「クラス」とはどんなものか。簡潔に説明せよ。 (大きく外れているような説明になっていなければ良いものとする)
いわゆるオブジェクト指向プログラミングにおける「オブジェクト」とはどんなものか。簡潔に説明せよ。 (大きく外れているような説明になっていなければ良いものとする)
Ruby で扱える変数の種類のうち、 @@x
は何変数というか。「x」は変数名とする。
TEST = 1
TEST = 2
このコードを実行したとき、どうなるか。理由も合わせて簡潔に答えよ。
a, *b, c = [ 1,2,3,4,5,6 ]
p [ a, b, c ]
上記のコードを実行したとき、どうなるか。
case item
when String
p "ok"
else
p "ng"
end
これはどういう挙動をするコードか。
case value
when A
p "A"
when B
p "B"
else
p "other"
end
これと同じ挙動をするコードを case - when の代わりに if を用いて書き換えなさい。
変数 a の値が "test" のとき、 a.equal?(b) が true となるような 変数 b を宣言しなさい。
for i in 1...5
p i
end
このコードの実行結果を書きなさい。
i = 1
while i < 3
puts i
i += 1
end
上記のようなコードの出力結果は何か。
names = [ "awk", "Perl", "Python", "Ruby" ]
という配列があったとき、
この配列の値全てを標準出力するようなコードを書きなさい。
ただし、Array#each を用いること。
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
このコードの実行結果を書きなさい
a = 'abc'
b = '123'
a + b
上記のコードのうち、「メソッド」はどれか。
オブジェクト.メソッド(引数)
の構文のうち、「レシーバ」とも呼ばれるものはどれか。
「Array.new」の new、「Time.now」の now などのような呼び出し方のできるメソッドを、何メソッドというか。
def test(a, b)
if a > b
a
else
return b
end
end
上記のようなメソッド test があったとき、test(3,2) としたときの戻り値はなにか。
def test(a, b)
if a > b
return a
end
end
上記のようなメソッド test があったとき、test(3,5) としたときの戻り値はなにか。
def myloop
while true
yield
end
end
上記のようなメソッドが定義されていたとき、下記のような出力を得るコードを書きなさい。 ただし、myloop メソッドを用いること。
1
2
3
4
5
引数の数をあらかじめ決められないようなメソッドを定義する際、引数はどのように定義すれば良いか。
def foo(arg)
p arg
end
上記のようなメソッド foo が定義されているとき、foo(a: 1, b: 2) として foo を呼び出した時の arg は何クラスのオブジェクトか。
def bar(arg1, arg2)
[arg1, arg2]
end
上記のようなメソッド bar が定義されているとき、 bar(a: 1, b: 2, 3)
という呼び出し方は可能か、不可能か。理由も合わせて答えよ。
オブジェクト指向において、既に定義されているクラスを継承することによって新たに作られたクラスのことを、何クラスと呼ぶか。
オブジェクト指向において、既に定義されているクラスを継承し新たなクラスを作ったとき、継承のもととなったクラスのことを何クラスと呼ぶか。
class Test
def number(num)
@n ||= num
end
def output
puts @n
end
end
上記のようなメソッドが定義されているとき、 test = Test.new; test.number(1); test.output
としたときの出力結果はどんなものか。
class Test
attr_writer :number
def initialize(num)
@number = num
end
end
上記のようなクラスが定義されているものとする。このクラスと同等の働きを持つクラスを、 attr_writer
を用いずに定義しなさい。
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 の実装の※の部分に、どのような実装をすればよいか。
HelloWorld.hello('John')
とすることで「John said hello.」と出力されるようなメソッドを持つクラス、HelloWorld を定義しなさい。
下記のコードには問題がある。どのような問題があるか。
class HelloCount
attr_accessor :count
end
HelloCount.count = 5
puts HelloCount.count
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
上記のように実行した場合、最後に得られる出力はなにか。理由も合わせて簡潔に答えよ。
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 メソッド」のうち、どれに属するか。ひとつずつ答えよ。"
あるクラス(Aクラスとする)を継承したクラス(Bクラスとする)において、Aクラスで既に定義されているものと同じ名前のメソッドをBクラスにて再定義したとき、その再定義メソッド内で、Aクラスの元のメソッドを呼び出す際に指定する句はなにか。
既に存在するメソッドに別の名前を割り当てる際に用いる句はなにか。
クラスとモジュールの異なる点として、「モジュールはインスタンスを持つことができない」と、あとひとつはなにか。
include を使い、モジュールに含まれるメソッドや定数をクラスの中に取り込むことをなんというか。
module HelloModule
Version = '1.0'
def version
puts Version
end
end
上記のようなモジュールが定義されているとき、 HelloModule.version
とするとエラーになる。これをエラーとならないようにするには、モジュールをどのように定義すればよいか。
module M
def meth
'M#meth'
end
end
class C
def meth
'C#meth'
end
include M
end
c = C.new
p c.meth
上記のような場合、最後の行の出力としては何が得られるか。理由も合わせて簡潔に答えよ。
オブジェクト指向における「カプセル化」について説明しなさい。
オブジェクト指向における「ポリモルフィズム(ポリモーフィズム)」について説明しなさい。
a = 2
a ||= 3
puts a
上記のようなコードの出力結果は何か。理由も合わせて簡潔に答えよ。
a = 1
b = nil
puts b || a
上記のようなコードの出力結果は何か。
a = 1
b = nil
puts b && a
上記のようなコードの出力結果は何か。
a = 1
b = 2
v = (a > b) ? a : b
p v
上記のようなコードの出力結果は何か。
$ 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 を書け。ただし、行番号については上記と一致していなくてもよい。
def error_test
begin
1 / 0
p '1'
rescue
p '2'
ensure
p '3'
end
end
上記のようなメソッド error_test があるとき、この error_test を呼び出したときに行われる標準出力はどのようなものになるか。
def error_test(number)
p Integer(number) rescue nil
end
上記のようなメソッド error_test があるとき、 error_test('abc')
と呼び出した時の標準出力はどのようなものになるか。
array = ['Ruby', 'Perl', 'PHP', 'Python']
上記のような配列 array の中の文字列を長い順にソートするようなコードを、 Array#sort を用いて書きなさい。"
def total(from, to)
result = 0
from.upto(to) do |num|
result += yield(num)
end
result
end
上記のようなメソッド total が定義されているとき、 total(1,10) { |num| num * 2 }
の実行結果として何が出力されるか。
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 }
の実行結果として何が出力されるか。
x = 1
y = 1
ary = [1, 2, 3]
ary.each do |x|
y = x
end
p [x, y]
上記のようなコードの実行結果として得られる標準出力はどのようなものになるか。
Rational(2, 5)
これは何を表すか。
puts (1 + 1.0).class.name
このコードを実行して得られる標準出力の内容はなにか。
5 / 2
の結果を答えよ。
p 1.1.to_i
このコードを実行して得られる標準出力の内容はなにか。
ソフトウェアでは本物の乱数を作ることができず、計算によって「乱数のように見える値」を作っている。この乱数のことを「擬似乱数」と呼んでいるが、この擬似乱数では、乱数を生成するきっかけとなる値が必要となる。この値のことを、「乱数の何」というか。
a = 0.1 + 0.2
b = 0.3
のとき、 a == b はfalse になる。これは何によるものか。
p [1, 2, 3, 4, 5][-2]
このコードを実行して得られる標準出力の内容はなにか。
p [1, 2, 3, 4, 5][1..3]
このコードを実行して得られる標準出力の内容はなにか。
p [1, 2, 3, 4, 5][1..10]
このコードを実行して得られる標準出力の内容、もしくは結果はなにか。
p [1, 2, 3, 4, 5].values_at(2,3,4)
このコードを実行して得られる標準出力の内容はなにか。
a = [1, 2, 3]
b = [2, 3, 4]
のとき、 p a & b
を実行して得られる標準出力の内容はなにか。
「キュー」「スタック」それぞれに対しての要素の追加・取り出しの特徴を表した「FIFO」「LIFO」であるが、それぞれどちらがどちらの特徴を表した言葉か。
p [1, 2, 3, 4, 5].pop
このコードを実行して得られる標準出力の内容はなにか。
a = [1, 2, 3, 4, 5]
a.pop
p a
このコードを実行して得られる標準出力の内容はなにか。
p [1, 2, 3, 4, 5] << 3
このコードを実行して得られる標準出力の内容はなにか。
「破壊的メソッド」とは、どのような特徴をもつメソッドのことか。
p [1, 2, 3, 4, 5].map{ |a| a * 2 }
このコードを実行して得られる標準出力の内容はなにか。
a = [1, [2, [3]], [4], 5]
上のような配列 a を、下記のような配列にするコードを書きなさい。
p a #=> [1, 2, 3, 4, 5]
p %Q|I am a pen.|
このコードを実行して得られる標準出力の内容はなにか。
n = <<INT
123
INT
p n.class.name
上記のコードを実行して得られる標準出力の内容はなにか。
x = 'abc'
a = x
b = x
a << 'z'
p b
上記のコードを実行して得られる標準出力の内容はなにか。理由も合わせて簡潔に答えよ。
p ('aaaaa' < 'b')
このコードを実行して得られる標準出力の内容はなにか。
puts 'I am a pen.'.upcase
このコードを実行して得られる標準出力の内容はなにか。
h = Hash.new(0)
puts h['key']
上記のコードを実行して得られる標準出力の内容はなにか。理由も合わせて簡潔に答えよ。
puts person_age['feedforce']['a-know'] #=> 33
puts person_age['kaizen']['naoya'] #=> 38
上記のような値を持つ変数 person_age を作成しなさい。
"012\nABC" という文字列の「ABC」の部分にマッチする正規表現は /\AABC/
/^ABC/
のうち、どちらか。
文字列 'aBcabc' に対して、正規表現 /a[^A-B]c/
でマッチする部分はあるか。ある場合、それはどこか。
文字列 'ABBC' に対して、正規表現 /A.C/
でマッチする部分はあるか。ある場合、それはどこか。
文字列 'BC' に対して、正規表現 /A*C/
でマッチする部分はあるか。ある場合、それはどこか。
文字列 'AB CD' に対して、正規表現 /A.*C/
でマッチする部分はあるか。ある場合、それはどこか。
文字列 'AAC' に対して、正規表現 /AAA+C/
でマッチする部分はあるか。ある場合、それはどこか。
文字列 'AAC' に対して、正規表現 /AAA?C/
でマッチする部分はあるか。ある場合、それはどこか。
文字列 'ABCDCBA' に対して、正規表現 /A.*?B/
でマッチする部分はあるか。ある場合、それはどこか。
文字列 'ABCBADCBCD' に対して、正規表現 /^(AB|CD)+$/
でマッチする部分はあるか。ある場合、それはどこか。
/ABC/i =~ "ABCDE"
というようなときの「i」はどういう意味か。
/(.)(.)(.)/ =~ "abc"
p $1
このコードを実行して得られる標準出力の内容はなにか。
p "a@@b@@c@@d@@e".sub(/@+/, '*')
このコードを実行して得られる標準出力の内容はなにか。理由も合わせて簡潔に答えよ。
File.open('foo.txt') do |io|
while line = io.gets
# some operations
end
end
上記のコードに、io.close が無くても問題ないのはなぜか。
hello = Proc.new do |name|
puts "Hello, #{name}."
end
hello.xxx("World") # 実行結果: Hello, World.
上記の通りとなるような結果を得たい場合、xxx はどんなメソッドになるか。
%w(1 2 3).map(&:to_i)
を、Proc.new を用いて同じ動きをするよう、書き換えなさい。