気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Ruby Silver の問題をirbで確認してみる

Ruby Silver 試験後にちょっと怪しかった問題をirbでの確認してみます。

ord
文字列の最初の文字のコードポイントを返却。
コードポイントとは、1文字を表す整数のコードです。

> "A".ord
=> 65
> "AB".ord
=> 65

文字列[]
この書き方ないだろうと思ったら、あった。。

> "AB"[0]
=> "A"
> "AB"[0..1]
=> "AB"

2文字のupto
普段からのruby使いの人は普通にわかるんだろうな。ちょっと考えた問題。

> "io".upto("ir"){|n| puts n}
io
ip
iq
ir
=> "io"

EOFError
readlineはデータを最後まで読み込んだ後に例外発生する。

def read
  begin
     line = STDIN.readline
  rescue EOFError
  end
end

ensureとexit
exitしてもensure内の処理は実行される。 ensureは強力なり。
exitの後の値はrubyの終了ステータス(0:正常、1:異常)

begin
  exit 0
rescue => e
ensure
  p "終了処理"
end

参考Ruby - exit時にensureが実行されてしまう - Qiita

配列.push()
配列のお尻に引数に指定(複数もカンマ区切りで可能)した値を追加する

> [1,2,3].push(1,2,3)
=> [1, 2, 3, 1, 2, 3]
> [1,2,3].push([1,2,3])
=> [1, 2, 3, [1, 2, 3]]

concat
String,Array両方あり

> s = "Hello"
=> "Hello"
> s.concat(" World!")
=> "Hello World!"
> p s
"Hello World!"

> p [1,2,3].concat([1,2,3])
[1, 2, 3, 1, 2, 3]

Split デフォルト区切り
引数patternのデフォルト値は組み込み変数$;で、初期値はnilのため、 引数省略時は空白文字分割となる。

> "1 2 3".split()
=> ["1", "2", "3"]
> "1,2,3".split()
=> ["1,2,3"]
> "1,2,3".split(//)
=> ["1", ",", "2", ",", "3"]
> "1 2 3".split(//)
=> ["1", " ", "2", " ", "3"]

時間の加算
+演算子で秒単位で加算可能

> t = Time.now
=> 2015-08-19 20:41:35 +0900
> t += 60
=> 2015-08-19 20:42:35 +0900
> t += 1
=> 2015-08-19 20:42:36 +0900

each_index

> animals = ["dog", "cat", "caw"]
=> ["dog", "cat", "caw"]
> animals.each_index {|i| puts "#{i}. #{animals[i]}"}
0. dog
1. cat
2. caw
=> ["dog", "cat", "caw"]

配列 シンボルの新しい書式
シンボルと文字列のKeyはちゃんと区別される。

* hash = {yume: "", kibou: "希望"}
=> {:yume=>"", :kibou=>"希望"}
> hash[:yume]
=> ""
> hash["yume"]
=> nil