多項式のクラス

作成日:2016-05-07
最終更新日:

JavaScript におけるクラスの実現方法

JavaScript でオブジェクト指向プログラミングをするときには、とまどう。クラスの作り方がわからなくなる。 そこで、先人のコードを多く見て、真似していくしかない。最初は、多項式のクラスを考える。

多項式とは、`f(x) = a_nx^n + a_(n-1)x^(n-1) + cdots + a_1x + a_0` のような式をいう。このような式を表すクラスを作る。

なお、クラスを作るといっても、JavaScript ではプロトタイプという考えを使う。くわしくは他の文献を参照のこと。 今後はクラスという名前で統一する。 では、多項式のクラスの名前を決めよう。これを Polinomo とする。私は天邪鬼なので、英語の Polynomial ではなくエスペラントの Polinomo を使う。 多項式を決めるのは、係数の配列 `a_n, a_(n-1), cdots, a_1, a_0` である。 このクラスにおいては多項式を昇ベキに、すなわち `f(x) = a_0 + a_1x + cdots + a_(n-1)x^(n-1) + a_nx^n` の順序として考えるとよい。 すなわち、内部の配列 `a` を、a[0], a[1], ..., a[n] として考える。

さて、クラスとコンストラクタは同時に作る。初期値は係数の配列をとる。

  Polinomo = function(koef) {
  // this はインスタンスを表す。
  this.koef = koef; // koef = koeficientoj (係数)n 次多項式であれば (n+1) の大きさの配列。
};

ふつうのクラスであれば getter (値の参照)と setter (値の設定、更新)のメソッドを決めていく。 これをやってもよいのだが、よせばいいのにクラス名をエスペラントで作ったものだからメソッド名もエスペラントにしようと思った。 ところが、get に対応する思わしいエスペラントが見当たらない( set に対応するエスぺラントは meti がある)。 get や set はメンバ変数のアクセスのときに考えるが、メソッド名は get や set のエスペラントにはこだわらないことにする。

  Polinomo.prototype.montru = function() {
  // メンバ変数の定義・参照は this.<メンバ変数>を使う。
  // this は省略できない。
  return this.koef;
};

四則演算のメソッドは、それぞれ adicu, subtrahu, multipliku, dividu (それぞれ英語の加減乗除を表す add, subtract, multiply, divide の命令形) とした。それぞれ一つの Polinomo 型変数を引数にとり、this +-*/ 引数 の値を返すようにする。 ただし、除算は商だけでなく剰余も参照できるようにしないといけない。工夫が必要だ。


まりんきょ学問所JavaScript 手習い > 多項式のクラス