代入演算子との混乱とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > 代入演算子との混乱の意味・解説 

代入演算子との混乱

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/03/10 06:02 UTC 版)

関係演算子」の記事における「代入演算子との混乱」の解説

C言語から直接または間接的に派生したプログラミング言語では、同値関係関係演算子として、直感的な = ではなく == を用いる。一方、= を用い言語としては PascalBASICAdaStandard MLObjective CamlSQLVHDL などがある。 C言語広範囲普及したため、後発プログラミング言語における構文仕様C言語のそれを参考定義されたものも多いが、そのうち一つがこの == 演算子である。この独特の構文は、B言語開発初期段階で = を別の意味割り当てたことに端を発するALGOLFORTRAN流れを汲むB言語設計者は、タイピング減らしたいという要望から、頻繁に記述される更新代入操作のためのコピー演算子として = を代用することを決定したのである (これは A = A + 1 のような一見して数学的に不成立」な式が許容されることを意味する)。代わりに、= が本来担う役割である等号として == が使われることとなったC言語はこれらの演算子そのまま引き継ぎ以後 JavaC#はじめとする多く言語がこの構文採用したのである。 これらのC言語ファミリーにおける = の用法バグ温床になりうる。C言語にはブーリアン型がなく、if文while文条件式には真偽値評価されうる任意の数値型の式を受け付ける(ゼロあるいはゼロ相当を偽、非ゼロを真とする)。またC言語における代入は文ではなく式であり値を持つ。そのため、プログラマーが if (x == y) の代わりに、if (x = y) とミスタイプしても構文的に合法となってしまうのであるC言語において、if (x == y) は大雑把に言えば「x と y が等しければ後続の文を実行せよ」を意味する。しかし、if (x = y) とミスタイプすると「x に y の値を割り当て、もし x の新しい値が0でなければ後続の文を実行せよ」という意味になってしまう。たとえば、下記の例で if (x = y) と書いてしまうと、y が x に代入され両方とも2になり、更に x の値2は0ではないので、常に if 文ブロック実行される。したがって、以下のコードは "x is 2 and y is 2" を出力するint x = 1;int y = 2;if (x = y) { /* yが0でなければ以下のコードは常に実行される */ printf("x is %d and y is %d\n", x, y);} 他の言語コンパイラ中にはこのようなミス事前に防ぐように工夫されているものもある。 同じ演算子を持つ JavaC#同様の問題孕んでいるが、これらの言語ではこの種の誤りは、ほとんどの場合コンパイルエラーとして検出できるif文while文などの条件式ブーリアン型制約され、またほかの型(例え整数型)からブーリアン型暗黙的に変換されるともないからである(ただしJavaのjava.lang.Booleanはboolean暗黙変換される)。 gccなどのいくつかのコンパイラでは、if の条件式中に代入演算子含んでいるコード意図的に書かれることもある)をコンパイルするときに警告を出す。 AdaPython においては、(if 節も含めて)式の途中代入演算子登場できないので、この種の誤り排除できる。 同様に BASIC などのいくつかの言語では、文脈に応じて構文的に弁別できることから、代入等式両方に = 記号使用するBASIC系では代入は式ではなく文であり、AdaPython同様に代入演算子は式中に出現するとがないそもそも代入演算子が無い、と表現したほうが正確))。 また、プログラマー中には予防策として、定数対す比較記述するとき、以下のように直感とは逆の順でオペランド記述する者もいる。このようにしておけば、誤って = と書くと 2 は左辺値ではないので、書いたコード不正になる。コンパイラはこれに対してエラーメッセージを出すので、結果適切な演算子修正できるのである。このコーディングスタイルヨーダ記法や left-hand comparison として知られている。ただしこの記法には、比較対象少なくとも片方左辺値を持たないような場合にしか使えない多く場合重要な側の式が後から現れることになる、といった欠点がある。 if (2 == a) { /* 仮に = と == を誤用し場合コンパイルエラー引き起こす */ /* ... */}

※この「代入演算子との混乱」の解説は、「関係演算子」の解説の一部です。
「代入演算子との混乱」を含む「関係演算子」の記事については、「関係演算子」の概要を参照ください。

ウィキペディア小見出し辞書の「代入演算子との混乱」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「代入演算子との混乱」の関連用語

代入演算子との混乱のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



代入演算子との混乱のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの関係演算子 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS