if
ブロックの本文を繰り返さずに実際にこれを行います。 a || b
を!(!a && !b)
に変換できますが、&&
を使用していますが、!(...)
のため、これを入れ子にしてif
のステートメントに分割することはできません。
なぜこれを最初にやりたいのですか?私の仮定は、3つの条件a
,b
およびc
は非常に長く、および/または複雑であるということであろう。
は、わかりやすい名前を持つ3つのブール変数を宣言して
boolean isLoggedIn = // some really long data base lookup
boolean isGuest = // more data base stuff
boolean guestCanEdit = // a complex boolean expression
if (isLoggedIn || (isGuest && guestCanEdit)) { ...
は、上記のチェックを実行する3つのメソッドを定義した状態のものを使用します。このような場合は、私は、次のいずれかをお勧めしたいですそしてhowev、if
if (isLoggedIn(user) || (isGuest(user) && guestCanEdit(topic))) { ...
注意のものを使用します最初のバージョンが短絡を使用しない、すなわち、最初のバージョンが既に真であるか、または2番目が偽であっても、すべての条件が評価されることになる。これは、計算上高価なもの、例えば、 3番目のチェックが成功した場合のみ(たとえば、null
チェック後)、
あなたcommentに関して:条件
if (list.isEmpty() ||
(!list.isEmpty() && list.getLast().compareTo(heap.peek().value) <= 0))
が本当にそんなに長くないが、それははるかに短いその方法を取得することはできませんように私は、このために上記のいずれかの方法を示唆しています。しかしはb
部分が冗長なので、を短くすることができます。 ||
、(b && c)
の短絡に!a
場合にのみ評価され、そしてあなたのb
が!a
あるので、あなたの目標はどのように多く数えることであるならば、あなたはちょうどa || c
if (list.isEmpty() || list.getLast().compareTo(heap.peek().value) <= 0)
それを短縮することができます回と呼ばれるcompareTo
、あなたはこれを使用することができます。
if (! list.isEmpty() && list.getLast().compareTo(heap.peek().value) <= 0)
を今これはwが、ちょうどb && c
です完全に欠けている部分があります。これはもうa || (b && c)
に相当ないであることに注意してください、しかしa
はすでにtrue
と評価された場合により再び短絡に、compareTo
が実際がa || c
で呼ばれることはないので、この場合には、良いことだという。
なぜこれをやりたいですか? 'a'、' b'、 'c'の条件が長すぎる場合は、短くてわかりやすい名前のメソッドを書くことを検討してください。 'if(isLoggedIn(user)||(isGuest(user)&& guestCanEdit(topic)))' –
あなたの質問は何ですか?理解できませんでした。 – Rohit
私は、より明確になるように質問の拡張版を書くつもりです。したがってif文は '(list.isEmpty()|| list.isEmpty()&& list.getLast()。compareTo(heap.peek()。value)<= 0)' となります。ループの中で実行されます。私がここでやろうとしているのは、 'compareTo()'メソッドがどのように呼び出されたかを数えることです。もっと正確にカウントするためにif文を分割する必要があります。 – henrich