왜 일부 언어는 탭 대신 공백을 사용하도록 권장합니까? [닫은]


10

어쩌면 나는 이것에 혼자 있지만 탭 대신 공백을 사용하여 들여 쓰는 사람들을 괴롭히는 것은 거의 없습니다. 타이핑 SpaceSpaceSpaceSpace보다 타이핑이 더 쉽고 직관적 Tab입니까? 물론 탭 너비는 가변적이지만 공백보다 들여 쓰기 공간을 훨씬 많이 나타냅니다. 백 스페이싱도 마찬가지입니다. 백 스페이스 한 번 또는 네 번?

파이썬과 같은 언어가 탭 위에 공백을 사용하도록 권장하는 이유는 무엇입니까?


24
를 누를 때 탭 대신 공백을 삽입하도록 대부분의 편집기를 구성 할 수 있습니다 tab. 선호하는 편집기에서 구성 할 수없는 경우 더 나은 편집기가 필요합니다.
Adam Lear

한 가지, 'tab'을 누를 때 4-8 개의 공백을 삽입하도록 많은 편집기를 설정할 수 있으므로 탭과 마찬가지로 한 번만 누르면됩니다.
에코는 모니카의 복원 고 모니카

2
여전히 내 질문에 대답하지 않습니다. 왜 탭 대신 공백이 필요한가? 물론 탭 대신 공백을 삽입하도록 편집기를 구성 할 수 있지만 공백이있는 탭을 삽입 할 수도 있습니다. 문제는 왜 이것을하고 싶습니까? 어떤 장점이 있습니까?
Naftuli Kay

4
@Tk Spaces는 분명한 탭 변경 가능
Martin Beckett

3
@TKKocheran, 실수로 탭을 문자열에 삽입하면 탭이 출력에 펑키 한 일을하기 때문에
zzzzBov

답변:


15

일관성, 주로.

또한 파이썬과 같은 공백을 실제로 사용하는 경우가 있습니다. 다음 코드 스 니펫을 실행하면 어떻게 될까요?

def foo():
    print "a"
    print "b"

답변 : 두 개의 print 문은 같은 수준에서 들여 쓰기되지 않으므로 같은 코드 블록의 일부가 아니기 때문에 IndentationError가 발생합니다. (첫 번째는 탭을 사용하고 두 번째는 모든 공백을 사용합니다)

한 개발자의 편집기가 탭을 8 칸으로 설정하고 다른 개발자가 4를 설정하고 다른 사람이 5를 사용하여 이상한 이유로 5를 사용하는 경우에는 실망스러운 경우가 있습니다. SVN과 다른 사람이 업데이트하면 끔찍하고 끔찍한 혼란이 나타납니다.

따라서 공백이든 탭이든 항상 일관된 두 가지 이유가 있습니다.

그러나 공백은 탭보다 들여 쓰기를 훨씬 더 많이 제어 할 수 있으며 편집기에서 특별한 구성을 요구하지 않습니다. (vim에서와 같이 더 쉬울 수는 있지만 set expandtab탭을 누를 때마다 공백을 삽입 하는 데 사용 하십시오)

편집 : 그리고 재미있게도, 사이트는 브라우저가 올바르게 표시 할 수 있도록 탭을 공백으로 정규화 한 것으로 보입니다. 포함 된 원본 탭을 보려면 "편집"을 클릭하십시오.


5
탭 관련 문제 (특히, 무시 무시한 SVN 엉망)는 편집기에서 탭-공백 옵션을 사용하는 경우에만 발생합니다. 당신과 당신의 팀이 탭에서 스페이스로 옵션을 사용하지 않기로 동의한다면, 탭은 항상 어떤 탭에서도 탭이 될 것입니다 : 그러면 에디터에서 얼마나 넓게 표시 할 것인지 선택하는 것입니다.
HorusKol

@HorusKol 아니요, 끔찍한 혼란은 공백과 탭이 혼합되어 있기 때문입니다. 나는 그것을 충분히 명백하게하지 않았다고 생각한다. 따라서 공백은 탭이 4 공백으로 설정되었을 때 탭과 잘 정렬되도록 만들어졌지만 다른 사람이 탭을 보았을 때 (탭 대 공백 설정 여부에 관계없이) 엉망이됩니다.
이즈 카타

4
나는 당신이 당신의 팀을위한 가이드 라인을 설정해야한다는 것을 알고있다-공간이나 탭을 지속적으로 사용 하든지 어느 쪽이든 탭-투-스페이스는 나쁜 생각이다.)
HorusKol

21
이것이 공백을 의미하는 언어라는 아이디어가 디자인 결함이라고 생각하는 이유입니다. 당신이 볼 수없는 것들이 결코 코드를 깨뜨리지 않아야합니다.
Paul Nathan

기록을 위해, 나는 @PaulNathan
Izkata에

11

이것은 파이썬에서 들여 쓰기와 공백에 대한 좋은 토론입니다. 기사에서 :

탭의 의미는 컴퓨터 세계에서 잘 정의되어 있지 않으며 다른 유형의 시스템 및 편집기에서 완전히 다르게 표시 될 수 있기 때문에 탭을 함께 사용하지 않는 것이 좋습니다. 또한 복사 및 붙여 넣기 작업 중 또는 웹 페이지 또는 다른 종류의 마크 업 코드에 소스 코드를 삽입 할 때 탭이 손상되거나 잘못 변환되는 경우가 종종 있습니다.

스페이스 바 또는 백 스페이스 키를 두 번 이상 누르는 것에 대한 귀하의 주장에 따르면, 대부분의 소스 코드 편집기는 탭 키를 한 번만 누르면 구성 가능한 수의 공백을 삽입하고 마찬가지로 들여 쓰기가 없으므로 더 이상 키를 누르지 않습니다. 들여 쓰기에 공백 사용.

필자는 IDE less에서 또는 메모장 에서 볼 때 코드가 항상 같은 양의 들여 쓰기로 표시되기 때문에 공백을 선호합니다 . 즉, 공간이 더 휴대 가능합니다.


3
re : "IDE 나 그 이하로 보든 메모장에서 보았는지, 즉 공간이 더 휴대하기 쉽다"-이것은 내가 들어 본 공간에 대한 가장 좋은 주장이다. 나는 "탭"녀석이지만 때때로 탭 간격 코드가 예기치 않은 방식으로 렌더링되는 것을 싫어했습니다.
Aerik

2

파이썬 들여 쓰기에서는 프로그램 흐름을 제어하므로 매우 중요합니다.
탭으로 포맷 된 코드를 가져 와서 복사하면 탭이 변경되거나 손실되도록 코드 구조가 손상됩니다. 공백은 항상 공백 = 훨씬 안전합니다.

스페이스 바의 마모가 걱정되는 경우 탭을 스페이스로 자동 변환하도록 편집기를 설정할 수 있습니다.


공백 또는 백 스페이스를 네 번 입력하는 데 소요되는 낭비되는 시간과 두 번의 키 입력을 모두 사용하는 데 낭비되는 시간이 더 걱정입니다.
Naftuli Kay

예, 그러나 파이썬은 그렇게 이상합니다. 나는 공간에 관심이있는 다른 것을 본 적이 없습니다.
Aerik

@ TKKocheran 오, 그게 진짜 걱정이야? 나는 그들이 어떻게했는지 모르겠지만, 백 스페이스가 마지막 공백으로 여러 공간에 걸쳐 완전히 투명하게 돌아가도록 vim이 설정되었습니다
Izkata

당신 .vimrc이 나를 위해 덤프 할 수 있습니다 :)
Naftuli Kay

