0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】破壊的な変更!chompとchomp!

Posted at

paizaの解き方記事などみると、chompではなく、chomp!を見ることがあった。
違いを理解したのでアウトプット。

!とは

破壊的な変更
Ruby の String クラスは mutable です。つまり、オブジェクト自体を破壊的に変更できます。
「破壊的な変更」とは、あるオブジェクトの内容自体を変化させることです。
引用:Rubyリファレンス

元々のオブジェクトを変更(破壊!)してしまう。

chompもchomp!も文字末尾の改行を取り除けるメソッド。

【補足】getsなどで受け取った入力は末尾に改行コードが入っている。例↓

irbでの実行結果
string = gets
hello # helloと入力する
=> "hello\n" # \nは改行コード

chompの場合

string = gets     # helloと入力
p string
=> "hello\n"

string.chomp      # stringの末尾改行を取り除く
=> "hello"
p string
=> "hello\n"     # stringオブジェクトは変わらない

new_string = string.chomp    # sringの末尾改行を取り除いたものを変数に代入
p new_string
=> "hello"          # 変数代入すれば末尾改行なしの文字が使える

string = gets.chomp    # 入力段階でchompしておけばstringの末尾改行を取り除ける
p string
=> "hello"

chompは一時的にオブジェクトの改行を取り除けるが、オブジェクト自体から改行を取り除いたわけではない。

chomp!の場合

string = gets     # helloと入力
p string
=> "hello\n"

string.chomp!
=> "hello"
p string
=> "hello"      # stringは改行のない文字列に変わった

new_string = string.chomp!       # 変数代入してももちろん改行は取り除かれたまま
p new_string
=> "hello"

string = gets.chomp!        # 入力時点で文字列から改行を取り除いて変数代入しているので改行はない
p string
=> "hello"

破壊的変更なので、オブジェクト自体を変更させている。

まとめ

今回はchompとchomp!でしたが、!をつけて使用できるメソッドは他にもある。
破壊的な変更(!)をつけたメソッドは使用時注意が必要!
かと言って改行コードがついたままのオブジェクトを使い続けるのもエラーの原因。
使用時にオブジェクトの目的をよく理解することが大事だと学びました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?