(Translated by https://www.hiragana.jp/)
リテラル - Wikipedia コンテンツにスキップ

リテラル

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

リテラルちょく[1][2][3]えい: literal)は、「文字もじどおり」「字義じぎどおり」を意味いみするかたりで、letterおなじくラテン語らてんごlittera文字もじ)に由来ゆらいする。数理すうりろん理学りがくとコンピュータプログラミング[4]ことなる意味いみ専門せんもん用語ようごとして使つかわれる[5]

数理すうりろん理学りがく

[編集へんしゅう]

リテラルとは、数理すうりろん理学りがくにおいて、原子げんし論理ろんりしきあるいは原子げんし論理ろんりしき否定ひていのこと。

基礎きそリテラルとは、リテラルのうち、変数へんすうふくんでいないものをす。

共通きょうつう変数へんすうたない2つのふしたいして、ふしのそれぞれのリテラルで使つかってさいひろし単一化たんいつか要素ようそをもち、次元じげん導出どうしゅつけい (えい: binary resolvant) をつく場合ばあい導出どうしゅつ使つかわれたリテラル (えい: literal resolved upon) とぶ。共通きょうつう変数へんすうふくまない2つのふしで、推論すいろんしたふし次元じげん等号とうごう調整ちょうせいけい (えい: binary paramodulant) をつくったとき、等号とうごう調整ちょうせい使つかわれたリテラル (えい: literal paramodulated upon) という。

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

[編集へんしゅう]

コンピュータプログラミング言語げんごにおいてリテラルは、ソースコードうち直接ちょくせつ表記ひょうきしたものをいう。言語げんごによってリテラルとして表記ひょうきできるかた種類しゅるい表記ひょうき方法ほうほうことなる。簡略かんりゃく記述きじゅつできることがこのまれるスクリプティング言語げんごはリテラルの種類しゅるいおお傾向けいこうにある。リテラル表記ひょうきができるかどうかはそのかただいいちきゅうオブジェクトかどうかを検討けんとうする材料ざいりょうにもなるが、かならずしもそうとはかぎらない[注釈ちゅうしゃく 1]静的せいてき構文こうぶん解析かいせき可能かのうなことがおおいためシンタックスハイライトではたいてい色分いろわけされる。なお言語げんごによっては(標準ひょうじゅん規格きかくとうで)このリテラルのことをして「定数ていすう」という用語ようご使つかっている場合ばあいもあるが、「リテラル」というかたり使つかける場合ばあいは、「定数ていすう」とは「初期しょきできるだけで、そのえられない変数へんすう」というようなものをす。

数値すうち
整数せいすう浮動ふどう小数点しょうすうてんすうはほとんどの言語げんごでサポートされる。ほかにも固定こてい小数点しょうすうてんかず複素数ふくそすう実数じっすう分数ぶんすうなどに対応たいおうする言語げんごがある。
おな種類しゅるいのリテラルに対応たいおうしていても言語げんごごとに機能きのうめんちがいがある。以下いかげるのはその代表だいひょうてきなもの。
  • 10しんほう以外いがいに、2しんほう、8しんほう、16しんほう表記ひょうきできるか。また、その表記ひょうきほう
  • 0.1F のようにかた明示めいじするためのサフィックスがあるか。
  • 0.1.1整数せいすう省略しょうりゃくしてけるか。
  • 数値すうちあいだけた区切くぎりとして _ などをはさめるか[注釈ちゅうしゃく 2]
文字もじがた
'A'のようにシングルクォート文字もじはさみ、エスケープシーケンス使つかえる場合ばあいおおい。ASCIIUnicodeの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]であり、ともに配列はいれつのリテラルではない。
RubyJavaScriptなどは、[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
nullnilnullptr
真偽しんぎ
false/true#f/#t
シンボル
'symbol:symbol
ベクター
#(1.2 3.4 cat)Schemeでのれい
範囲はんい
[1, 8)Synopsys IC ValidatorPXL 言語げんごでのれい

したのC#コードにおいて、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());

出力しゅつりょく結果けっか以下いかのようになる(C#のがたは、.NETのCLRかたへのエイリアスである)。

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]

脚注きゃくちゅう

[編集へんしゅう]

注釈ちゅうしゃく

[編集へんしゅう]
  1. ^ C言語げんごでは配列はいれつ固定こていちょう配列はいれつ)および文字もじれつヌル終端しゅうたん文字もじれつ)のリテラル表記ひょうきをサポートするが、これらはだいいちきゅうオブジェクトではない。
  2. ^ JavaC#など、対応たいおうしているほとんどの言語げんごではアンダースコア_使つかうが、C++ではシングルクォート'使つかう(C++14以降いこう)。
  3. ^ C++11以降いこうは、std::initializer_listかたとなる。
  4. ^ JavaScriptはもともとクラスベースではなくプロトタイプベースオブジェクト指向しこうということもあり、このような記法きほう標準ひょうじゅんてきにサポートされている。

出典しゅってん

[編集へんしゅう]
  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. ^ 吉賀よしか夏子なつこ構造こうぞう記述きじゅつふく文化財ぶんかざい書誌しょしたいするLinked Data手法しゅほう開発かいはつ : 典籍てんせき書誌しょしデータへの適用てきようとその評価ひょうか佐賀さが大学だいがく博士はかせ学術がくじゅつかぶとだい623ごう〉、2018ねん、19ぺーじNAID 500001066985NDLJP:11116091https://saga-u.repo.nii.ac.jp/records/222332024ねん5がつ19にち閲覧えつらん 
  4. ^ リテラル”. IT用語ようご辞典じてんバイナリ. 2019ねん2がつ22にち閲覧えつらん
  5. ^ ウィクショナリーのliteral定義ていぎ参照さんしょう
  6. ^ Raw string literal - C# 11.0 draft specifications | Microsoft Learn
  7. ^ Chapter 10. Arrays - §10.6. Array Initializers”. Java SE 8 Specifications > Java Language Specification. Oracle. 2023ねん4がつ2にち閲覧えつらん
  8. ^ オブジェクト初期しょきとコレクション初期しょき - C# プログラミング ガイド | Microsoft Learn
  9. ^ array — Efficient arrays of numeric values — Python 3.11.2 documentation
  10. ^ Arrays in F# | Microsoft Learn
  11. ^ Lists - F# | Microsoft Learn
  12. ^ A Tour of Go - Slice literals
  13. ^ 指示しじ初期しょき - cpprefjp C++日本語にほんごリファレンス
  14. ^ ユーザー定義ていぎリテラル - cpprefjp C++日本語にほんごリファレンス
  15. ^ Chang, Chin-Liang; Lee, Richard Char-Tung (1973). Symbolic Logic and Mechanical Theorem Proving. Computer science and applied mathematics. Academic Press. NCID BA01082514 

関連かんれん項目こうもく

[編集へんしゅう]