1
@TKKocheran 그것을 찾았습니다. 단지 set softtabstop=4탭이며, 백 스페이스와 백 스페이스는 4 개의 공백을 탭으로 사용합니다. (글쎄, 각 탭
스톱

2

탭만으로는 여러 스타일에 대해 충분히 융통성이 없으며 탭과 공백을 거의 혼합하여 항상 엉망으로 만들기 때문에 공백은 항상 사용해야합니다.

일반적으로 공백이 필요한 한 스타일의 예는 다음과 같습니다.

call_some_function(parameter1,
                   parameter2,
                   parameter3,
                   parameter4,
                   parameter5,
                   parameter6,
                   parameter7);

모든 함수의 이름을 탭 크기의 괄호 (괄호는 1을 뺀 것)의 정확한 배수로 바꾸려는 경우가 아니라면 단순히이 작업을 수행하지 않습니다.

탭과 공백을 혼합하는 경우 거의 즉시 심각한 문제가 발생합니다. 탭이 일관되게 동일한 방식으로 확장되지는 않습니다. 일부 소프트웨어는 탭을 특정 수의 공백과 동등한 것으로 취급합니다. 다른 소프트웨어는 탭 모듈로를 특정 수의 공백으로 확장합니다. 예를 들어 탭 뒤의 항목은 항상 8의 배수 인 열 번호에서 시작합니다.

공백이 탭과 혼합되는 것을 막을 수는 있지만 여전히 문제가 있습니다. 탭은 가변 폭 글꼴에서 제대로 재생되지 않습니다. 이 문제는 (예를 들어) 후행 주석을 정렬하려는 경우에 발생합니다.

a.m = 9;   // this is the slope
a.i = 4;   // this is the intensity
a.x = 1;   // this is the x-intercept

그들이 지금 서있는 것처럼, 그것들은 모두 완벽하게 정렬됩니다. 그러나 가변 폭 글꼴로 볼 때 상황이 나빠집니다. 공백이 있으면 주석이 약간 잘못 정렬 될 수 있습니다. 그러나 탭을 사용하면 정렬 오류가 종종 급진적으로 나타납니다.

a.m = 9;          // this is the slope
a.i = 4;  // this is the intensity
a.x = 1;          // this is the x-intercept

가변 너비 글꼴에서 'i'와 'm'또는 'x'사이의 너비 차이가 갑자기 전체 탭 정지로 확대되었습니다.

결론은 거의 것입니다 어떤 당신이 상관없이, 탭 코드를 볼 수없는 방법의 변화가 어떻게 보이는 사소한, 일반적으로 읽을 수없는 혼란을 생성합니다 수 있습니다.

다른 질문에 대답하기 위해 : 다른 사람들은 이미 지적했지만 프로그래밍 편집기 (또는 다른 많은 것)에서 실제로 스페이스 바를 사용하여 공백을 삽입하는 사람을 상상할 수 없으므로 "typing spacespacespacespace"에 대한 질문 은 어쨌든 아무도 그렇게하지 않기 때문에 관련이 없습니다. 백 스페이스 간격과 마찬가지로 : BkSpc이전 탭 정지로 이동하기 위해 4 번을 눌러야하는 편집기를 상상하기는 어렵습니다 . 따라서 (다시) 질문은 관련이 없습니다.

결론 : 사용자 (만) 할 경우 탭이 괜찮 이제까지 당신의 코드를 보면, 당신은 오직 당신이하는 하나의 편집기를 사용하여이를 결코 , 그러나 너무 가까이 불가능에 (! 모두에서) 그 조건 재구성입니다 탭을 전혀 사용하지 마십시오.


1
"비례 글꼴은 공백과 탭을 모두 나누지 만 탭을 더 나쁘게 만들므로 공백을 사용하십시오"라고 말합니다. 탄성 탭 스톱을 사용하지 않는 이유는 무엇입니까? nickgravgaard.com/elastictabstops
amara

@ sparkleshy : 좋은 생각이지만 실제 코드와 차이가 없으며 모든 (또는 적어도 대다수의) 실제 편집자가 이미 포함 할 때까지는 그렇지 않습니다.
Jerry Coffin

... 알아요 : '(-글쎄요, 공백으로 뒷받침되는 편집기를 사용할 수 있습니다 (공백을 사용하는 경우 탭 키와 같은 것이어야 함). 그러나 그들은 탄성 탭 스톱 인 척합니다. 공백을 관리합니다. 쉽게.
아마라

2
비례 너비 글꼴로 프로그래밍하는 경우 걱정
할만한

1
@BrianKnoblauch : 글꼴 유로 퍼런 스를 사용하는 사람은 동의하지 않습니다. 나에게 문제를 일으키는 유일한 것은 공백입니다. 또한 들여 쓰기 스타일과 관련이 있습니다. 줄 사이에 탭이 두 개 이상 다르지 않습니다. 탄력있는 탭 스톱을 사용한다고 가정하면 코드가 훨씬 좋아집니다.
Magus

2

가장 큰 문제는 "탭"너비의 불일치가 때로는 4 개의 공간, 때로는 8 개의 공간으로 렌더링된다는 것입니다. 많은 편집자에서 1-9 사이의 공백으로 설정할 수 있습니다.

그래서 이것은 간단한 WYSWYG 편집기를 다른 사람이 얻을 수있는 것입니다.

파이썬에게는 특별한 문제이지만 들여 쓰기가 인간 독자에게 의미를 전달하고 엉망인 탭으로 코드를 읽기가 어렵 기 때문에 "중괄호"언어에서도 문제가됩니다.

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