"리터럴"이라는 단어는 무엇을 의미합니까?


80

리터럴 문자열 및 리터럴 값과 같은 컨텍스트에서 사용될 때 "리터럴"이라는 단어는 무엇을 의미합니까?

리터럴 값과 값의 차이점은 무엇입니까?

답변:


117

리터럴은 " 소스 코드 내의 값 을 나타내는 모든 표기법 "( wikipedia )

(이를 메모리의 값 을 참조 하는 식별자 와 대조 하십시오 .)

예 :

  • "hey" (문자열)
  • false (참이나 거짓)
  • 3.14 (실수)
  • [1,2,3] (숫자 목록)
  • (x) => x*x (기능)
  • /^1?$|^(11+?)\1+$/ (정규식)

리터럴이 아닌 것 :

  • std::cout (식별자)
  • foo = 0; (성명서)
  • 1+2 (표현)

슬프게도 나는 그것이 어떻게 소수성을 결정하는지 모릅니다. 멋져 보였기 때문에 어딘가에서 복사했습니다

1
그게 무슨 일인지 몰랐습니다. 그냥 정규식 리터럴을 보여주는 것이 좋은 생각이라고 생각했습니다.
Joel Coehoorn

4
"소스 코드 내에서 값을 나타내는 모든 표기법"오늘날 Wikipedia 정의는 교육적 목적을 제공하기보다는 이미 알고있는 전문가를위한 참조처럼 읽습니다. 위의 내용이 "5 인 것처럼 설명"으로 번역 된 것은 무엇입니까?
BKSpurgeon

2
@BKSpurgeon 기본적으로 프로그램을 실행하는 데 특별한 의미를 갖는 대신 프로그램의 값을 나타내는 코드입니다. 예를 들어 : 15 문자 그대로+ "두 가지를 함께 추가"라는 특별한 의미가있는 프로그램에서 15 개를 의미합니다. +리터럴이 아니기 때문에 더하기 기호 자체를 나타내는 것으로 취급 하지 않습니다.
avid_useR

82

리터럴은 소스에 직접 하드 코딩 된 값입니다.

예를 들면 :

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; 

변수 또는 리소스와 구별되는 점은 컴파일러가 상수로 처리하거나 사용되는 코드로 특정 최적화를 수행 할 수 있다는 것입니다. 변경되지 않을 것이 확실하기 때문입니다.


11
나는 당신이 얼마나 알고 있는지 보여 주려고 노력하는 대신에 당신이 방금 설명했던 방식을 좋아하여 초보자를 혼란스럽게 만듭니다. 우리는 당신 같은 사람이 더 필요합니다.
Mr. Smee

2
쉽고 설득력이 있습니다. 감사합니다
Johnny

16

리터럴은 다음과 같은 명시 적 값에 대한 할당입니다.

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'

편집 : 지적했듯이 할당 자체는 리터럴의 정의와 관련이 없으며 내 예제에서는 할당을 사용했지만 리터럴을 메서드 등에 전달할 수도 있습니다.


옙 : 리터럴이 할당과는 아무 상관이 없다)

사실입니다. 제가 할당을 사용하여 리터럴이 무엇인지 보여주고 있다는 사실을 명확히해야했습니다.
Ed S.

12

리터럴은 소스 코드에 값을 포함하는 경우입니다 (변수 또는 상수 참조와 반대). 예를 들면 :

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)

리터럴이 물리적 상수와 같은 양을 나타내는 경우 필요한 모든 곳에 동일한 리터럴을 쓰는 대신 이름을 지정하는 것이 좋습니다. 이렇게하면 소스 코드를 읽을 때 숫자가 의미하는 바를 알 수 있습니다 . 이는 일반적으로 값 (어쨌든 변경 될 수 있음)보다 더 중요합니다.

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

일반적으로 내가 사용하는 유일한 숫자 리터럴은 (위와 같이 상수를 초기화하는 것 외에) 0 또는 1이며, 루프의 다른 모든 항목을 건너 뛰는 경우 2입니다. 숫자 의 의미 가 실제 (보통 그렇습니다)보다 중요 하다면 이름을 지정하는 것이 좋습니다.


6

리터럴 값 값이지만 값을 변수에 저장할 수도 있습니다. 성명에서

string str = "string literal";

문자열 변수 (str)와 문자열 리터럴이 있습니다. 명령문이 실행 된 후 둘 다 동일한 값을 갖습니다.

많은 언어에서 변수와 리터럴 값이 반드시 동일한 유형일 필요는 없습니다. 예를 들면 :

int a = 1.0;

위의 리터럴 값은 부동 소수점 유형입니다. 값은 int 변수에 맞게 컴파일러에 의해 강제됩니다.

다른 예를 들어, C ++ 코드의 첫 번째 줄에서 문자열 리터럴 유형은 실제로 라이브러리 유형이 아닙니다 string. C와의 하위 호환성을 유지하기 위해 C ++의 문자열 리터럴은 char 배열입니다.


5

빠른 예 :

int my_int_var = 723;

723-이 문자 집합은 리터럴 정수 값을 나타냅니다 .

my_int_var-이 문자 세트는 가변 정수 값을 나타냅니다 .


3

리터럴은 코드에 넣을 때입니다. 따라서 문자열 리터럴은

string s = "SomeText";

이것은 문자열을 작성하거나 매개 변수로 사용하는 것과 반대입니다.


2

일반적으로 누군가가 리터럴이라는 단어를 사용하면 다른 게시물의 많은 예제에서 볼 수 있듯이 값을 코드 (텍스트)에서 해독 할 수 있음을 의미합니다.

또 다른 일반적인 용도는 어셈블리에서 즉치 값으로 변환되는 값입니다. 레지스터로드를 요구하지 않고 기계 명령어에 직접 삽입되는 값입니다.



1

C # 사양이 실제로 축어 문자열 리터럴로 지칭하는 것을 지칭하기 위해 우연히 사용되는 문자열 리터럴을 들었습니다 . 일반 문자열 리터럴을 사용하면 탭의 \ t와 같이 특정 문자 (접두사가 붙음)를 이스케이프 할 수 있습니다. 축어 문자열 리터럴은 @ 앞에 추가되고 축 어적으로 처리됩니다. \는 특별한 의미가 없습니다.

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

0

리터럴은 언어가 매우 중요하거나 기본적으로 간주하는 특정 유형의 값에 대한 축약 표기법이므로 전용 구문 설탕이 있습니다.

값이 종종 리터럴로 표현되는 유형의 예 :

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

일부 언어에는 함수 유형에도 리터럴 이 있습니다.

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

일반적으로 리터럴로 표시되지 않는 값의 예는 클래스 유형의 값입니다.

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

여기서 Car("BMW", 5)유형 의 값 Car은 기호 시퀀스를 사용하여 실제로 고유하게 표시되지만 값은 전용 속기 리터럴을 사용하여 표시되지 않고 대신 모든 클래스 유형의 값을 표시하기 위해 일반 (상세) 개념 메커니즘을 사용합니다.

리터럴 이라는 용어 는 value , instance , constant , member 및 유형의 요소 라는 용어 와 동의어 이지만이를 적어두기위한 속기가 있음을 알려주는 약간의 추가 의미가 있습니다.

개념을 표현하기 위해 알파벳에서 문자를 묶는 대신 리터럴을 이집트 상형 문자로 생각하고 싶습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.