1

ハッシュ変更の通知を表示するために、この単純な関数を一度作成しました。

function watchHash() {
    if(location.hash == '#thanks') {
        displayNotification('Thanks for your feedback, I\'ll try to get back to you as soon as possible.'); // Notify on form submit success
    }

    if(location.hash == '#error') {
        displayNotification('Oops, something went wrong ! Please try again.'); // Notify on form submit error
    }
}
window.onhashchange = watchHash;

今日戻ってきて、このように書けば正しいのではないかと思いました。

function watchHash() {
    if(location.hash == '#thanks') {
        displayNotification('Thanks for your feedback, I\'ll try to get back to you as soon as possible.'); // Notify on form submit success
    }
    else if(location.hash == '#error') {
        displayNotification('Oops, something went wrong ! Please try again.'); // Notify on form submit error
    }
    else {
        return;
    }
}
window.onhashchange = watchHash;

もしそうなら、それは関連していますか?

ここでは少し混乱しています。ベストプラクティスに固執したいと思います。

ご協力いただきありがとうございます。

4

5 に答える 5

4

2番目のシナリオははるかに優れています。なんで?

最初のシナリオでは、最初の条件が満たされているかどうかは関係ありません。2番目のケースもチェックされ、3番目、4番目というようにチェックされます。

2番目のケース最初のケースが失敗した場合は2番目のケースがテストされ、失敗した場合は3番目のケースがテストされるため、ソフトウェアはシナリオのチェックに無駄な時間を費やすことはありません。

于 2012-09-27T18:21:36.100 に答える
2

あなたの場合、どちらの方法でも同様に機能します。ただし、このelse句を使用することが、重複するロジックを処理するための本当に最良の方法である場合があります。

例として、テストされていないpコード

if (isRaining) && (iHaveUmbrella) {
  iGetWet = false;
} else if (isRaining) {
  iGetWet = true;
} else {
  iGetWet = false;
}

この場合、はelse if、最初の条件が真の場合、2番目の条件がチェックされないことを意味します。

于 2012-09-27T18:50:11.593 に答える
1

どちらの方法でも正しく機能します。2つの違いは、読みやすさとコーディングのパターンです。

読みやすさに関しては、私は個人的に単一の入力で作業する最初の方法を好みます。2つ目はパフォーマンスが向上しますが、熟練した開発者でない場合は、複数の境界で失われる可能性があります。

コーディングのパターンに関しては、最初のものは何も返さないことがわかります。2つ目は、ハッシュタグがどちらも選択されていない場合にのみnullを返します。ハッシュタグが「#thanks」または「#error」の場合は返されないため、この関数を使用して条件を確認することはできません。

于 2012-09-27T18:31:25.550 に答える
1

このユースケースには関係ないかもしれませんが、インタプリタがより頻繁に条件をチェックする必要があるため、最初の方法は遅くなります。1秒間に60回呼び出されるゲームループを検討し、他のブロックが発生する場合は構造化しないでください。パフォーマンスに大きな打撃を与えました。

于 2012-09-27T18:24:25.890 に答える
0

2番目のバージョンは、その機能が最初のバージョンと同じである限り「正しい」ですが、追加されたコードは完全に冗長です。

于 2012-09-27T18:21:29.127 に答える