回答編集履歴
2
append
answer
CHANGED
@@ -11,4 +11,18 @@
|
|
11
11
|
Javaのアサーション(`assert`文)については、下記サイトが参考になります:
|
12
12
|
- Java公式 [アサーションを使用したプログラミング](http://docs.oracle.com/javase/jp/7/technotes/guides/language/assert.html)
|
13
13
|
- JPCERT [MET01-J. メソッドの引数の検証にassertを使わない](https://www.jpcert.or.jp/java-rules/met01-j.html)
|
14
|
-
- IPA [Javaのアサーション](https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html) (IPAのドキュメントは情報が古いためか、「事前条件のアサーション」の節は不適切です。理由はJPCERTの指摘を参照ください。)
|
14
|
+
- IPA [Javaのアサーション](https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html) (IPAのドキュメントは情報が古いためか、「事前条件のアサーション」の節は不適切です。理由はJPCERTの指摘を参照ください。)
|
15
|
+
|
16
|
+
---
|
17
|
+
|
18
|
+
> そもそもメソッドの引数チェックってするものなのでしょうか。
|
19
|
+
|
20
|
+
するものです。
|
21
|
+
|
22
|
+
> 重要なメソッドだったら、引数チェックの必要があり、assertを使うと無効にされる恐れがあるから、ちゃんとしたチェックにしろ、という意味でしょうか。
|
23
|
+
|
24
|
+
外部公開する(≒publicな)メソッドでは、常に引数チェックを行うべきです。assert文は無効化される可能性もあるため、外部メソッドの引数チェックとしては不適切です。
|
25
|
+
|
26
|
+
> もし、そうだとすれば、なぜpublicでないメソッドの方はassetionで良いということになるのでしょうか。
|
27
|
+
|
28
|
+
引数チェックのようなメソッドの事前条件チェックは、クラス内部(自分)とその外部(他人)の責任分界点を明確化したうえで行う、防衛的プログラミングの一種です。publicでないメソッドは、呼び出し元も自分の責任ですから、assertionでも十分という判断になります(もちろん、publicメソッド同様に引数チェックしてもよいです)。
|
1
update
answer
CHANGED
@@ -9,6 +9,6 @@
|
|
9
9
|
アルゴリズムや内部処理の区切りに、不変条件を確認する`assert`文を配置する程度であれば、コードの肥大化を気にする必要はないと思います。アサーションにより得られる正当性の保証は、ソースコードが多少間延びするデメリットを大きく上回るはずです。
|
10
10
|
|
11
11
|
Javaのアサーション(`assert`文)については、下記サイトが参考になります:
|
12
|
-
- Java公式
|
12
|
+
- Java公式 [アサーションを使用したプログラミング](http://docs.oracle.com/javase/jp/7/technotes/guides/language/assert.html)
|
13
13
|
- JPCERT [MET01-J. メソッドの引数の検証にassertを使わない](https://www.jpcert.or.jp/java-rules/met01-j.html)
|
14
|
-
- IPA [Javaのアサーション](https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html)
|
14
|
+
- IPA [Javaのアサーション](https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a03_05.html) (IPAのドキュメントは情報が古いためか、「事前条件のアサーション」の節は不適切です。理由はJPCERTの指摘を参照ください。)
|