web-dev-qa-db-ja.com

「リテラル」という言葉の意味は何ですか?

リテラル文字列やリテラル値などのコンテキストで使用される場合、「リテラル」という言葉はどういう意味ですか?

リテラル値と値の違いは何ですか?

70
prodev42

リテラルとは、「ソースコード内の値を表すの表記」(- wikipedia

(これをidentifiersと比較し、これはreferをメモリ内の値に参照します。)

例:

  • _"hey"_(文字列)
  • false(ブール値)
  • _3.14_(実数)
  • _[1,2,3]_(数字のリスト)
  • _(x) => x*x_(関数)
  • /^1?$|^(11+?)\1+$/(正規表現)

リテラルではないもの:

  • _std::cout_(識別子)
  • _foo = 0;_(ステートメント)
  • _1+2_(式)
108
Iraimbilanja

リテラルは、ソースに直接ハードコーディングされた値です。

例えば:

string x = "This is a literal";
int y = 2; // so is 2, but not y
int z = y + 4; // y and z are not literals, but 4 is
int a = 1 + 2; // 1 + 2 is not a literal (it is an expression), but 1 and 2 considered separately are literals

いくつかのリテラルは特別な構文を持つことができるため、リテラルのタイプを知っています。

//The 'M' in 10000000M means this is a decimal value, rather than int or double.
var accountBalance = 10000000M; 

それらを変数やリソースと区別するのは、コンパイラーがそれらを定数として扱うか、使用されているコードで特定の最適化を実行できるということです。

73
Joel Coehoorn

リテラルは、次のような明示的な値への割り当てです。

int i = 4;  // i is assigned the literal value of '4'
int j = i   // j is assigned the value of i.  Since i is a variable,  
            //it can change and is not a 'literal'

編集:指摘したように、割り当て自体はリテラルの定義とは関係がありません。私の例では割り当てを使用していましたが、リテラルをメソッドなどに渡すこともできます.

15
Ed S.

リテラルとは、ソースコードに値を含める場合です(変数または定数を参照するのではありません)。例えば:

int result = a + 5; // a is a variable with a value, 5 is a literal

string name = "Jeff Atwood"; // name is a variable initialized
                             // with the string literal, "Jeff Atwood"

int[] array = new int[] {1, 2, 3}; // C# has array literals (this is actually three
                                   // int literals within an array literal)

リテラルが物理定数などの量を表す場合、必要な場所に同じリテラルを記述するよりも、名前を付ける方が適切です。そうすれば、ソースコードを読んでいるとき、数字meansが何であるかがわかります。これは通常、その値よりも重要です(とにかく変わる可能性があります)。

const int maxUsers = 100;
const double gravitationalAcceleration = 9.8;

一般に、使用する数値リテラル(上記のような定数の初期化以外)は0または1であり、ループ内の他のすべての項目をスキップする場合は2です。数値の意味が実際の(通常)よりも重要な場合は、名前を付ける方が良いでしょう。

9
Matthew Crumley

リテラル値はa値ですが、値を変数に格納することもできます。声明で

string str = "string literal";

文字列変数(str)と文字列リテラルがあります。ステートメントが実行された後、両方は同じ値を持ちます。

多くの言語では、変数とリテラル値は必ずしも同じ型である必要はないことに注意してください。例えば:

int a = 1.0;

上記のリテラル値は浮動小数点型です。値は、int変数に適合するようにコンパイラーによって強制されます。

別の例として、上記のC++コードの最初の行では、文字列リテラルの型は実際にはライブラリ型stringではありません。 Cとの後方互換性を維持するために、C++の文字列リテラルはchar配列です。

6
Bill the Lizard

簡単な例:

int my_int_var = 723;

723-この文字セットは、リテラル整数値を参照します。

my_int_var-この文字セットは変数整数値を参照します。

4
mbeckish

リテラルとは、コードに入れるときです。したがって、文字列リテラルは

string s = "SomeText";

これは、文字列を構築したり、パラメータとして受け取ったりするのとは対照的です。

3
Anthony D

一般に、誰かがWordリテラルを使用する場合、他の投稿の多くの例に示されているように、値はコード(テキスト)から解読可能であることを意味します。

別の一般的な使用法は、アセンブリで即値に変換される値です。これらは、レジスタのロードを必要とするのではなく、機械語命令に直接挿入される値です。

2
SpaceghostAli

C#仕様 が実際に逐語的な文字列リテラルとして参照するものを参照するために、文字列リテラルがさりげなく使用されるのを聞いたことがあります。通常の文字列リテラルでは、タブの\ tのように、特定の文字(で始まる)をエスケープできます。逐語的文字列リテラルの前には@が付加され、逐語的に処理されます。\には特別な意味はありません。

//regular
string regular = "\thello world";
//verbatim
string verbatim = @"C:\";
//the regular equivalent of this would be "C:\\"
1
Timothy Carter

リテラルは「データのソースコード表現」です。

1
Koray Tugay

リテラルは、言語が非常に重要または基本的であると見なす特定の型の値の略記法であり、そのための専用の構文シュガーを持っています。

値がしばしばリテラルで表される型の例:

_Boolean = { true, false }
Integer = { ..., -2, -1, 0, 1, 2, ... }
Character = { 'a', 'b', ... }
String = { "hello", "world", ... }
_

一部の言語には、関数型でも literals があります。

_Integer -> Integer = { (x: Integer) => x + 2), (x: Integer) => x/2, ...}
_

通常リテラルで表されない値の例は、クラス型の値です。

_Car(brand: String, seats: Integer) = { Car("BMW", 5), Car("Ferrari", 2), ...}
_

ここでは、タイプCarの値Car("BMW", 5)は実際にシンボルのシーケンスを使用して一意に示されますが、値は専用の速記リテラルを使用して表されず、代わりに一般的な(冗長)概念を使用します任意のクラスタイプの値を示すメカニズム。

用語literalは用語valueinstanceconstantmember、およびelement型ですが、少し余分な意味がありますそれはそれを書き留めるための速記があることを教えてくれます。

概念を表現するためにアルファベットの文字をつなぎ合わせるのではなく、エジプトの象形文字としてリテラルを考えるのが好きです。

0
Mario Galic