回答編集履歴

2

強調追加

2016/03/20 13:25

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
 
44
44
 
45
- なお、破壊的メソッドと言っても、引数のオブジェクトを破壊的に変更してしまうようなメソッドのことではありません。そのようなメソッドは**行儀が悪いメソッド**であり、作るべきではないとされています。Rubyは参照の値渡しですので、引数へ副作用を与えることは可能ですが、コードが複雑になり、バグの温床になるため、余程の理由が無い限り避けるべきです。実際に、組み込みライブラリや標準ライブラリにそのようなメソッドはほとんどありません(というより、見つけられませんでした)。
45
+ なお、破壊的メソッドと言っても、引数のオブジェクトを破壊的に変更してしまうようなメソッドのことでは**ありません**。そのようなメソッドは**行儀が悪いメソッド**であり、作るべきではないとされています。Rubyは参照の値渡しですので、引数へ副作用を与えることは可能ですが、コードが複雑になり、バグの温床になるため、余程の理由が無い限り避けるべきです。実際に、組み込みライブラリや標準ライブラリにそのようなメソッドはほとんどありません(というより、見つけられませんでした)。
46
46
 
47
47
 
48
48
 

1

文章がおかしいようなきがしたので、修正

2016/03/20 13:25

投稿

raccy
raccy

スコア21735

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- Rubyではほとんどのオブジェクトがmutable(変更可能)です。しかし、最近流行り__らしい__関数型プログラミングでは、オブジェクトがimmutabel(変更不可)であることや、関数が純粋関数(副作用が無く、引数が同じなら、戻り値も常に同じになる関数)であることが重視されつつあります。そんな流行がやってる前から、Rubyではオブジェクトが変更されるのかされないのかが初期の頃から重視されてきました。
9
+ Rubyではほとんどのオブジェクトがmutable(変更可能)です。しかし、最近流行り__らしい__関数型プログラミングでは、オブジェクトがimmutabel(変更不可)であることや、関数が純粋関数(副作用が無く、引数が同じなら、戻り値も常に同じになる関数)であることが重視されつつあります。そんな最近の流行とは**関係な**、初期の頃から、Rubyではオブジェクトが変更されるのかされないのかが重視されてきました。
10
10
 
11
11
 
12
12
 
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- 通常であれば、安全なメソッドと破壊的メソッドの両方があるとプログラマーは混乱するでしょう。そこで、Rubyコミュニティでは、同じような動作をするメソッドが二つある場合は、より危険な方に"!"を付けるとしました。"!"マークで危険ですよと知らせると言うことです。もう気付いた方もいるかも知れませんが、「破壊的メソッドにはすべて"!"が付く」わけでも、「"!"が付いていれば破壊的メソッドである」わけでも**ありません**。`Array#push`は"!"が無いけど破壊的メソッドですし、`Kernel.#exit!`は破壊的メソッドではありません(と言ってもプログラムが終了しますが)。"!"はあくまで通常より危険なメソッドと教えることが目的であり、破壊的変更であることが慣習的に自明なメソッド名(start, close, name=とか)や演算子(<<とか)の場合は付けません。
41
+ 通常であれば、安全なメソッドと破壊的メソッドの両方があるとプログラマーは混乱するでしょう。そこで、Rubyコミュニティでは、同じような動作をするメソッドが二つある場合は、**より危険な方に"!"を付ける**としました。"!"マークで危険ですよと知らせると言うことです。もう気付いた方もいるかも知れませんが、「破壊的メソッドにはすべて"!"が付く」わけでも、「"!"が付いていれば破壊的メソッドである」わけでも**ありません**。`Array#push`は"!"が無いけど破壊的メソッドですし、`Kernel.#exit!`は破壊的メソッドではありません(と言ってもプログラムが終了しますが)。"!"はあくまで通常より危険なメソッドと教えることが目的であり、破壊的変更であることが慣習的に自明なメソッド名(start, close, name=とか)や演算子(<<とか)の場合は付けません。
42
42
 
43
43
 
44
44