fc2ブログ

2023.09 «  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - - - - » 2023.11
TOP > メソッド名の後にある「!」びっくりマーク・エクスクラメーションマークとは

 ← スタイルシートをインクルードする | TOP | メソッド名の後にある「?」はてなマーク・クエスチョンマークとは

メソッド名の後にある「!」びっくりマーク・エクスクラメーションマークとは 

Rubyで使われる記号の意味より

「!」はメソッド名の一部です。慣用的に、同名の(! の無い)メソッドに比べてより破壊的な作用をもつメソッド(例: tr と tr!)で使われます。



ですって。「!」ビックリを加えることで、メソッドの動作が直接変わる、という訳ではないのですね。

見た目でわかりやすいから、便宜的に「!」ビックリを加えているようです。

ちなみにメソッド名の後にある「?」はてなマーク・クエスチョンマークとはもどうぞ。

ちょっと上の例に出ている tr と tr! の違いを調べてみました。

どれくらい tr! が「破壊的」なのか楽しみです。

hensu = '1234'
p hensu # => "1234"
p hensu.tr('1-3', 'a-c') # => "abc4"
p hensu # => "1234" ※注:自分自身は書き換えられない
p hensu.tr!('1-3', 'a-c') # => "abc4"
p hensu # => "abc4" ※注:自分自身が書き換えられてしまった

hensu = '4444'
p hensu # => "4444"
p hensu.tr('1-3', 'a-c') # => "4444"
p hensu # => "4444" ※注:自分自身は書き換えられない
p hensu.tr!('1-3', 'a-c') # => nil
p hensu # => "4444" ※注:自分自身は書き換えられない。nil に書き換えられる訳でもない



tr も tr! も文字列置換なのですが、tr は自分自身を書き換えることは絶対にしません。

tr! は、置換対象の文字の中に、検索している文字が見つかったら、自分自身もちゃっかり書き換えちゃうようです。

tr! で、検索している文字がもし見つからなかったら、だだをこねて nil を返すけど、ただし自分自身は書き換えないようです。どんだけー。

自分も書き換えちゃうというところが「破壊的」だったようですね。


ちなみに、ほかの例ですと、exit には、「破壊的な」exit! というメソッドも用意されているようですが、exit! はどんだけ「破壊的」かというと、マニュアルによりますと、

exit は、例外SystemExitが発生するので rescue で exit 実行後の処理を続けることができる
exit! は、もうとにかくそこの行で処理を終了する

という特徴があるそうです。

【広告】

[2007.07.27(Fri) 00:07] Rubyの文法Trackback(0) | Comments(1)
↑TOPへ


COMMENT

ごめんなさい【破壊的メソッドについて】 by 自分
> 破壊的メソッドについて、誤解されている(あるいは、誤解を招く記述をされている)ようなので、僭越ながらコメントさせていただ

というご指摘をせっかくしてくださったのに、コメントを間違って消してしまいました。

上記の続きを知らずしてコメントを消してしまったので、大変焦っています。

本当に申し訳ないですが、もう1回ご指摘いただけないでしょうか。

本当にごめんなさい。

自戒の念も含めまして、上記のコメントを基に、このエントリの「破壊的」うんぬんの記述を書き改めてみました。

いかがでしょうか。確かに自分で誤解している部分はありました。ご指摘ありがとうございます。

コメントお待ちしております。

コメントを閉じる▲
 ← スタイルシートをインクルードする | TOP | メソッド名の後にある「?」はてなマーク・クエスチョンマークとは

COMMENT

> 破壊的メソッドについて、誤解されている(あるいは、誤解を招く記述をされている)ようなので、僭越ながらコメントさせていただ

というご指摘をせっかくしてくださったのに、コメントを間違って消してしまいました。

上記の続きを知らずしてコメントを消してしまったので、大変焦っています。

本当に申し訳ないですが、もう1回ご指摘いただけないでしょうか。

本当にごめんなさい。

自戒の念も含めまして、上記のコメントを基に、このエントリの「破壊的」うんぬんの記述を書き改めてみました。

いかがでしょうか。確かに自分で誤解している部分はありました。ご指摘ありがとうございます。

コメントお待ちしております。
[ 2007.09.05(Wed) 00:07] URL | 自分 #dzG/Zdag | EDIT |

COMMENT POST















管理者にだけ表示

 ← スタイルシートをインクルードする | TOP | メソッド名の後にある「?」はてなマーク・クエスチョンマークとは