JavaScriptのAtomics.and()関数とは?使い方とサンプルコードを解説
Atomics.and()関数とは
JavaScriptのAtomicsオブジェクトは、add(加算)、sub(減算)、and(論理積)、or(論理和)、xor(排他的論理和)、load(読み込み)、store(書き込み)といったアトミック操作を静的メソッドとして提供するオブジェクトです。これらのメソッドはSharedArrayBufferオブジェクトと組み合わせて使用され、複数スレッド間で共有されるデータを競合なく安全に操作するために役立ちます。
Atomics.and()メソッドは、TypedArray内の指定された位置にある値に対してビット単位のAND演算(論理積)を実行し、その位置に元々格納されていた演算前の古い値を返します。
構文
Atomics.and()の構文は以下の通りです。
Atomics.and(typedArray, index, value)
引数
- typedArray: SharedArrayBufferを基に生成されたInt8ArrayやUint8ArrayなどのTypedArray。
- index: 演算対象となる配列内の位置(インデックス)。
- value: ビット単位のAND演算に使用する数値。
戻り値
指定された位置に格納されていた演算前の値(古い値)を返します。
サンプルコード
次の例では、初期値として7(2進数で111)を設定し、5(2進数で101)とのAND演算を行っています。
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var arrayBuffer = new SharedArrayBuffer(16);
var data = new Uint8Array(arrayBuffer);
data[0] = 7;
document.write(Atomics.and(data, 0, 5));
document.write(", "+Atomics.load(data, 0));
</script>
</body>
</html>出力結果
7, 5
7(111)と5(101)の論理積は5(101)となるため、Atomics.and()は演算前の値「7」を返し、演算後には位置0の値が「5」に更新されます。
サンプルコード2
次の例では、初期値として12(2進数で1100)を設定し、10(2進数で1010)とのAND演算を行っています。
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var arrayBuffer = new SharedArrayBuffer(16);
var data = new Uint8Array(arrayBuffer);
data[0] = 12;
document.write(Atomics.and(data, 0, 10));
document.write(", "+Atomics.load(data, 0));
</script>
</body>
</html>出力結果
12, 8
12(1100)と10(1010)の論理積は8(1000)となるため、Atomics.and()は演算前の値「12」を返し、演算後には位置0の値が「8」に更新されます。
-
JavaScriptの関数プロトタイプとは?仕組みと使い方を解説
JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに
-
JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン