teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

append

2016/08/17 06:41

投稿

yohhoy
yohhoy

スコア6191

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

2016/08/17 06:41

投稿

yohhoy
yohhoy

スコア6191

answer CHANGED
@@ -9,6 +9,6 @@
9
9
  アルゴリズムや内部処理の区切りに、不変条件を確認する`assert`文を配置する程度であれば、コードの肥大化を気にする必要はないと思います。アサーションにより得られる正当性の保証は、ソースコードが多少間延びするデメリットを大きく上回るはずです。
10
10
 
11
11
  Javaのアサーション(`assert`文)については、下記サイトが参考になります:
12
- - Java公式ドキュメント [アサーションを使用したプログラミング](http://docs.oracle.com/javase/jp/7/technotes/guides/language/assert.html)
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の指摘を参照ください。)