回答編集履歴
2
append
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
test
CHANGED
@@ -20,8 +20,8 @@
|
|
20
20
|
|
21
21
|
Javaのアサーション(`assert`文)については、下記サイトが参考になります:
|
22
22
|
|
23
|
-
- Java公式
|
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の指摘を参照ください。)
|