回答編集履歴

2

append

2016/08/17 06:41

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -25,3 +25,31 @@
25
25
  - JPCERT [MET01-J. メソッドの引数の検証にassertを使わない](https://www.jpcert.or.jp/java-rules/met01-j.html)
26
26
 
27
27
  - IPA [Javaのアサーション](https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html) (IPAのドキュメントは情報が古いためか、「事前条件のアサーション」の節は不適切です。理由はJPCERTの指摘を参照ください。)
28
+
29
+
30
+
31
+ ---
32
+
33
+
34
+
35
+ > そもそもメソッドの引数チェックってするものなのでしょうか。
36
+
37
+
38
+
39
+ するものです。
40
+
41
+
42
+
43
+ > 重要なメソッドだったら、引数チェックの必要があり、assertを使うと無効にされる恐れがあるから、ちゃんとしたチェックにしろ、という意味でしょうか。
44
+
45
+
46
+
47
+ 外部公開する(≒publicな)メソッドでは、常に引数チェックを行うべきです。assert文は無効化される可能性もあるため、外部メソッドの引数チェックとしては不適切です。
48
+
49
+
50
+
51
+ > もし、そうだとすれば、なぜpublicでないメソッドの方はassetionで良いということになるのでしょうか。
52
+
53
+
54
+
55
+ 引数チェックのようなメソッドの事前条件チェックは、クラス内部(自分)とその外部(他人)の責任分界点を明確化したうえで行う、防衛的プログラミングの一種です。publicでないメソッドは、呼び出し元も自分の責任ですから、assertionでも十分という判断になります(もちろん、publicメソッド同様に引数チェックしてもよいです)。

1

update

2016/08/17 06:41

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -20,8 +20,8 @@
20
20
 
21
21
  Javaのアサーション(`assert`文)については、下記サイトが参考になります:
22
22
 
23
- - Java公式ドキュメント [アサーションを使用したプログラミング](http://docs.oracle.com/javase/jp/7/technotes/guides/language/assert.html)
23
+ - Java公式 [アサーションを使用したプログラミング](http://docs.oracle.com/javase/jp/7/technotes/guides/language/assert.html)
24
24
 
25
25
  - JPCERT [MET01-J. メソッドの引数の検証にassertを使わない](https://www.jpcert.or.jp/java-rules/met01-j.html)
26
26
 
27
- - IPA [Javaのアサーション](https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html)
27
+ - IPA [Javaのアサーション](https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html) (IPAのドキュメントは情報が古いためか、「事前条件のアサーション」の節は不適切です。理由はJPCERTの指摘を参照ください。)