Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

書籍 Ruby Cookbook | Immutable MethodとDestroy Method

パンくず

Ruby Cookbook
Immutable MethodとDestroy Method

概要

Immutable MethodとDestroy Method

Immutable MethodとDestroy Method

Immutable Method=不変なメソッド
Destroy Method=破壊的なメソッド

前者はオブジェクトの値を変えない。
後者はオブジェクトの値を変えます。

Rubyでは破壊的なメソッドにエクスクラメーションマーク(!)
をつけます。

サンプル

hoge = "hoge?"
puts hoge.chop # => immutableなメソッドで最後の一文字を除去
puts hoge # => オブジェクトに変更が加わっていない
puts hoge.chop! # => destroyなメソッドで最後の一文字を除去
puts hoge # => オブジェクトに変更が加わっている
puts "---------------------------------------------"

# 自作クラスに破壊的なメソッドを実装
class Hoge
  attr_accessor:hoge
  def initialize(hoge);@hoge=hoge;end
  def replace_o_to_a;return @hoge.gsub('o','a');end
  def replace_o_to_a!;return @hoge = @hoge.gsub('o','a');end
end

hoge = Hoge.new("hoge")
puts hoge.replace_o_to_a # => immutableなメソッドでoをaに置換
puts hoge.hoge # => オブジェクトに変更が加わっていない
puts hoge.replace_o_to_a! # => destroyなメソッドでoをaに置換
puts hoge.hoge # => オブジェクトに変更が加わっている

出力

hoge
hoge?
hoge
hoge
---------------------------------------------
hage
hoge
hage
hage