式 (プログラミング)とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > 式 (プログラミング)の意味・解説 

式 (プログラミング)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/02/21 13:55 UTC 版)

(しき、expression)とは、プログラミングにおいて、言語によって定められた優先順位や結びつきの規定に則って評価される変数演算子関数などの組み合わせである。数学における式と同様、式は評価された値を持つ。言語によっては式が副作用を持つこともあり、参照透過性がない場合もある。

式と文

手続き型プログラミング言語では、式と「」が、はっきりと分けられていることが多い。そういった言語では、プロシージャは複数個の文から成り、式から成る「式文」という文がある、といったような感じの構文(syntax)が多い。構文的に見て、セミコロン等によって式や文を分割する、あるいは終端する、という言語が多く、改行でもそうなるものもある。

文を特殊なカッコで囲むと式にできる、というような言語もあるが、あまり多くない。GCCでは独自拡張としてサポートされている[1]

式と文がはっきり分かれていない言語もある。

部分を持たない式

変数や、いくつかの種類のリテラルは、内部にそれ以上細かい部分を持たない(配列のリテラルなどは、さらに内部に式がある)。

手続呼出

プロシージャサブルーチンとして呼び出す式。

f(x, y)

といったように、表面上の見た目では数学における関数の記法と同様な構文であることが多い。これは、関数型言語ではないプログラミング言語でも、多くはこのような記法であり、あるいはこの言語機能を持っている。

演算子式

演算子と項から成る式である。

二項演算子

数式などで見慣れている以下のような、

〈式〉〈演算子〉〈式〉

というような構文となる。FORTRANのように数値計算のことだけを考えていれば良かった時代にはごく普通の言語機能だと考えられていたが、その後あらゆるデータ型をプログラミング言語が扱うようになった際に、それらのデータ型と演算子をどう扱うかは、言語ごとにまちまちとなった。言語によっては、代入なども、代入演算子などによる式でおこなうという設計の場合もある。

このような構文における頭痛のタネに、「演算子の結合性」(en:Operator associativity)と「演算子の優先順位」(operator precedence)がある。直感的には、少なくとも初等教育以来ずっと慣れている「乗除が先、加減が後」という規則があったほうがわかりやすいが、その他にもいくつもの「コンピュータのプログラミングではこれも使いたい」という演算、たとえばビット演算などを追加してゆくと、階層が何段階も増えてしまう。

C言語の設計ミスに、ビット演算子の &| の優先順位が == よりも低い、という点があるが、これは以前にはC言語に論理演算子の &&|| が無く、文脈によって演算子の意味が変わるという仕様であったことが遠因である[2]

そういったように、演算子が関係する文法の仕様を設計するのは難しく、さらに近年は前述のようにデータ型が増えたことによって余計に難しい要素が増えている。後述するような、他の種類の演算子も含めるとさらに複雑になる。

単項演算子

前置演算子

やはり初等教育以来慣れている前置マイナス演算子を使いたいという要求はあるが、そうすると対称性のためにプラスの演算子も欲しいということになったり、そうすると前述の二項演算と同じ記号を使うことで字句解析・構文解析が複雑になることもある。単純にするために、前置マイナス演算子を - 以外の記号とすることもある。C言語のように多くの前置演算子がある言語もある。

後置演算子

C言語の場合、(後置の)++-- すなわちインクリメントとデクリメントの演算子の他、expression.nameexpression->name のような構造体などの要素の選択も構文的には後置演算子である。

三項演算子

代入

代入が文である言語もあれば、「代入演算子」による式である言語もある。普通はわざわざ混乱させたりはしないが、C#とVB.NETを「同じ.NET系言語」だから、として似たものと考えてしまうのか、混乱して考えられてしまうこともあるようである。

C#においては代入は式であるが、同じ.NET系言語であるVB.NETでは代入は文である。そのため、似たようなコードではあるが全く違う処理結果を得る。

// C#
dynamic x = 123;
dynamic y = 234;
dynamic z;

z = y = x;

Console.WriteLine(x); // 123
Console.WriteLine(y); // 123
Console.WriteLine(z); // 123
  1. y = xがまず評価される。yxの持つ123が代入され、この式の値は123となる。
  2. z = 評価結果が評価される。zy = xの結果の123が代入され、この式の値は123となる。
  3. これ以上評価する式がない(セミコロンで終端している)ため、文として完結する。この時、式全体の評価結果である123は捨てられる。
' VB.NET
Dim x = 123
Dim y = 234
Dim z

z = y = x

Console.WriteLine(x) '123
Console.WriteLine(y) '234
Console.WriteLine(z) 'False
  1. y = xが評価される。=は等価演算子と見なされ、この式の値はFalseとなる。
  2. z = 評価結果が代入文として実行される。zy = xの結果のFalseが代入される。(文であるため、値を持たない)

出典

  1. ^ Using the GNU Compiler Collection (GCC): Statement Exprs
  2. ^ http://www.lysator.liu.se/c/dmr-on-or.html

「式 (プログラミング)」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


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

辞書ショートカット

すべての辞書の索引

「式 (プログラミング)」の関連用語

式 (プログラミング)のお隣キーワード
検索ランキング

   

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



式 (プログラミング)のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの式 (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2024 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2024 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2024 GRAS Group, Inc.RSS