KMC活動ブログ

京大マイコンクラブの活動の様子を紹介します!!

ECMAScript6勉強会 第11回

こんにちは。id:tyageです。

10/6に第11回を行いました

第11回

この回では、 ArrayBuffer, typed arrays, typed arrays (DataView) を読みました。

(既に使っている人も多いと思うので、短めになります)

ArrayBuffer

メモリ領域を確保したりするのに利用するオブジェクトです。

結構前から実装されているブラウザが多いので、既に各所で利用されていると思います。

ab = new ArrayBuffer(1024)
ab.length // => 1024

ArrayBuffer.prototype.slice(start, end)ではArrayBufferを範囲指定して切り取ることができます。

ArrayBuffer.isViewはArrayBufferにアクセスするためのview(以下で出てくるtyped arrayやdata viewです)かどうかがわかります。

typed arrays

ArrayBufferを扱うためのViewで、array likeに扱うことができます。

具体的には以下のようなオブジェクトがあります

  • Int8Array
  • Uint8Array
  • Uint8ClampedArray
  • Int16Array
  • Uint16Array
  • Int32Array
  • Uint32Array
  • Float32Array
  • Float64Array

名前の通りの型でデータを扱うことができます。 (詳細: https://people.mozilla.org/~jorendorff/es6-draft.html#table-46)

Uint8ClampedArrayはUint8Arrayとは範囲を超えた時の扱いが異なり、負の数だと0に、256以上だと255にするようになっています。

var a = new Uint8Array(1);a[0] = 1111;console.log(a); // => 87
var a = new Uint8ClampedArray(1);a[0] = 1111;console.log(a); // => 255

コンストラクタの引数には数値(この場合、数値分の長さのtyped arrayが生成される)や他のtyped arrayやarray bufferを与えることができます。

array likeなオブジェクトなので、Array.prototypeと共通のメソッドやプロパティが多いですが、それ以外にも以下の様なものがあります

  • %TypedArray%.prototype.set
    • 配列やTypedArrayを渡すとそれで埋めることができます。第二引数でoffsetが指定できます
  • %TypedArray%.prototype.subarray
    • String.prototype.substringみたいなやつ。第一引数から第二引数(省略可能)までに切り取ることができます

また、Array.ofやArray.fromのように、%TypedArray%.ofや%TypedArray%.fromも使えます

typed arrays (DataView)

typed arrayではInt8Arrayなど型を指定した上でアクセスしていましたが、DataViewオブジェクトでは、メソッド呼び出し時に型を指定してデータにアクセスできます。

typed arrayの時と異なり、alignmentを気にする必要はありません

ab = new ArrayBuffer(10)
dv = new DataView(ab)
dv.setUint16(1, 45)
dv.getUint16(1) // => 45
dv.getUint32(1) // => 2949120

またデフォルトではbig endianとして扱われますが、getメソッドでは第2引数に、setメソッドでは第3引数にtrueを与えるとlittle endianにできます。(ただしgetInt8, setInt8を除く)

次は、第12回(10/13)です