ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

手作りネットプロトコル工房コミュのjava の assertion

  • mixiチェック
  • このエントリーをはてなブックマークに追加
http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html
http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#236365

今まで assert って使ったことなかったけど、ちょっと調べてみた...。 普通、assert ってデバッグの時のみ利用して、デバッグが終われば、コンパイラ指令によって完全に削除できるのが売りだ。 しかし、Javaのassert って コンパイラ指令によって削除できないんだそうだ。

assert っていうのは、確かに諸刃の剣で、副作用がある。 assert 文のなかで、変数の変更が発生するようなステートメントをうっかり書いてしまうと、assert を削除した時にプログラムの動作が一気に変化してしまうからだ。

僕も若かりし頃、Delphi で assert を使った時、うっかりやらかした事がある。
しかし、これっていうのは、こういうものだ。

ドキュメントの言い分によると、そういうことを気にせずに気軽にassert文を使って欲しかった..って書いてあるけど、それって意味あるのか? 僕は副作用があってもいいから削除して欲しい。 じゃなきゃ if 文を書いてチェックするのと何にも変わらないじゃないか。 assert の存在意義がないよ。

正に画竜点睛を欠く。
木を見て森を見ず。

細かい論理の整合性をあわせることに夢中で、結果を無視してる。

ユーザーに対してわかりやすさを優先するからといって、何もこんなスペックダウンをすることないだろうに...と思うのは僕だけだろうか。 わかりやすさを優先するなら、もっとほかにやる事もあるだろうに、そういうのはゴチャゴチャなまま放置されてたりするくせに。

ドキュメントにこんな例が挙がってた。
http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html

// assert が on 担っている事を確認。
  static {
    boolean assertsEnabled = false;
    assert assertsEnabled = true; // Intentional side effect!!!
    if (!assertsEnabled)
      throw new RuntimeException("Asserts must be enabled!!!");
    }
  }

おいおい。 そういうことする時は、素直に例外を使えよ。
assert ってそういうことするためのものじゃないぞ!
...って思うのは僕だけか。

つかね。 そんな無造作に例外を発生させたってね、Java は 完璧な例外catch を書くことが出来ないから、意味無いよ。 特にマルチスレッドアプリでそれをやっちゃうとデッドロックを招く。

使えん。

---

しかも AssertionError って Error クラスを継承してるし...

RuntimeException => ユーザーのコーディングミスによって発生
Error => VMのトラブルによって発生

っていう区分があるのに守られてない。(この規約が守られてないパッケージは多い)

もうどうでもいいさ。 使わないから。

コメント(0)

mixiユーザー
ログインしてコメントしよう!

手作りネットプロトコル工房 更新情報

手作りネットプロトコル工房のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング