リテラル

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

数理論理学

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

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

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

コンピュータプログラミング

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

数値
整数、浮動小数点数はほとんどの言語でサポートされる。他にも固定小数点、複素数、実数、分数などに対応する言語がある。
同じ種類のリテラルに対応していても言語ごとに機能面で違いがある。
  • 10進法以外に、2進法、8進法、16進法で表記できるか。また、その表記法。
  • 0.1F のように型を明示するためのサフィックスがあるか
  • 0.1.1 と整数部を省略して書けるか
  • 数値の間に _ を挟めるか
など
文字型
'A'のようにシングルクォートで文字を挟み、エスケープシーケンスが使える場合が多い。ASCIIUnicodeの1文字を表すものがある。Schemeでは #\A#\newline などのような記法である。SGML などでは λዀ などのような記法である。
文字コードを表すと考えて、数値型に含める場合もある。
文字列型
"this is a string literal"のようにダブルクォートや、シングルクォートで文字列を囲む場合が多いが、一つの言語に複数の記述法があり、特殊な記法が用意される場合もある。その際にはエスケープシーケンスの処理、文字列補間(式展開)の有無、文字列の終わりの解釈などがそれぞれ異なる。
また、改行ホワイトスペースをそのまま反映する文字列の記法をヒアドキュメントと呼ぶ。C#では逐語的文字列リテラル (verbatim string literal) と呼ばれる。C++11では生の文字列リテラル (raw string literal) と呼ばれる。
関数
関数リテラルは関数を第一級オブジェクトとして扱える言語に備わっている。
無名関数(ラムダ式)を表現する。クラスなどに関数が定義できるだけでは関数リテラルとはみなされない。
同様の機能であっても関数リテラルと呼ばない言語もある。第一級関数も参照。
正規表現
/regex/のようにスラッシュで挟む。「大文字小文字を区別しない」等々のオプションが後ろに付けることができるような仕様であることが多い。
配列
C言語をはじめとするC系の言語では、{1, 2, 3}のように要素をコンマで区切り、ブレースで囲む。RubyJavaScriptなどは、[1, 2, 3]のようにブラケットで囲む構文。
連想配列
一例としては、{"hoge":1, "piyo":2} といったように書く。このように書いた場合は、キーが"hoge"で値が1のペアと、キーが"piyo"で値が2のペアの配列を示す。言語によってキーと値の記号が{{{1}}}->であることがある。
オブジェクトリテラル
JavaScriptではオブジェクトが属性名と属性値のペアの集まりであり、(またクラスベースではなくプロトタイプベースオブジェクト指向であるためもあり、)前述の連想配列のようにしてオブジェクトをリテラルとして書ける。
JavaScriptにおける、オブジェクトリテラルと、その他の基本的なデータ型(文字列と数値)の記法の組合せは、ちょっとした構造のあるデータを記述するのに便利であり、JavaScriptの構文と意味からそれらの部分だけを取り出したサブセットであるデータ記述言語JSONがある。
構造体
(初期化)C言語C99規格以降では Designated Initializer (指示付きの初期化子ないし指示初期化子)により、任意の構造体において任意のメンバの初期値について指示ができる。
複合リテラル (compound literal)
C言語のC99規格以降では、compound literal(複合リテラル)により、配列: (int[]){ 1, 2, 3 } あるいは、構造体: (struct tm){ .tm_year = 107, .tm_mon = 7, .tm_mday = 24 } といったようにして、従来はリテラルを書けなかった型のうちいくつかについて、リテラルを書けるようになった。
ユーザー定義リテラル (user-defined literal)
C++C++11規格以降では、演算子オーバーロードによりプログラマが任意の型のリテラルを定義できるようになった[6]
null
nullnilnullptr
真偽値
false/true#f/#t
シンボル
'symbol:symbol
ベクター
#(1.2 3.4 cat)Schemeでの例)
範囲
[1, 8)Synopsys IC ValidatorPXL 言語での例)

下のC#コードにおいて、7, 3.14, "hello"がそれぞれの型のリテラルである。

int x = 7;
double pi = 3.14;
string s = "hello";

参考文献

  • Chang, Chin-Liang、Lee, Richard Char-Tung『コンピュータ定理の証明』27、長尾真、辻井潤一訳、日本コンピュータ協会 (編)〈コンピュータ・サイエンス研究書シリーズ〉、1983年9月。全国書誌番号:85013050NCID BN00844314 原書: Symbolic Logic and Mechanical Theorem Proving[7]

出典

  1. リテラル(直値)とは”. IT用語辞典 e-Words. インセプト (2019年4月4日). 2019年8月18日閲覧。
  2. C MAGAZINE編集部. プログラミングの禁じ手Web版 C言語編 - 記述テクニックに関するパターン”. C MAGAZINE for Web. 2007年4月8日時点のオリジナルよりアーカイブ。2019年8月18日閲覧。
  3. 吉賀 夏子 (2018年3月). 非構造化記述を含む文化財書誌に対するLinked Data化手法の開発 (PDF)”. p. 19. 2019年8月18日閲覧。
  4. リテラル”. IT用語辞典バイナリ. 2019年2月22日閲覧。
  5. ウィクショナリーのliteralの定義を参照。
  6. ユーザー定義リテラル - cpprefjp C++日本語リファレンス
  7. Chang, Chin-Liang; Lee, Richard Char-Tung (1973). Symbolic Logic and Mechanical Theorem Proving. Computer science and applied mathematics. Academic Press. NCID BA01082514

関連項目

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.