A が true の場合、b が true になるまでブール値が true になり、その時点で boolean が false になるように、2 つの条件 a と b を持つグローバル ブール値を設計する必要があります。つまり、A が false になった場合、ブール値は true のままです。
単純なグローバル変数を試してみましたが、A が false になると false になりました。
できれば JavaScript ですが、疑似コードも同じくらい役に立ちます。
A が true の場合、b が true になるまでブール値が true になり、その時点で boolean が false になるように、2 つの条件 a と b を持つグローバル ブール値を設計する必要があります。つまり、A が false になった場合、ブール値は true のままです。
単純なグローバル変数を試してみましたが、A が false になると false になりました。
できれば JavaScript ですが、疑似コードも同じくらい役に立ちます。
これは XOR のように聞こえます。すなわち
!A and !B == false
A and !B == true
!A and B == true
A and B == false
残念ながら、JavaScript には論理 XOR 演算子がありませんが、
if( A ? !B : B ) {
機能的に同等です
私があなたの質問を正しく理解していれば、それらのケースを
var bool = (a != b);
/*
(false != false) = false
(true != false) = true
(false != true) = true
(true != true) = false
*/
変更を加えて、グローバル変数を作成し、直接var aWasEverTrue = a;
設定する代わりになどの関数を使用できます。a
setA(true)
var a = false;
var b = false;
var aWasEverTrue = a;
function setA(newAValue) {
aWasEverTrue = true;
a = newAValue;
}
// (aWasEverTrue != b) = false
setA(true);
// (aWasEverTrue != b) = true
b = true;
// (aWasEverTrue != b) = false
setA(false);
// (aWasEverTrue != b) = false (as aWasEverTrue is still true)
b = false
// (aWasEverTrue != b) = true
Javascript の昔ながらの方法:
function Enjoy() {
this.a = true;
this.b = true;
this.bool = true;
}
Enjoy.prototype = {
constructor: Enjoy,
setA: function( val ) {
this.a = val;
if ( this.a === true && this.b === true ) this.bool = false;
else if ( this.a === true && this.b === false ) this.bool = true;
},
setB: function( val ) {
this.b = val;
if ( this.a === true && this.b === true ) this.bool = true;
else if ( this.a === true && this.b === false ) this.bool = false;
},
getBool: function() {
return this.bool;
}
};
var enjoy = new Enjoy();
enjoy.getBool(); // true
enjoy.setB( false );
enjoy.getBool(); // false
ご覧のとおり、ブール値とその両方にゲッター/セッターを使用し、すべてのロジックを実行する変数を使用するという考え方a
ですb
。
ちなみに、この質問は間違いなく StackOverflow に対するものです。
あなたが望むのはステートマシンです
結果の状態:
T (True)
F (False)
トランジション:
F -- a (true) --> T
F -- anything else --> F
T -- b (true) --> F
T -- anything else --> T
if
一連のsで表現できます
Aが真でなかった場合にBがどのように動作するかについてのいくつかの仮定に基づいて:
function FlipFlop(){
this.latch = false;
this.value = false;
}
FlipFlop.prototype = {
constructor: FlipFlop,
setA: function( val ) {
this.latch = this.latch || !!val;
this.value = this.latch;
},
setB: function( val ) {
if(this.latch && !!val) {
this.latch = false;
}
this.value = !val;
},
getVal: function() {
return this.value;
}
}