ページ「マクドナルド難民」と「演算子のオーバーロード」の間の差分

提供: MonoBook
(ページ間の差分)
ナビゲーションに移動 検索に移動
imported>Administrator
 
imported>Administrator
 
1行目: 1行目:
'''マクドナルド難民'''とは、24時間営業のマクドナルドにコーヒー1杯で居座り寝泊まりする貧困層のことである。
+
'''演算子のオーバーロード'''とは、一部の[[プログラミング言語]]に搭載されている「+」や「-」などの[[演算子]]の意味を変えてしまう機能である。
  
 
==概要==
 
==概要==
マクドナルドのプレミアムローストコーヒーは、Sサイズが100円、Mサイズが150円である。
+
大雑把にいえば「演算子の左辺と右辺の2個を[[引数]]とする[[関数]]」に置き換えられ、その関数の中身は自由に定義できるというものである
 +
<syntaxhighlight lang="perl">
 +
// このような式を
 +
a + b
  
ドヤ街の簡易宿所が1泊1000円〜2000円、[[ネットカフェ]]が1泊2000円〜3000円、[[サウナ]]が1泊3000円〜4000円という相場なので桁違いに安い。
+
//以下のような関数として扱うことができる
 +
func(a,b){
 +
}
 +
</syntaxhighlight>
  
主に車中泊する自動車を持ち合わせていない者が路上生活の一歩手前ですがる場所のようだ。ちなみに、この下には24時間営業のコインランドリー生活があるらしい。
+
演算子のオーバーロードがなかった[[C言語]]では非常に面倒な「内部に配列を保持するクラス同士を足したら配列部分が結合される」「文字列クラス同士を足したら文字列結合される」などの便利な使い方が出来る。
  
[[ファイル:マクドナルド難民1.jpg|なし|サムネイル|640x640ピクセル|マクドナルド難民]]
+
しかしながら「a + b」はどう見ても足し算であるが、これを引き算にも割り算にもできる恐ろしい機能でもある。
[[ファイル:マクドナルド難民.jpg|なし|サムネイル|640x640ピクセル|マクドナルド難民]]
+
<syntaxhighlight lang="perl">
<br />マクドナルドにしたらいい迷惑である。
+
// どうみても足し算である。
 +
a + b;
  
== 海外 ==
+
// 常識的に考えれば 以下のような足し算が期待される。
海外でも問題になっているらしい。
+
func(a,b){
 +
    return a + b;
 +
}
  
* 香港の「マクドナルド難民」……夜も暮れてほかに行き場もなく
+
// しかし第三者により以下のように演算子のオーバーロードされている可能性もある。
* https://www.bbc.com/japanese/features-and-analysis-34674421
+
func(a,b){
 +
    return a - b;
 +
}
 +
 
 +
</syntaxhighlight>
 +
 
 +
ある程度の規模のプロジェクトになると「第三者が書いた[[ライブラリ]]中の演算子のオーバーロードをすべて把握しないと何がおこるかわからない」という事態に陥る。そして一度でも経験すると、あのライブラリは悪のカリスマ「ジョーカー」が仕掛けた罠かもしれないという人間不信に陥り、現場は殺伐とした空気となる。例外なく[[デスマーチ]]まっしぐらである。
  
 
==関連項目==
 
==関連項目==
  
*[[台湾のマクドナルド]]
+
*[[Bjarne Stroustrup インタビュー]]
*シンプロット
+
*[[中級者病]]
*[[ポケモンGO]]
+
*[[算術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;
}

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

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