リテラル

リテラル・直値は、「文字どおり」「字義どおり」を意味する語で、letter}} と同じくラテン語の littera}}に由来する。数理論理学とコンピュータプログラミングで異なる意味の専門用語として使われる。

1. 数理論理学
--------

リテラルとは、数理論理学において、原子論理式あるいは原子論理式の否定のこと。

基礎リテラルとは、リテラルのうち、変数を含んでいないものを指す。

共通な変数を持たない2つの節に対して、節のそれぞれのリテラルで使って再汎単一化要素をもち、二次元導出系  を作る場合に導出に使われたリテラル  と呼ぶ。共通の変数を含まない2つの節で、推論した節の二次元等号調整系  を作ったとき、等号調整に使われたリテラル  という。

2. コンピュータプログラミング
----------------

コンピュータプログラミング言語においてリテラルは、ソースコード内に値を直接表記したものをいう。言語によってリテラルとして表記できる型の種類や表記方法は異なる。簡略に記述できることが好まれるスクリプティング言語はリテラルの種類が多い傾向にある。リテラル表記ができるかどうかはその型が第一級オブジェクトかどうかを検討する材料にもなるが、必ずしもそうとは限らないC言語では配列および文字列のリテラル表記をサポートするが、これらは第一級オブジェクトではない。}}。静的に構文解析が可能なことが多いためシンタックスハイライトではたいてい色分けされる。なお言語によってはこのリテラルのことを指して「定数」という用語を使っている場合もあるが、「リテラル」という語と使い分ける場合は、「定数」とは「初期化できるだけで、その後は値を変えられない変数」というようなものを指す。

数値整数、浮動小数点数はほとんどの言語でサポートされる。他にも固定小数点数、複素数、実数、分数などに対応する言語がある。同じ種類のリテラルに対応していても言語ごとに機能面で違いがある。以下に挙げるのはその代表的なもの。
10進法以外に、2進法、8進法、16進法で表記できるか。また、その表記法。
0.1F のように型を明示するためのサフィックスがあるか。
0.1 を .1 と整数部を省略して書けるか。
数値の間に桁区切りとして _ などを挟めるかJavaや[[C Sharp。文字型'A'のようにシングルクォートで文字を挟み、エスケープシーケンスが使える場合が多い。ASCIIやUnicodeの1文字を表すものがある。Schemeでは #\A、#ewline などのような記法である。en などでは λ、ዀ などのような記法である。

文字コードを表すと考えて、数値型に含める場合もある。文字列文字列型"this is a string literal"のようにダブルクォートや、シングルクォートで文字列を囲む場合が多いが、一つの言語に複数の記述法があり、特殊な記法が用意される場合もある。その際にはエスケープシーケンスの処理、文字列補間の有無、文字列の終わりの解釈などがそれぞれ異なる。また、改行やホワイトスペースをそのまま反映する文字列リテラルの記法をヒアドキュメントと呼ぶ。特にプログラミング言語のソースコード内にスクリプト言語やデータ記述言語のソースコードを文字列として記述したり、正規表現を文字列として記述したりするときに便利である。C++11では生の文字列リテラル  と呼ばれる。C#ではもともと逐語的文字列リテラル  と呼ばれる機能が備わっていたが、C# 11ではさらにダブルクォートのエスケープも不要となる生文字列リテラルの機能が追加された。関数関数リテラルは関数を第一級オブジェクトとして扱える言語に備わっている。無名関数を表現する。クラスなどに関数が定義できるだけでは関数リテラルとはみなされない。同様の機能であっても関数リテラルと呼ばない言語もある。第一級関数も参照。正規表現/regex/のようにスラッシュで挟む。「大文字小文字を区別しない」等々のオプションが後ろに付けることができるような仕様であることが多いdate=2018年12月}}。配列配列のリスト初期化構文をサポートする言語は多いが、配列のリテラルをサポートしているとは限らない。C言語をはじめとするC系の言語では、{1, 2, 3}のように要素をコンマで区切り、ブレースで囲む。ただしC/C++では、この記法は「初期化子リスト」であり、配列のリテラルではないC++11以降は、std::initializer_list型となる。}}。Javaでは「配列初期化子」、C#では「コレクション初期化子」であり、ともに配列のリテラルではない。RubyやJavaScriptなどは、[1, 2, 3]のようにブラケットで囲む。Pythonはリストのリテラル[1, 2, 3]、タプルのリテラル、セットのリテラル{1, 2, 3}
をサポートするが、配列のリテラルはサポートしない。OCamlおよびF#は配列のリテラルおよびリストのリテラルをサポートする。Goは[3]int{1, 2, 3}のように要素数と型を指定することで配列のリテラルとなる。[]int{1, 2, 3}のように要素数を省略するとスライスのリテラルとなる。連想配列一例としては、{"hoge":1, "piyo":2} といったように書く。このように書いた場合は、キーが"hoge"で値が1のペアと、キーが"piyo"で値が2のペアの配列を示す。date=2023-04キーと値の間の記号が=>や->であることがあるdate=2018年12月}}。オブジェクトリテラルJavaScriptではオブジェクトが属性名と属性値のペアの集まりであり、前述の連想配列のようにしてオブジェクトをリテラルとして書けるJavaScriptはもともとクラスベースではなくプロトタイプベースのオブジェクト指向ということもあり、このような記法が標準的にサポートされている。}}。JavaScriptにおけるオブジェクトリテラルと、その他の基本的なデータ型のリテラル記法の組み合わせは、階層構造を持つデータを記述するのに便利である。データ記述言語のひとつに、JavaScriptの構文と意味からリテラルの部分だけを取り出したサブセットとして規格化されたJSONがある。構造体構造体のリスト初期化や指示付き初期化の構文をサポートする言語は多いが、構造体のリテラルをサポートしているとは限らない。C言語のC99規格以降では、designated initializerのサポートにより、任意の構造体において任意のメンバの初期値について指示ができる。C++20規格でも同様の指示付き初期化機能のサブセットが導入された。複合リテラル C言語のC99規格以降では、compound literalのサポートにより、従来はリテラルを書けなかった型のうちいくつかについて、リテラルを書けるようになった。例えば、配列の場合は{ 1, 2, 3 }のように書き、構造体の場合は{ .tm_year = 107, .tm_mon = 7, .tm_mday = 24 }のように書く。ユーザー定義リテラル
C++のC++11規格以降では、演算子オーバーロードによりプログラマが任意の型のリテラルを定義できるようになった。nullnull、nil、nullptr真偽値false/true、#f/#tシンボル'symbol、:symbolベクター#範囲[1, 8)

2.1. 例
------

下のC#コードにおいて、7, 3.14, true, "hello"がそれぞれの型のリテラルである。 int x = 7; double pi = 3.14; bool flag = true; string s = "hello"; C#ではリテラルもオブジェクトであり、以下のようにメソッドを呼び出すこともできる。 using System;

Console.WriteLine); Console.WriteLine); Console.WriteLine); Console.WriteLine);<WtXmlEndTag /> 出力結果は以下のようになる。 System.Int32 System.Double System.Boolean System.String

3. 参考文献
-------

和書 原書: Symbolic Logic and Mechanical Theorem Proving

4. 脚注
-----

4.1. 注釈
-------

4.2. 出典
-------

5. 関連項目
-------

値