인기있는 프로그래밍 언어가 다른 문자를 사용하여 문자열을 제시하지 않는 이유는 무엇입니까? [닫은

StackOverflow https://stackoverflow.com/questions/965425

문제

내가 아는 모든 프로그래밍 언어 (Perl, JavaScript, PHP, Python, ASP, ActionScript, Commodore Basic) 단일 및 이중 인용문을 사용하여 문자열을 구분합니다.

이것은 가야하는 지속적인 상황을 만듭니다. 좋은 길이 인용문은 문자열의 내용에서 매우 일반적이므로 인용문을 올바르게 처리합니다.

프로그래밍 언어가 사용되지 않는 이유는 무엇입니까? 줄을 제시하는 다른 캐릭터, 정상적인 대화에 사용되지 않는 것 , | 또는 { } 예를 들어) 그래서 우리는 우리의 삶을 계속할 수 있습니까?

이것이 사실입니까, 아니면 내가 뭔가를 간과하고 있습니까? 현대적인 프로그래밍 언어로 문자열에 따옴표를 사용하는 쉬운 방법이 있습니까?

인쇄 <<
나는 알고있다 여기 문서 구문이지만 작은 문자열 조작의 경우 지나치게 복잡하고 형식이 복잡해집니다.
끝;

업데이트 많은 사람들이 ASCII 문자 만 사용하는 것의 중요성에 대해 좋은 지적을했습니다. 나는 그것을 반영하기 위해 예제를 업데이트했다 ( 백 슬래시,, 파이프 그리고 바지 멜빵).

도움이 되었습니까?

해결책

Python에는 트리플 이중 인용물을 사용하여 추가 문자열 유형이 있습니다.

"""like this"""

이 외에도 Perl은 원하는 구분기를 사용할 수 있습니다.

q^ like this ^

나는 대부분의 경우 일반 문자열 구분 장치가 의미가 있기 때문에 사용된다고 생각합니다. 문자열은 따옴표로 랩핑됩니다. 이 외에도, 대부분의 개발자는 문자열이 제시되는 방식을 크게 바꾸는 문자열과 관련하여 상식을 사용하는 데 익숙합니다. 학습 곡선이 어려울 수 있습니다.

다른 팁

Perl을 사용하면 사용할 수 있습니다 좋아하는 캐릭터

 "foo $bar" eq
 qq(foo $bar) eq
 qq[foo $bar] eq
 qq!foo $bar! eq
 qq#foo $bar# etc

Meanwhile
 'foo $bar' eq
 q(foo $bar) eq
 q[foo $bar] eq
 q!foo $bar! eq
 q#foo $bar# etc

구문은 정규 표현식을 포함한 다른 기능으로 확장되며 URI를 다루는 경우 편리합니다.

 "http://www.example.com/foo/bar/baz/" =~ /\/foo/[^\/]+\/baz\//;
 "http://www.example.com/foo/bar/baz/" =~ m!/foo/[^/]+/baz/!;

현재 : "타자기" '인용'마크

현재 사용중인 견적 마크를 사용하는 데 많은 이유가 있습니다.

  • 키보드에서 인용문을 쉽게 찾을 수 있습니다 - 따라서 입력하기 쉽고 문자열이 너무 자주 필요하기 때문에 쉽게해야합니다.

  • 인용문은 ASCII에 있습니다 - 대부분의 프로그래밍 도구는 ASCII 만 처리합니다. 상상할 수있는 거의 모든 환경에서 ASCII를 사용할 수 있습니다. 그리고 일부 멀리 떨어진 서버에서 텔넷 연결을 통해 프로그램을 수정하는 경우 중요합니다.

  • 따옴표는 여러 버전으로 제공됩니다 - 단일 따옴표, 이중 따옴표, 뒤 따옴표. 따라서 언어는 다르게 인용 된 문자열에 대해 다른 의미를 할당 할 수 있습니다. 이러한 다른 인용문은 또한 '인용문 "내부 인용문'문제를 해결할 수 있습니다.

  • 인용문은 자연 스럽습니다 - 프로그래밍 언어가 뒤 따르기 오래 전에 텍스트 구절을 표시하는 데 영어 사용 된 따옴표. 언어학에서 인용문은 프로그래밍 언어와 동일한 방식으로 사용됩니다. 따옴표는 자연적이며 동일한 방식 +와 - 추가 및 하위 계열에 자연 스럽습니다.

대안 : "타입으로" '올바른'인용문

기술적으로 그들은 우수합니다. 한 가지 큰 장점은 개방과 닫는 따옴표를 쉽게 차별화 할 수 있다는 것입니다. 그러나 그들은 입력하기가 어렵고 ASCII에 있지 않습니다. (이 stackoverflow 글꼴에서 볼 수 있도록 헤드 라인에 넣어야했습니다.)

ASCII만이 역사가만이 관심을 갖고 키보드가 완전히 다른 것으로 바뀌었을 때 (우리가 키보드를 전혀 가질 것이라면) 더 나은 따옴표를 사용하는 프로그래밍 언어가 올 것입니다 ...

Python에는 트리플 더블 인용문 "" "일부 문자열" ""가있는 대체 문자열 구분 기가 있습니다.

단일 따옴표와 이중 인용문은 대부분의 언어로 사용됩니다. 왜냐하면 그것은 대부분의 서면 언어로 표준 구분 기이기 때문입니다.

언어 (해야하는)는 가능한 한 이해하기 간단하게 이해하려고 노력하고, 인용문과 다른 것을 사용하여 현을 다루는 것은 불필요한 복잡성을 소개합니다.

인용 표시를 사용하여 문자 세트를 동봉 텍스트와 별도로 정의하는 것은 우리에게 더 자연스럽고 읽기가 더 쉽습니다. 또한 "및 '는 키보드에 있으며, 언급 한 다른 캐릭터는 아니기 때문에 입력하기가 더 쉽습니다. 키보드에서 널리 사용할 수있는 캐릭터를 사용할 수는 있지만이기는 사람은 생각할 수 없습니다. 'T는 같은 종류의 문제가 있습니다.

E : 파이프 캐릭터를 놓쳤습니다. 실제로 실행 가능한 대안 일 수 있습니다. 현재 OR 연산자로 널리 사용되고 있으며 가독성 문제가 여전히 존재한다는 점을 제외하고.

당신이 나열된 다른 캐릭터는 ASCII가 아니기 때문입니다. 유니 코드에서 우리가 준비가되었거나 프로그래밍 언어가 필요한지 확실하지 않습니다 ...

편집 : {}, | 또는 , 그 기호는 이미 대부분의 언어로 의미가 있습니다. '{'and '}'에 대한 두 가지 다른 의미를 가진 c 또는 perl을 상상해보십시오!

| 수단 또는 일부 언어에서는 이미 문자열을 연결합니다. 그리고 가 구분 기자라면 어떻게 얻을 수 있습니까?

기본적으로, 나는 이것이 왜 문제인지 실제로 모르겠습니다. "정말 어렵습니까? C에서는 종종 %를 사용해야합니다.

아무도 인기를 얻은 다른 캐릭터를 사용하여 언어를 만들지 않았기 때문입니다.

캐릭터 변경에 대한 요구가 없기 때문에 대부분의 프로그래머는 표준 견적에 사용되며 현 상태를 바꿀 수있는 강력한 이유가 없기 때문입니다.

다음을 비교하십시오.

print "This is a simple string."
print "This \"is not\" a simple string."

print ¤This is a simple string.¤
print ¤This "is not" a simple string.¤

나는 두 번째가 더 쉽거나 읽기 쉬운 것처럼 느끼지 않습니다.

아, 그래서 당신은 구식 포트란을 원합니다. 여기서 문자열의 문자 수를 세고 다음과 같은 H 형식으로 포함시켜 인용 할 것입니다. 13HHello, World!. 언어 이름이 모든 모자였던 시절에 Fortran과 몇 가지 일을 한 사람으로서 인용 표시와 탈출하는 것은 좋은 일입니다. (예를 들어, 수동 문자 수에서 하나씩 꺼져 있으면 완전히 망쳐지지 않습니다.)

진지하게, 이상적인 해결책은 없습니다. 어느 시점에서 원하는 인용문이 포함 된 문자열이 항상 필요합니다. 실질적인 목적을 위해, 견적 구분자는 키보드에 있어야하고 쉽게 사용될 수 있기 때문에 쉽게 접근 할 수 있어야합니다. Perl 's q@...@ 문자열에 가능한 각 문자의 예가 포함되어 있으면 구문이 실패합니다. Fortran의 Hollerith 상수는 더욱 악화됩니다.

당신은 "인용문을 올바르게 대우하기 위해 많은 길이로 가야한다"고 말합니다. 그러나 그것은 텍스트 표현에만 있습니다. 모든 현대 언어는 문자열을 이진 블록으로 취급하므로 실제로 내용에 신경 쓰지 않습니다. 텍스트 표현은 프로그래머가 시스템에 무엇을 해야하는지 알려주는 간단한 방법 일뿐입니다. 문자열이 인턴되면 따옴표를 관리하는 데 아무런 문제가 없습니다.

한 가지 좋은 이유는 아마도 이것이 기존 언어로 향상시키고 싶은 유일한 것이라면 실제로 새로운 언어를 만들지 않았기 때문일 것입니다.

그리고 새로운 언어를 만들고 있다면 문자열 인용구에 대한 올바른 문자를 선택하는 것은 아마도 실제로 구현할 것들의 목록에서 벗어날 수 있습니다.

모든 일반적인 키보드 및 터미널 표현 세트에 존재하는 구분기를 선택하는 것이 가장 좋을 것입니다.

어쨌든 인용 메커니즘이 여전히 필요합니다 ... 비전문가가 읽기가 더 어려워지는 비용으로 인용하는 시간을 줄입니다.

따라서 이것이 승리라는 것이 확실하지 않으며 습관의 힘이 있습니다.

ADA는 문자열에 단일 따옴표를 사용하지 않습니다. 그것들은 숯만을위한 것이며 문자열 내부에서 탈출 할 필요가 없습니다.

컴퓨터 프로그램에 입력하는 이중 쿼트 문자가 일반 텍스트 문자열로 등장하는 것은 매우 드 rare니다. 그렇다면, 그 문자열을 명령 통역사에게 전달하고 다른 문자열을 포함시켜야하기 때문입니다.

나는 다른 문자들 중 어느 것도 문자열 구분자에 사용되지 않는 주된 이유는 원래 7 비트 ASCII 코드 테이블에 있지 않기 때문입니다. 아마도 그것은 요즘 좋은 변명은 아니지만, 대부분의 언어 디자이너가 미친 듯이 Crappy C 구문을 쫓아내는 것을 두려워하는 세상에서는 특이한 문자열 디미터 선택을 위해 많은 테이커를 얻지 못할 것입니다.

Python을 사용하면 단일 및 이중 인용문을 혼합하여 따옴표를 문자열에 넣을 수 있습니다.

print "Please welcome Mr Jim 'Beaner' Wilson."
>>> Please welcome Mr Jim 'Beaner' Wilson.

print 'Please welcome Mr Jim "Beaner" Wilson.'
>>> Please welcome Mr Jim "Beaner" Wilson

이전에 언급 된 트리플 인용문을 사용할 수도 있습니다. 이것들은 또한 여러 줄에 걸쳐 확장되어 최신 라인을 인쇄하지 못하게 할 수 있습니다.

print """Please welcome Mr Jim "Beaner" Wilson."""
>>> Please welcome Mr Jim "Beaner" Wilson

마지막으로, 다른 사람들과 같은 방식으로 문자열을 인쇄 할 수 있습니다.

print "Please welcome Mr Jim \"Beaner\" Wilson."
>>> Please welcome Mr Jim "Beaner" Wilson
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top