1

私は基本的に、newValue が targetValue を超えているかどうかを確認したいと考えています。ただし、targetValue は正または負の数値のいずれかになる可能性があるため、( newValue < targetValue )必ずしも機能するとは限りません。

以下のようにコーディングしました。考えすぎかもしれませんが、if チェックをもう少しエレガントに書き直す方法はないかと考えました…</p>

var newValue = 0;

function ChangeValue ( targetValue : int )
{
    var isTargetPositive = ( targetValue > 0 );

    if ( isTargetPositive && newValue < targetValue || !isTargetPositive && newValue > targetValue )
        newValue = math.moveTowards( newValue, targetValue, 1 );
    else
        // Do something else
}
4

5 に答える 5

2

これは、私が変更したチェス プロジェクトとほぼ同じケースです。

if((obj.ActiveColor&&current_val>0) || (!obj.ActiveColor&&current_val<0)){}

var impossible_to_name = (current_val * (obj.ActiveColor?1:-1));

if(impossible_to_name>0){}

変数をキャッシュする必要がないことはわかっていますが、私の場合は後で使用する予定だったのでキャッシュしました。コードが非常に複雑であるため、変数に適切な名前を付けることさえできませんでした。これが役立つかどうかは完全にはわかりません。コードに変換できなかった場合、どちらもできない可能性がありますが、コードをもう一度理解し、回答を編集しようとします。

注:コードがラップされてif(current_val){...}いるため、値はそれ以外です0

于 2013-10-26T02:18:42.023 に答える
1
var newValue = 0;
    function ChangeValue ( targetValue )
    {
        if ( 
    ((targetValue > 0) && (newValue < targetValue)) 
    || 
    ((targetValue < 0) && (newValue > targetValue ))
           )
        {
            newValue = math.moveTowards( newValue, targetValue, 1 );
        }    
        else{
            // Do something else
        }
    }
于 2013-10-26T01:50:40.093 に答える
1

これが十分に明確でない場合は、いつでもサブ関数を作成できます

function abs_compare(target, number) {
    return target != 0 && ((target > 0 && target > number) || target < number);
}

if (abs_higher(targetValue, newValue)) {
    newValue = math.moveTowards(newValue, targetValue, 1);
}

target != 0また、それが禁止されている値であることが条件ステートメントでより明確であるため、0 よりも優れているか劣っているかを二重にチェックするよりも好ましいと思います。

また、Pointy は、newValue を 0 に初期化したため、常に 0 のままであると述べましたが、ChangeValue は関数であるため、現在は false です。newValue は、関数呼び出しの前に変更できます。

アップデート

読むのが速すぎたのかもしれません。target を 0 と比較すると、実際のロジックは保持されず、ダブル チェックと同じです。とにかく、あなたはまだ機能を使うことができます。

また、最良の答えはむしろ条件を使用することですtarget > 0 ? target > number : target < number

于 2013-10-26T02:03:34.553 に答える
-1

テスト (入力: 5) isTargetPositive - 一致した newValue < targetValue - 一致した

テスト (入力: -1) !isTargetPositive - 一致 newValue > targetValue - 一致

+ve または -ve 整数、IF と一致します。

isTargetPositive && newValue < targetValue ですよね?&& を使用する理由 条件は一つでいいと思います。

于 2013-10-26T01:50:13.420 に答える