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