リテラル
![]() |
リテラル・
数理 論 理学
[リテラルとは、
コンピュータプログラミング
[![]() |
![]() |
コンピュータプログラミング
数値 整数 、浮動 小数点 数 はほとんどの言語 でサポートされる。他 にも固定 小数点 数 、複素数 、実数 、分数 などに対応 する言語 がある。同 じ種類 のリテラルに対応 していても言語 ごとに機能 面 で違 いがある。以下 に挙 げるのはその代表 的 なもの。- 10
進 法 以外 に、2進 法 、8進 法 、16進 法 で表記 できるか。また、その表記 法 。 0.1F
のように型 を明示 するためのサフィックスがあるか。0.1
を.1
と整数 部 を省略 して書 けるか。数値 の間 に桁 区切 りとして_
などを挟 めるか[注釈 2]。
- 10
文字 型 '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]。 連想 配列 一 例 としては、{"hoge":1, "piyo":2}
といったように書 く。このように書 いた場合 は、キーが"hoge"で値 が1のペアと、キーが"piyo"で値 が2のペアの配列 を示 す。言語 によって[要 出典 ]キーと値 の間 の記号 が=>
や->
であることがある[要 説明 ]。- オブジェクトリテラル
- JavaScriptではオブジェクトが
属性 名 と属性 値 のペアの集 まりであり、前述 の連想 配列 のようにしてオブジェクトをリテラルとして書 ける[注釈 4]。 - JavaScriptにおけるオブジェクトリテラルと、その
他 の基本 的 なデータ型 (文字 列 と数値 と真理 値 )のリテラル記法 の組 み合 わせは、階層 構造 を持 つデータを記述 するのに便利 である。データ記述 言語 のひとつに、JavaScriptの構文 と意味 からリテラルの部分 だけを取 り出 したサブセットとして規格 化 されたJSONがある。 構造 体 (レコード)構造 体 のリスト初期 化 や指示 付 き初期 化 の構文 をサポートする言語 は多 いが、構造 体 のリテラルをサポートしているとは限 らない。- C
言語 のC99規格 以降 では、designated initializer(指示 付 き初期 化 子 または指示 初期 化 子 )のサポートにより、任意 の構造 体 において任意 のメンバの初期 値 について指示 ができる。C++20規格 でも同様 の指示 付 き初期 化 機能 のサブセットが導入 された[13]。 複 合 リテラル (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
規格 以降 では、演算 子 オーバーロードによりプログラマが任意 の型 のリテラルを定義 できるようになった[14]。 - null
null
、nil
、nullptr
真偽 値 false
/true
、#f
/#t
- シンボル
'symbol
、:symbol
- ベクター
#(1.2 3.4 cat)
(Schemeでの例 )範囲 [1, 8)
(Synopsys IC Validator の PXL言語 での例 )
例
[7
, 3.14
, true
, "hello"
がそれぞれの
int x = 7;
double pi = 3.14;
bool flag = true;
string s = "hello";
C#ではリテラルもオブジェクトであり、
using System;
Console.WriteLine(7.GetType());
Console.WriteLine(3.14.GetType());
Console.WriteLine(true.GetType());
Console.WriteLine("hello".GetType());
System.Int32
System.Double
System.Boolean
System.String
参考 文献
[- Chang, Chin-Liang、Lee, Richard Char-Tung
著 、長尾 真 、辻井 潤一 訳 『コンピュータ定理 の証明 』 27巻 、日本 コンピュータ協会 (編 )〈コンピュータ・サイエンス研究 書 シリーズ〉、1983年 9月 。 NCID BN00844314。全国 書誌 番号 :85013050。原書 : Symbolic Logic and Mechanical Theorem Proving[15]
脚注
[注釈
[出典
[- ^ “リテラル(
直 値 )とは”. IT用語 辞典 e-Words. インセプト (2019年 4月 4日 ). 2019年 8月 18日 閲覧 。 - ^ C MAGAZINE
編集 部 . “プログラミングの禁 じ手 Web版 C言語 編 -記述 テクニックに関 するパターン”. C MAGAZINE for Web. 2007年 4月 8日 時点 のオリジナルよりアーカイブ。2019年 8月 18日 閲覧 。 - ^
吉賀 夏子 『非 構造 化 記述 を含 む文化財 書誌 に対 するLinked Data化 手法 の開発 :古 典籍 書誌 データへの適用 とその評価 』佐賀 大学 〈博士 (学術 )甲 第 623号 〉、2018年 、19頁 。 NAID 500001066985。NDLJP:11116091 。2024年 5月 19日 閲覧 。 - ^ “リテラル”. IT
用語 辞典 バイナリ. 2019年 2月 22日 閲覧 。 - ^ ウィクショナリーのliteralの
定義 を参照 。 - ^ Raw string literal - C# 11.0 draft specifications | Microsoft Learn
- ^ “Chapter 10. Arrays - §10.6. Array Initializers”. Java SE 8 Specifications > Java Language Specification. Oracle. 2023
年 4月 2日 閲覧 。 - ^ オブジェクト
初期 化 子 とコレクション初期 化 子 - C# プログラミング ガイド | Microsoft Learn - ^ array — Efficient arrays of numeric values — Python 3.11.2 documentation
- ^ Arrays in F# | Microsoft Learn
- ^ Lists - F# | Microsoft Learn
- ^ A Tour of Go - Slice literals
- ^
指示 付 き初期 化 - cpprefjp C++日本語 リファレンス - ^ ユーザー
定義 リテラル - cpprefjp C++日本語 リファレンス - ^ Chang, Chin-Liang; Lee, Richard Char-Tung (1973). Symbolic Logic and Mechanical Theorem Proving. Computer science and applied mathematics. Academic Press. NCID BA01082514