JavaScript (6) オブジェクト指向

これまで作ったプログラムは私が馴染んでいるスクリプト言語、DOSのバッチ(古い…)や秀丸マクロ、VBAなどと同様、手続きや関数重視の作りになっていました。
Java にはクラスの概念があり、クラス毎にソースファイルを分ける、という明確なルールがあったのですが、JavaScript ではどうすればいいのか、JavaScript はオブジェクト指向プログラミング言語と聞いていたのに、クラスはないのか?と、ふと疑問に思い調べてみました。
JavaScript にはクラスの概念がないものの、Java と同様オブジェクト指向のプログラミングができるようです。さらに言えば、手続き指向でもオブジェクト指向でも、好きなほうを選べるようです。
Java でプログラミングをしていてオブジェクト指向の概念が馴染むなぁ、と思ったのはベクトルと行列の演算を作ったときでした。ベクトル、行列、それぞれのクラスに対し and(), or() メソッドを書いて、同じように呼び出せるので、数式を書くのと同じようにプログラミングができるなぁと関心したものです。
JavaScript では作成した関数オブジェクトの prototype プロパティに「メソッド」に当たる関数オブジェクトを作ることで、Java と同様のことができるようです。例えば Java で、
public class Vector2D {
 public int x;
 public int y;
 public Vector2D(int x, int y) {
  this.x = x;
  this.y = y;
 }
 public Vector2D add(Vector v) {
  Vector2D r = new Vector2D(0, 0);
  r.x = x + v.x;
  r.y = y + v.y;
  return r;
 }
}
と書いていたものを、JavaScript では、
var Vector2D = function(x, y) {
 this.x = x;
 this.y = y;
}
Vector2D.prototype.add = function(v) {
 var r = new Vector2D(0, 0);
 r.x = this.x + v.x;
 r.y = this.y + v.y;
 return r;
};
と書けばよいようです。
この知識を元に、2進ベクトルと2進行列のプログラムを書いてみようと思います。
(つづく)

コメントを残す