LoginSignup
0
0

More than 5 years have passed since last update.

8日目(2):Ruby認定試験

Posted at

ioクラスメソッド:実行結果を

※ファイルdataの内容はabcdefg

File.open("data") do |io|
  while not io.eof?
    print io.read(1)
    io.seek(0,IO::SEEK_SET)
  end
end

#答え
aが表示され続ける

CPUが6割、メモリ6GB食われてたので、ちょっと焦りました。
キャプチャ.JPG

EOFとは

End of Fileの略

ioクラスメソッド、SEEK_SET

参考:instance method IO#seek

ファイルポインタを whence の位置から offset だけ移動させます。 offset 位置への移動が成功すれば 0 を返します

ファイル上の文字にポインタなる住所のようで住所じゃないものがある。らしい
今回は、io.seek(0,IO::SEEK_SET)でオフセットを0に指定しているため、
文字の読み込みが最初のaからすすまない(ずっとaが読み込まれる)らしい

strgtime:実行結果にあう、選択肢を選べ

#問題
t = Time.gm(1970,1,1)
puts t.strftime("#ここに代入する式を選択")
#実行結果
1970/01/01
#選択肢
1, %y/%m/%d   ,2, %Y/%M/%d
3, %y/%M/%d      ,4, %Y/%m/%d

#答え
4

strgtimeメソッド

instance method Time#strftime
少しずつ覚えるしかないようだ。

strgtimeで代表的なもの

1 2 3 4 5 6 7
4桁の西暦 2桁の西暦 時刻
%Y %y %m %d %H %M %S

正規表現:

Newまたはnewのみで構成される行にマッチする正規表現を選びなさい。(二つ選択

#選択肢
^[Nn]ew$
^N|new$
^[Nn][e][w]$
^New|new$
^[New]|[new]$

#答え 1と3

正規表現

正規表現もさっぱりなので、授業の無い、土日月に理解したい

Rubyの予約語:予約語を選べ

#問題
while   rand
goto   class   const

#答え whileとclass

予約語

既にruby側で定義されている言葉。自分で使おうとしても使えない。

to_s :実行結果をかけ

#問題
x = 0
[1,2,3].each do |x|
 print x.to_s + " "
end

puts x

#解答 1  2  3  0
(1,2,3は表示上は数字型だか、実は文字型)

to_s :整数型データを文字型に変換する

検証コード

x = 0
[1,2,3].each do |x|
  print x.to_s + " "
  print x.to_s.class
end
puts x

#実行結果
irb(main):001:0> x = 0
[=> 0
1irb(main):002:0> [1,2,3].each do |x|
 irb(main):003:1*   print x.to_s + " "
irb(main):004:1>   print x.to_s.class
irb(main):005:1> o_s.class
irb(main):005:1> end
irb(main):005:1> end1 String2 String3 String=> [1, 2, 3]
irb(main):006:0> puts x
0
=> nil
#不思議

Rubyの偽の値

#問題
nil  0   ""
false  0.0   NULL

#解答  nil と  false

これも記憶

例外処理: 適切な選択肢を

#問題
y = false
y ##AAA## (raise "failed")
puts("succeeded!")
#選択肢
1, |  ,2, ||   ,3, &    ,4, &&

#答え   &&

&&演算子

&&演算子は左辺の評価結果がfalseの場合は、右辺を評価せずに次の処理に進む
|| 演算子は、左辺の評価結果がtrue の場合は、右辺を評価せずに次の処理に進む
|演算子と&演算子は、左辺の評価結果に関係なく、右辺を評価する

raise 例外

raiseは例外を投げるので、それ以降の処理を飛ばす
それを捕捉したい場合は、begin rescue endを使う

今回の場合、raiseが実行されるとputs("succeeded!")が実行されないのを、考慮

範囲オブジェクト:1から10まで表示sるコードを選べ

(1.10).each do |i| puts i end
(1..10).each do |i| puts i end
(1...10).each do |i| puts i end
(1....10).each do |i| puts i end

#答え 2

範囲オブジェクト

定義されているのは、点2つと点3つ。
2つは2から10以下 、3つは2から10未満

gsub! :実行するとどうなる

#問題
HOGE = "hoge"
HOGE.gsub!("hoge", "piyo")
print HOGE

#答え  警告は発生せず、「piyo」が表示される。

gsub! :破壊的メソッド

アルファベット大文字で始まる識別子は定数は定数なので、新たに代入を行う際には警告が発生します。
しかし、gsub!は破壊的メソッドを呼び出しているだけなので、警告は発生せず、文字列は「piyo」に書き換わります。

例外:正しい記述を選べ

#問題
1, beginによって例外を捕捉する際は、例外の可能性がある処理をbeginからrescueの間に記述する。
2, ひとつの処理に対して複数のrescueは、指定できない。
3, 例外オブジェクトのメソッドstacktraceにより、例外スタックを取得できる。
4, ensureは、必ず記述する必要がある

#答えは1

stacktraceとは

参考:

エラーが発生したときに表示される内容で、そのエラーが発生するまでの過程(どんな処理がどの順番で呼び出されたかの流れ)を、ざっくりと表示したもの

エラーコード

以下のコードの##AAA##にZeroDivisionError が発生した時の処理を記述したい。適切なコードを選択

#問題
begin
  puts 10 / 0 #ZeroDivisionError
  ##AAA##
  print "ZeroDivisionException:", ex.message
end
#選択肢
1, rescue ZeroDivisionError = ex
2, rescue ZeroDivisionError ex
3, rescue ZeroDivisionError -> ex
4, rescue ZeroDivisionError => ex

#答え 3

試してみて

begin
  puts "hello"
  puts 10 / 0
  puts "good afternoon"
  puts "good afternoon"
  puts "good afternoon"
  puts "good afternoon"
  puts "good afternoon"
  puts "good afternoon"
  rescue ZeroDivisionError => ex
    puts "good bye"
    print "ZeroDivisionException:", ex.message
end
begin
  puts "hello"
  puts 10 / 0
  puts "good afternoon"
  puts "good afternoon"
  puts "good afternoon"
  puts "good afternoon"
  puts "good afternoon"
  puts "good afternoon"
  rescue Exception => ex
    puts "good bye1111111"
    print "message:", ex.message
  rescue ZeroDivisionError => ex
    puts "good bye2222222"
    print "ZeroDivisionException:", ex.message
end

参考:Ruby 例外について

?A : コード実行どうなる

#問題
p ?A

#答え "A"

解説コード

#コード1 
p "A".ord
#出力
65
#コード2
p 65.chr 
#出力
"A"

65とは

unicode上のAの番号的な
参考:Ruby にて文字と Unicode コードポイントの相互変換を行う

今回も、なるほど!よくわからん、が多い 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0