「演算子のオーバーロード」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
(ページの作成:「'''演算子のオーバーロード'''とは、一部のプログラミング言語に搭載されている「+」や「-」などの演算子の意味を変え…」)
 
 
(同じ利用者による、間の5版が非表示)
1行目: 1行目:
 
'''演算子のオーバーロード'''とは、一部の[[プログラミング言語]]に搭載されている「+」や「-」などの[[演算子]]の意味を変えてしまう機能である。
 
'''演算子のオーバーロード'''とは、一部の[[プログラミング言語]]に搭載されている「+」や「-」などの[[演算子]]の意味を変えてしまう機能である。
  
== 概要 ==
+
==概要==
大雑把にいえば「演算子の左辺と右辺の2個を引数とする関数」に置き換えられ、その関数の中身は自由に定義できるとうものである。
+
大雑把にいえば「演算子の左辺と右辺の2個を[[引数]]とする[[関数]]」に置き換えられ、その関数の中身は自由に定義できるというものである
 +
<syntaxhighlight lang="perl">
 +
// このような式を
 +
a + b
  
「内部に配列を保持するクラス同士を足したら配列部分が結合される」「文字列クラス同士を足したら文字列結合」などの便利な使い方が出来る。
+
//以下のような関数として扱うことができる
 +
func(a,b){
 +
}
 +
</syntaxhighlight>
  
しかしながら「A + B」はどう見ても足し算であるが、これを引き算にも割り算にもできる恐ろしい機能でもある。
+
演算子のオーバーロードがなかった[[C言語]]では非常に面倒な「内部に配列を保持するクラス同士を足したら配列部分が結合される」「文字列クラス同士を足したら文字列結合される」などの便利な使い方が出来る。
  
ある程度の規模のプロジェクトになると「第三者が書いた[[ライブラリ]]中の演算子のオーバーロードをすべて把握しないと何がおこるかわからない」という事態に陥るため、[[デスマーチ]]の原因でしかない。
+
しかしながら「a + b」はどう見ても足し算であるが、これを引き算にも割り算にもできる恐ろしい機能でもある。
 +
<syntaxhighlight lang="perl">
 +
// どうみても足し算である。
 +
a + b;
  
== 関連項目 ==
+
// 常識的に考えれば 以下のような足し算が期待される。
 +
func(a,b){
 +
    return a + b;
 +
}
  
* [[Bjarne Stroustrup インタビュー]]
+
// しかし第三者により以下のように演算子のオーバーロードされている可能性もある。
* [[中級者病]]
+
func(a,b){
* [[算術IF文]]
+
    return a - b;
* [[正格評価]]
+
}
* [[ユークリッドの互除法]]
+
 
 +
</syntaxhighlight>
 +
 
 +
ある程度の規模のプロジェクトになると「第三者が書いた[[ライブラリ]]中の演算子のオーバーロードをすべて把握しないと何がおこるかわからない」という事態に陥る。そして一度でも経験すると、あのライブラリは悪のカリスマ「ジョーカー」が仕掛けた罠かもしれないという人間不信に陥り、現場は殺伐とした空気となる。例外なく[[デスマーチ]]まっしぐらである。
 +
 
 +
==関連項目==
 +
 
 +
*[[Bjarne Stroustrup インタビュー]]
 +
*[[中級者病]]
 +
*[[算術IF文]]
 +
*[[正格評価]]
 +
*[[ユークリッドの互除法]]

2019年10月9日 (水) 04:42時点における最新版

演算子のオーバーロードとは、一部のプログラミング言語に搭載されている「+」や「-」などの演算子の意味を変えてしまう機能である。

概要[編集 | ソースを編集]

大雑把にいえば「演算子の左辺と右辺の2個を引数とする関数」に置き換えられ、その関数の中身は自由に定義できるというものである

// このような式を
a + b

//以下のような関数として扱うことができる
func(a,b){
}

演算子のオーバーロードがなかったC言語では非常に面倒な「内部に配列を保持するクラス同士を足したら配列部分が結合される」「文字列クラス同士を足したら文字列結合される」などの便利な使い方が出来る。

しかしながら「a + b」はどう見ても足し算であるが、これを引き算にも割り算にもできる恐ろしい機能でもある。

// どうみても足し算である
a + b;

// 常識的に考えれば 以下のような足し算が期待される
func(a,b){
    return a + b;
}

// しかし第三者により以下のように演算子のオーバーロードされている可能性もある
func(a,b){
    return a - b;
}

ある程度の規模のプロジェクトになると「第三者が書いたライブラリ中の演算子のオーバーロードをすべて把握しないと何がおこるかわからない」という事態に陥る。そして一度でも経験すると、あのライブラリは悪のカリスマ「ジョーカー」が仕掛けた罠かもしれないという人間不信に陥り、現場は殺伐とした空気となる。例外なくデスマーチまっしぐらである。

関連項目[編集 | ソースを編集]