「演算子 (コンピュータ言語)」の版間の差分

削除された内容 追加された内容
英語版で operator symbols という表現があるのは、「プログラミング言語において、演算子として使われる記号文字」というかなり特殊な文脈であり、冒頭の一般的な訳語として挙げるのは間違ってる
編集の要約なし
1行目:
{{otheruseslist|[[数式]]・{{仮リンク|文 (論理学)|en|Sentence (mathematical logic)|label=文}}の一要素となる記号|解析学における演算子|作用素|微積分演算の記号的処理|演算子法|物理学における演算子|演算子 (物理学)}}
{{出典の明記|date=2009年6月}}
'''演算子'''(えんざんし、operator){{lang-en-short|operator}})は、[[数式]]やコンピュータ[[プログラミング言語]]などで、各種の'''[[演算]]'''を表わす[[記号]]・[[シンボル]]である。、演算子は単なる記号ある記号列であって[[構文論]]的なもの要素であり、それに対応する演算は[[意味論]]の側にある。たとえば[[Java]]において、演算子 <code>+</code> を使った <code>a + b</code> という式は、構文論上は単にそういう式だというだけである。意味論的には数値の加算であったり、文字列の連結であったりするが、それは a と b の型に依って決まる(理論的には[[項書き換え]]のように、構文論的に意味論も与えられた演算子といったものもある)。
 
演算が作用する対象のことを'''[[被演算子]]'''({{lang|en|''operand''}}; オペランド、被演算数、[[引数]])という。たとえば、''n'' と 3 との[[加法|和]]を表す式 "''n'' + 3" において、"+" は演算子であり、その被演算子は "''n''" と "3" である。また、数式として一般的な被演算子と被演算子の間に演算子を記述する構文は[[中置記法]]と呼ばれる。
45行目:
 
== プログラミングにおける演算子 ==
[[プログラミング (コンピュータ)|コンピュータプログラミング]]においては、主に記号を用いて演算を指示するものが演算子と呼ばれる。概ね数式などの記述を模倣しているが、一部の演算子に([[文字コード]]および[[文字セット]]の関係上)通常と異なる記号あるいは文字列が用いられたり、[[副作用 (プログラム)|副作用]]を持っていることがあるなど、数学の演算子とは異なる点もある。
 
===算術演算子===
算術演算子として、四則演算のうち加の演算子には、一般的な算術と同じ演算子プラス記号 "<code>+</code>", を用いる。減算の演算子には "&minus;" の代わりに[[ハイフンマイナス]] "<code>-</code>" が用いられことが多い。乗算の演算子には "&times;" の代わりに "*" ([[アスタリスク]] "<code>*</code>" を用い、除算には "&divide;" の代わりに "/" ([[スラッシュ (記号)|スラッシュ]] "<code>/</code>" が用いられる。整数同士の除算の結果は通例切り捨てにより整数に丸められる言語が多いが、[[Pascal]]では整数の商を求める専用の演算子として英字列 "<code>div</code>" を用いる。一般的な算術にはない演算子として、除算の余りを求める[[剰余演算]](除算余りを求る)演算子 "%" (が定義されていることがある。[[C言語]]および[[C++]]の場合)がある。剰余演算子 "<code>%</code>" の代わであ、[[整数型]]しか適用できないが、[[Java]]および[[C Sharp|C#]]では[[浮動小数点数]]型にも適用できる。[[Pascal]]では剰余演算子として英字列 "<code>mod</code>" を用いる言語もある。また、[[BASIC]]における "<code>^</code>" や[[Python]]における "<code>**</code>" のように[[累乗]]の演算子を持つ言語もある。
 
===関係演算子===
[[関係演算子]]は、およそ数学とあまり変わらないが、プログラミング言語によって細かい差異が比較的多い傾向にある。以下はその例である。
;= の意味
:[[C言語]]の系統では、<code>=</code> を代入に用いるため、等号には <code>==</code> を用いる。また、== と === という、異なる比較基準の演算子を持つ言語もある。
:また、[[PHP (プログラミング言語)|PHP]]や[[JavaScript]]のように、<code>==</code> と <code>===</code> という、異なる比較基準の演算子を持つ言語もある。
;不等号
:<code><nowiki>1 < x < 5</nowiki></code>が「xは1より大きく5より小さい」を意味しないプログラミング言語が多い。そのような場合には論理演算子を使って「<code><nowiki>1 < x and x < 5</nowiki></code>」のように記述する。
;≤, ≥
:<code><nowiki><=</nowiki></code>, <code><nowiki>>=</nowiki></code>を用いることが多いが,言語によってはさらに<code><nowiki>=<</nowiki></code>, <code><nowiki>=></nowiki></code>を認めるものもある。
;≠
:言語によって、<code><nowiki><></nowiki></code> <code>!=</code> などが使用される。
 
===論理演算子===
{{seealso|論理演算子}}
[[論理演算子]]として、論理積の "and"、論理和の "or"、否定の "not" などがある。[[排他的論理和]]の "xor" もある。他に、数値に対して[[二進法]]での各桁に論理演算を適用する[[ビット演算]](bitwise operation)のためのビット演算子(bitwise operator)がある。一部の言語では、ビット演算の演算子が論理演算子の意味にも[[多重定義]](オーバーロード)されている(C言語では[[ブーリアン型]]が無く、基本[[整数型]]の<code>intが兼</code>で代用されているので、論理演算子とビット演算子を混用すると[[バグ]]になることがある)。<!--また、条件文に対する[[糖衣構文]]として--><!--糖衣構文とは構文的に変形するのみで、全く同じ意味になるものを指す。条件演算子には値があるが、条件文には値が無いため、意味的に異なる。よって糖衣構文ではない。-->他に三項演算子の、[[条件演算子]]や、条件演算子のnull比較時の糖衣構文として[[Null合体演算子]]をもつ言語もある。
 
===その他の演算子===
70 ⟶ 71行目:
このほかにも、プログラミング言語によっては[[文字列]]、[[正規表現]]、[[参照 (情報工学)|参照]]、[[配列]]、[[動的メモリ確保]]、[[名前空間]]など、数学的な範囲を超えた多様な分野について、それを操作するための演算子が存在する。
 
[[C++]]や[[C Sharp|C#]]などのように、最近のプログラミング言語の中には既存の演算子に利用者(プログラマー)が自分で新たな意味を定義することができるものがある([[利用者定義演算子|演算子多重定義]])。また[[Smalltalk]]、[[Haskell]]、[[OCaml]]、[[F Sharp|F#]]、[[ALGOL]]および[[Fortran]](Fortran 90 以降)ではなど、利用者が自分で新たな演算子を定義することができる言語もある('''[[利用者定義演算子]]''')が、これ珍しうまく使例でこなせばコードの記述性や直感性を向上させるのに有用だが、乱用すると混乱を招きかねない。Javaのように言語仕様をシンプルに保つため、あえて演算子多重定義をサポートしなかった言語もある。
 
== 脚注 ==