演算子のオーバーロード
概要編集
大雑把にいえば「演算子の左辺と右辺の2個を引数とする関数」に置き換えられ、その関数の中身は自由に定義できるというものである
// このような式を
a + b
//以下のような関数として扱うことができる
func(a,b){
}
演算子のオーバーロードがなかったC言語では非常に面倒な「内部に配列を保持するクラス同士を足したら配列部分が結合される」「文字列クラス同士を足したら文字列結合される」などの便利な使い方が出来る。
しかしながら「a + b」はどう見ても足し算であるが、これを引き算にも割り算にもできる恐ろしい機能でもある。
// どうみても足し算である。
a + b;
// 常識的に考えれば 以下のような足し算が期待される。
func(a,b){
return a + b;
}
// しかし第三者により以下のように演算子のオーバーロードされている可能性もある。
func(a,b){
return a - b;
}
ある程度の規模のプロジェクトになると「第三者が書いたライブラリ中の演算子のオーバーロードをすべて把握しないと何がおこるかわからない」という事態に陥る。そして一度でも経験すると、あのライブラリは悪のカリスマ「ジョーカー」が仕掛けた罠かもしれないという人間不信に陥り、現場は殺伐とした空気となる。例外なくデスマーチまっしぐらである。