if i>0 : return sqrt(i)
elif i==0: return 0
else : return 1j * sqrt(-i)
대
if i>0:
return sqrt(i)
elif i==0:
return 0
else:
return 1j * sqrt(-i)
위의 예,I don't 왜 이해가 거의 볼 수 없는 첫 번째 스타일 코드 기반합니다. 나에게 당신이 설정 코드로 표 형식으로 보여주는 명확하게 당신이 무엇을 원합니다. 첫 번째 열 수 있는 사실상으로 무시한다. 두 번째 열의 조건을 식별하고 세 번째 열은 당신은 당신이 원하는 출력. 그것은 보인다,최고,앞으로 그리고 쉽게 읽을 수 있습니다. 아직 내가 이 간단한 종류의 케이스/스위치 상황에서 확장,탭을 들여쓰기 형식입니다. 그 이유는 무엇입니까? 할 사람들이 찾는 두번째 형식으로 더 읽?
유일한 경우 이 문제가 될 수 있는 경우에는 코드를 변경하고 더 이상 얻을. 는 경우에,나는 그것이's 완벽하게 적당한 형식으로 부호의 길로 들여쓰기 형식입니다. 는 모두 그것은 두 번째 방법이기 때문에 단순히's 는 방식 그것은 항상 수행되었다? 되는 악마를's 옹호,나는 또 다른 이유가 될 수도 있기 때문에 사람들이 찾는 두 개의 서로 다른 포맷에 따라 복잡도의 경우 다른 문을 혼란? 어떤 통찰력을 감사하겠습니다.
It's 있습니다. 몇 가지 이유가:
-거의 모든 언어를 이용합니다 이 구문(모든 most-의 예에서 나타나는 파이썬만) -isanae 에 지적 comment는 대부분의 디버거는 선반(지 문을 기준) -그것은 시작한다 더 추한 경우에 당신을 인라인 세미콜론 또는 교정기 -그것을 읽기 위 아래로 더 부드럽게 -보 horribly unreadable 이 있는 경우 이외의 다른 사소한 반품 문의 -모든 들여쓰기 의미있는 구문을 잃었을 때 당신은 탈지 코드를 조건 코드 없이 시각적으로 분리(에서Dan Neely) -이 될 것입니다 특히 나쁜 계속할 경우 패치/추가 항목으로 1 만약 문의 -It's 만 읽을 수 있는 모든 경우의 경우에 확인에 대한 동일한 길이 -의미할 수 없는 형식의 복잡는 경우에 문으로 여러 문니다,그들은 have 수 oneliners -나는 훨씬 더 가능성이 알 버그/logicflow 읽을 때 수직 라인 라인에 의해 작성하고,구문 분석하 여러 개인 함께 우리의 뇌를 읽고 좁은,키가 텍스트 보다 훨씬 더 빠른 길이,가로 텍스트
분을 시도하시는 모든 이에 끝날 것이 다시 쓰기로 여러 줄의 문이 있습니다. 즉 당신은 낭비되는 시간!
또한 사람들은 필연적으로 무언가를 추가한다:
if i>0:
print('foobar')
return sqrt(i)
elif i==0:
return 0
else:
return 1j * sqrt(-i)
그't 을 매우 자주 이렇게 당신이 결정하기 전에 이 형식보다 더 많이 대안이다. Ah,하지만 당신은 수 있는 인라인에서 모든 것에 한 줄! enderland 에서 죽는 inside.
나이:
if i>0 : return sqrt(i)
elif i==0 and bar==0: return 0
else : return 1j * sqrt(-i)
정말,정말로 짜증나입니다. 아무도 좋아하는 형식과 같은 것들이다.
그리고 마지막으로,당신은 시작됩니다 성령의 전쟁"얼마나 많은 공간에 대한 탭"문제입니다. 무엇을 렌더링할에 완벽하게 당신의 스크린으로 테이블 형식으로 렌더링되지 않을 수 있습니다 내에 따라 설정합니다.
가독성해야에 의존하지 않 IDE 설정입니다.
하나의 이유가 있을 수 있습니다 당신이'다시 사용하지 않는 언어로 그것이's 인기가 있습니다.
몇 가지 반 예제:
켈들과 함께 패턴
sign x | x > 0 = 1
| x == 0 = 0
| x < 0 = -1
take 0 _ = []
take _ [] = []
take n (x:xs) = x : take (n-1) xs
얼랑으로 패턴
insert(X,Set) ->
case lists:member(X,Set) of
true -> Set;
false -> [X|Set]
end.
Emacs lisp:
(pcase (get-return-code x)
(`success (message "Done!"))
(`would-block (message "Sorry, can't do it now"))
(`read-only (message "The shmliblick is read-only"))
(`access-denied (message "You do not have the needed rights"))
(code (message "Unknown return code %S" code)))
일반적으로 표를 참조하십시오 형식은 매우 인기있는 기능성 언어(에서 일반적인 표현을 기반으로 사람),는 동안 깨는 라인에서 가장 인기있는 다른 사람(대부분 성명 기준).
난 굳게 믿는'코드가 여러 번 읽고,쓰는 몇-그래서 가독성은 매우 중요합니다.'
키 것은 나에게 도움이 읽을 때 다른 사람들이's 코드는 다음과 같'정상'는 패턴 내 눈을 훈련합니다. 내가 읽을 수 있는 양식을 들여 가장 쉽게 때문에 나는'봤어요 그것은 너무 많은 시간을 등록이 거의 자동으로(와 약간의 인지적 노력에 부분입니다.) It's 지 않기 때문에 그것이's'예쁜'--it's 기 때문에 그것을 따르는 규칙 나는'm 사용됩니다. 컨벤션 beats'나'...
와 함께 다른 단점은 이미 언급했듯이,레이아웃 테이블의 확률을 증가시킨 버전 관리 충돌을 요구하고 있습니다.
사 tabularly alined 코드를 요구할 재조정,버전 관리 시스템에 치료의 각 선에 있으로 수정되었:
diff --git a/foo.rb b/foo.rb
index 40f7833..694d8fe 100644
--- a/foo.rb
+++ b/foo.rb
@@ -1,8 +1,8 @@
class Foo
def initialize(options)
- @cached_metadata = options[:metadata]
- @logger = options[:logger]
+ @metadata = options[:metadata]
+ @logger = options[:logger]
end
end
지금 가정에서 다른 지점으로,프로그래머는 추가 새로운 라인의 블록을 정렬 코드:
diff --git a/foo.rb b/foo.rb
index 40f7833..86648cb 100644
--- a/foo.rb
+++ b/foo.rb
@@ -3,6 +3,7 @@ class Foo
def initialize(options)
@cached_metadata = options[:metadata]
@logger = options[:logger]
+ @kittens = options[:kittens]
end
end
병합하는 지점은 실패합니다.
wayne@mercury:/tmp/foo$ git merge add_kittens
Auto-merging foo.rb
CONFLICT (content): Merge conflict in foo.rb
Automatic merge failed; fix conflicts and then commit the result.
는 경우에는 코드 수정 사용하지 않았다 테이블 형식 정렬,병합 성공했을 것입 자동으로 합니다.
(이 대답했"강"에서내 자신의 문서낙담하는 테이블 형식 정렬 코드에서).
테이블 형식을 사용할 수 있는 경우에 아주 좋은 것은 항상 내에 할당된 폭입니다. 면 뭔가를 초과 할당된 폭,그러나,그것은 종종 필요한을 가지고 있거나 테이블의 일부는't 줄 지어진 그것의 나머지 부분,또는 다른 조정의 레이아웃에서 다른 모든 것 테이블에 맞게 맞 긴 항목입니다.
는 경우 원본 파일을 편집 프로그램을 사용하여 작동하도록 설계된와 테이블 형식의 데이터를 처리할 수 있어 지나치게 오래 사용하여 항목을 작은 글꼴 크기에,분할로 두 줄 이내에는 동일한 셀,etc. 그런 다음 그것을 할 수 있을 사용하는 표 형식으로 더 자주하지만,대부분 컴파일러를 원하는 소스 파일의 종류는 태그 등의 편집자가 필요하 저장을 유지하기 위해서는 포맷입니다. 를 사용하여 선을 가진 변수가 많은 양의 들여쓰기를 하지만 다른 레이아웃이 아't 로 테이블 포맷에서 최고의 경우,그't 원인이 거의 등 많은 문제가에서 최악의 경우입니다.
있는'스위치'문을 제공하는 이런 종류의 특별한 경우에,그러나 나는's 지'다시 묻는 것에 대해입니다.
내가 있는 경우 본 문서는 테이블 포맷하지만,거기 많은 수의 조건에게 가치가 있습니다. 3 면 문장과 같이 전통적인 형식으로,그러나 당신이 20,다음의 표시들에는 큰 차단는's formatted 더욱 쉽게 확인할 수 있게 되었습니다.
고 있's point:니다. 면 그것은 그것을 쉽게(그리고 당신의 첫번째 예에는 것은 쉽지 않을 볼 수가:구분 기호입니다)그 다음 형식을 그에 맞는 상황이다. 그렇지 않으면 지팡이 무엇으로 사람들이 기대하는's 을 인식.
테이블 형식의 레이아웃에 유용할 수 있습니다 몇 가지 제한된 경우,그러나 몇 번을 이용하는 경우.
단순한 경우에는?: 더 나은 선택이 될 수 있습니다. 매체에 있는 경우에는 스위치입니다 종종 더 나은 맞(는 경우에 당신의 언어가 하나). 복잡한 경우에는 것을 찾을 수 있습니다 호출은 더 나은 맞습니다.
가 되었을 때 많은 시간 refactoring 코드가 재조 그것은 것 테이블 형식을 만드는's patern 명백합니다. 그것은 거의 경우는 내가 그것을 떠나에서 예수 그리스도를 나타내는 대부분의 경우에는 더 나은 방법으로 문제를 해결하기면 당신은 그것을 이해합니다. 때때로 코딩 방식 또는 레이아웃 표준을 금지,그것을 어떤 경우에는 의견 유용합니다.
거기에 몇 가지 질문에 대해?:
. 네,그것은 원자(또는 그것의 값은 경우). 에 첫째로 이 예에는 조금 복잡하는가?: (고 남용?: 는 데 도움이되지 않은 가독성 하지만 그것을 아픈)하지만,일부 생각 예를 다시 정렬할 수 있습으로 아래 하지만 나는 생각에서는 이 경우 전환이 가장 읽을 수 있는 솔루션입니다.
if i==0: return 0
return i>0?sqrt(i):(1j*sqrt(-i))
당신의 표현하는 것은 정말 쉽게 가장 프로그래밍 언어의 제공은?: 분기 운영자:
return ( i > 0 ) ? sqrt( i)
: ( i == 0 ) ? 0
/* else */ : 1j * sqrt( -i )
이것은 짧은 읽기 쉬운 형식으로. 그러나 중요한 부분은 다음과 같습니다.나는 한 눈에 무엇"중요한"습니다. 이것은 돌아 성공적으로 완료되었습니다! 값은 특정 조건에 의해 결정.
는 경우 다른 한편으로는 당신이 가지는 실행하는 코드를 다르게 설정하고,내가 그것을 찾을 더 많이 읽을 들여 이러한 블록입니다. 지금 있기 때문에 다른"중요한"작업에 따라하는 경우-statement. 에서 하나의 경우리,하나의 경우에는 로그와 반환 또는 반환합니다. 다른 프로그램의 흐름에 따라 논리,그래서 코드 블럭을 캡슐화는 다양 가지고 그들을 더 유명 개발자를 위해(예를 들어 속독하는 기능을 파악 프로그램의 흐름)
if ( i > 0 )
{
throw new InvalidInputException(...);
}
else if ( i == 0 )
{
return 0;
}
else
{
log( "Calculating sqrt" );
return sqrt( -i );
}
로 enderland 가 이미 말했듯이,당신이'다시고 가정하고 당신은 이제까지 하나가 있"return"으로 작업,그리고 당신이 할 수 있는 태그를"return"의 끝에 조건이 있습니다. 나는'd 를 제공 몇 가지 여분의 상세한 이유 아't 가 성공하게 됩니다.
I don't know what 선호하는 언어는,그러나 나는've 코딩에서는 C 니다. 의 숫자가 있 코딩 표준을 목표로 하는 일부를 피하기 위해 표준코딩 오류로 허용하지 않도록 코드 구조는 오류가 발생하거나,초기 코딩 또는 중에 나중에 유지 보수입니다. 나는'm 익숙한 MISRA-C,하지만 다른 사람이 있고,일반적으로 그들은 모두 유사한 규칙이기 때문에 그들이'다시 해결 같은 문제에서 다양한 구성되어 있습니다.
하나의 인기있는 오류 코딩 표준을 종종의 주소는 이 작은 잡았다:-
if (x == 10)
do_something();
do_something_else();
이하지 않는 당신이 무슨 생각을 그렇습니다. 로 C 우려면,x10 다음을 호출do_something()
,그러나do_something_else()
가져오라고관계없이의 값 x. 만 즉시 행동은 다음"면"문을 조건으로 합니다. 이는 어떤 수 있습니다 코더기위한 경우에는 거's 잠재적인 트랩에 대한 관리자,또 그것은 되지 않을 수 있습니다 무엇 coder 의도하는 경우가 있's 버그입니다. It's 의 인기있는 면접 질문입니다.
에서 솔루션 코딩 표준을 명령 중괄호 주위의 모든 조건부 행동하는 경우에도,그들이'다시 한-라인입니다. 우리는 지금
if (x == 10)
{
do_something();
do_something_else();
}
나
if (x == 10)
{
do_something();
}
do_something_else();
그리고 지금 그것이 제대로 작동하고이를 위해 명확한 관리자들.
다는 것을 알 수 있 이것은 전적으로 호환되지 않는 당신의 테이블 스타일의 형식입니다.
다른 언어(예:Python)보면서 이 문제가기로 결정했다는 이더었을 사용하여 공백을 만들 배치를 명확하고,그것은 좋은 것을 사용하는 아이디어를 공백을 대신호하는 장치입니다. 그래서,
if x == 10:
do_something()
do_something_else()
호출을 모두do_something()
와do_something_else()
조건부에서 x==10,반면
if x == 10:
do_something()
do_something_else()
었음을 의미하는do_something()
조건부에서 x,do_something_else()
은 항상 호출됩니다.
It's 올바른 개념,그리고 당신이'll 찾을 몇 개의 언어를 사용합니다. (나는 처음에 그것을보고 Occam2,입니다.) 다시 하지만,당신은 쉽게 볼 수 있는 테이블 스타일의 형식과 호환되지 않는 언어입니다.