はじめに
たいした内容ではないですが、私が謎が解明したとき、深くなるほど~と思ったのと、そこから学んだとこがあったのでまとめてみました
puts "Hello!!!\n\n".chomp の謎
末尾の改行を消すためのchompメソッドやバックスラッシュ記法を説明するためにでてくる下記のようなコード。
test.rb
puts"Hello!!!\n".chomp# => Hello!!!# 改行なし
これどんどんバックスラッシュ記法(\n)増やすとどうなるんだろう?と興味本意で試してみると不思議な現象になることが判明しました!
実際の出力結果
puts"Hello!!!\n".chomp# => Hello!!! 改行なしputs"Hello!!!\n\n".chomp# => Hello!!! 改行なしputs"Hello!!!\n\n\n".chomp# => Hello!!!# 改行puts"Hello!!!\n\n\n\n".chomp# => Hello!!!# 改行# 改行
あれ、なんか改行の数がおもってたのと違う、、、
chompは末尾の改行を消すだからこうなりそうなのに、、、
イメージしてた結果
puts"Hello!!!\n".chomp# => Hello!!! 改行なしputs"Hello!!!\n\n".chomp# => Hello!!!# 改行puts"Hello!!!\n\n\n".chomp# => Hello!!!# 改行# 改行
あれ、\nが1つの時にchompつけなくても改行しない、、、
chompなしの実際の出力結果
puts"Hello!!!\n"# => Hello!!! 改行なし
chompメソッドに何か謎があるのかと悩みましたが、原因はputsメソッドにありました!
(がっつりリファレンスにかいてあった。笑)
改行の謎、解明
putsは改行を加えて出力しますが、末尾が改行で終っている引数や配列の要素に対しては puts 自身は改行を出力しません。
参考リファレンスはこちら。
改行で終わっているときに改行しないのは知らなかった~!!
ちなみにgestメソッドで文字を入力した際も改行のルールは一緒みたいです!
getsの場合の実際の出力結果
input=getsline="--------------------------"putsinputputslineputsinput.chompputslineputsinput+"\n".chompputslineputsinput+"\n\n".chompputslineputsinput+"\n\n\n".chompputsline# apple# --------------------------# apple# --------------------------# apple# --------------------------# apple## --------------------------# apple### --------------------------
今回の件で学んだこと
- 例のコードで遊んでみるのは大事!いろいろ学べること多い!
- なんでだろう?と思ったらまずはリファレンスをチェックする。(使用している全てのメソッドに関して)
とくに二つ目に関しては忘れがちですが、個人的に徹底したい部分
だいたい答えはリファレンスにある。