この記事には複数の問題があります。改善
やノートページでの議論にご協力ください。この項目では、数理論理学とコンピュータプログラミングにおける学術用語について説明しています。eufoniusの楽曲については「リテラル (曲)」をご覧ください。
「導出原理」も参照
リテラル・直値[1][2][3](英: literal)は、「文字どおり」「字義どおり」を意味する語で、letter と同じくラテン語の littera(文字)に由来する。数理論理学とコンピュータプログラミング[4]で異なる意味の専門用語として使われる[5]。 リテラルとは、数理論理学において、原子論理式あるいは原子論理式の否定のこと。 基礎リテラルとは、リテラルのうち、変数を含んでいないものを指す。 共通な変数を持たない2つの節に対して、節のそれぞれのリテラルで使って再汎単一化要素をもち、二次元導出系 (英: binary resolvant) を作る場合に導出に使われたリテラル (英: literal resolved upon) と呼ぶ。共通の変数を含まない2つの節で、推論した節の二次元等号調整系 (英: binary paramodulant) を作ったとき、等号調整に使われたリテラル (英: literal paramodulated upon) という。 この節の正確性に疑問が呈されています。問題箇所に信頼できる情報源を示して、記事の改善にご協力ください。議論はノートを参照してください。(2018年12月) この節の文章は日本語として不自然な表現、または文意がつかみづらい状態になっています。文意をわかりやすくするよう、修正が必要とされています。(2018年12月) コンピュータプログラミング言語においてリテラルは、ソースコード内に値を直接表記したものをいう。言語によってリテラルとして表記できる型の種類や表記方法は異なる。簡略に記述できることが好まれるスクリプティング言語はリテラルの種類が多い傾向にある。リテラル表記ができるかどうかはその型が第一級オブジェクトかどうかを検討する材料にもなるが、必ずしもそうとは限らない[注釈 1]。静的に構文解析が可能なことが多いためシンタックスハイライトではたいてい色分けされる。なお言語によっては(標準規格等で)このリテラルのことを指して「定数」という用語を使っている場合もあるが、「リテラル」という語と使い分ける場合は、「定数」とは「初期化できるだけで、その後は値を変えられない変数」というようなものを指す。
数理論理学
コンピュータプログラミング
数値
整数、浮動小数点数はほとんどの言語でサポートされる。他にも固定小数点数、複素数、実数、分数などに対応する言語がある。同じ種類のリテラルに対応していても言語ごとに機能面で違いがある。以下に挙げるのはその代表的なもの。
10進法以外に、2進法、8進法、16進法で表記できるか。また、その表記法。
0.1F のように型を明示するためのサフィックスがあるか。
0.1 を .1 と整数部を省略して書けるか。
数値の間に桁区切りとして _ などを挟めるか[注釈 2]。
文字型
'A'のようにシングルクォートで文字を挟み、エスケープシーケンスが使える場合が多い。ASCIIやUnicodeの1文字を表すものがある。Schemeでは #\A、#\newline などのような記法である。SGML などでは λ、ዀ などのような記法である。文字コードを表すと考えて、数値型に含める場合もある。
文字列型(文字列リテラル)
"this is a string literal"のようにダブルクォートや、シングルクォートで文字列を囲む場合が多いが、一つの言語に複数の記述法があり、特殊な記法が用意される場合もある。その際にはエスケープシーケンスの処理、文字列補間(式展開)の有無、文字列の終わりの解釈などがそれぞれ異なる。また、改行やホワイトスペースをそのまま反映する文字列リテラルの記法をヒアドキュメントと呼ぶ。特にプログラミング言語のソースコード内にスクリプト言語やデータ記述言語のソースコードを文字列として記述したり、正規表現を文字列として記述したりするときに便利である。C++11では生の文字列リテラル (raw string literal) と呼ばれる。C#ではもともと逐語的文字列リテラル (verbatim string literal) と呼ばれる機能が備わっていたが、C# 11ではさらにダブルクォートのエスケープも不要となる生文字列リテラルの機能が追加された[6]。
関数
関数リテラルは関数を第一級オブジェクトとして扱える言語に備わっている。無名関数(ラムダ式)を表現する。クラスなどに関数が定義できるだけでは関数リテラルとはみなされない。同様の機能であっても関数リテラルと呼ばない言語もある。第一級関数も参照。
正規表現
/regex/のようにスラッシュで挟む。「大文字小文字を区別しない」等々のオプションが後ろに付けることができるような仕様であることが多い[要説明]。
配列
配列のリスト初期化構文をサポートする言語は多いが、配列のリテラルをサポートしているとは限らない。C言語をはじめとするC系の言語では、{1, 2, 3}のように要素をコンマで区切り、ブレースで囲む。ただしC/C++では、この記法は「初期化子リスト」であり、配列のリテラルではない[注釈 3]。Javaでは「配列初期化子」[7]、C#では「コレクション初期化子」[8]であり、ともに配列のリテラルではない。RubyやJavaScriptなどは、[1, 2, 3]のようにブラケットで囲む。Pythonはリストのリテラル[1, 2, 3]、タプルのリテラル(1, 2, 3)、セットのリテラル{1, 2, 3}をサポートするが、配列(数値用のコンパクトなコレクション表現)のリテラルはサポートしない[9]。OCamlおよびF#は配列のリテラル([。1; 2; 3 |]など)[10]およびリストのリテラル([ 1; 2; 3 ]など)[11]をサポートする。Goは[3]int{1, 2, 3}のように要素数と型を指定することで配列(固定長のコレクション)のリテラルとなる。[]int{1, 2, 3}のように要素数を省略するとスライス(可変長のコレクション)のリテラルとなる[12]。