1
public Card getCard()throws IOException{
    Card c = null;
    String cardInfo = null;  
    assert readStream != null: cardInfo = readStream.readLine();
    assert cardInfo != null: c = CreateCard(cardInfo);
    return c;
}

私は少し練習不足で、assert ステートメントを使用して null をテストすることにより、コードの品質を向上させようとしています。最初にテストしたものがnullの場合、次のものもnullになるため、アサーションをデイジーチェーン化する必要があるようです....

4

2 に答える 2

1

アサーションに関するガイドラインを次に示します。

  • パブリック関数のパラメーターを検証するためにアサーションを使用しないでください。これらの関数は、代わりに NullPointerException、IllegalArgumentException、およびその他の関連する例外をスローする必要があります。パブリック関数は他のプログラマーによって使用されるため、失敗した場合に正しいエラーが発生することを確認する必要があります。
  • アサーションを使用して、保護されたアクセス メソッドとプライベート アクセス メソッドのパラメーターの事前条件と事後条件を確認します。
  • ソフトウェアのユーザー エラーをチェックするためにアサーションを使用しないでください。Web ベースのオンライン販売システムのユーザーが 10 桁のクレジット カード番号を入力することを期待し、彼女が 9 桁しか入力しない場合は、アサートを使用しないでください。代わりに、IllegalArgumentException をスローします。assert を使用すると、誰かがサーブレット コンテナーでアサーションをオフにするとすぐに、システムのチェック ロジックが消えてしまいます。
  • アサーションを使用して、発生してはならない状態のパラメーターと変数をチェックします
  • アサーションを使用して無効なコード ブランチをチェックする
  • アサーションを使用して作業を行わないでください。アサーションは開発者レベルのエラーであり、プログラムの状態を修復したり、複雑なログを実行したりするために使用しないでください。また、ユーザーがアサーションなしでプログラムを実行すると、コードがなくなることを忘れないでください。そのコードがプログラムの機能にとって重要である場合、深刻な問題が発生する可能性があります.
  • アサーションのエラー メッセージを国際化する必要はありません。繰り返しますが、アサーションは開発者レベルの問題であるため、それらを国際化するのは時間の無駄です。
  • アサーションを使用して投稿条件を確認します。メソッドを作成し、ユーザーに null を返さないことが期待される場合
于 2013-06-20T05:34:25.810 に答える
0

アサーションの価値は、開発ではオン、本番ではオフにできることです。オンにしている間、リリース前に、おそらく大きなダメージを与える前に、バグを明らかにします。オフの間、アサーションは非アクティブであり、(うまくいけば) パフォーマンスへの影響はごくわずかです。

自問すべき質問は次のとおりだと思います。

于 2013-06-20T04:57:20.193 に答える