다음과 같은 코드를 보았습니다.
if(statement)
do this;
else
do this;
그러나 나는 이것이 더 읽기 쉽다고 생각합니다.
if(statement){
do this;
}else{
do this;
}
두 방법이 모두 작동하기 때문에 이것이 단순히 선호하는 문제입니까, 아니면 다른 방법보다 권장되는 방법입니까?
다음과 같은 코드를 보았습니다.
if(statement)
do this;
else
do this;
그러나 나는 이것이 더 읽기 쉽다고 생각합니다.
if(statement){
do this;
}else{
do this;
}
두 방법이 모두 작동하기 때문에 이것이 단순히 선호하는 문제입니까, 아니면 다른 방법보다 권장되는 방법입니까?
답변:
첫 번째 버전의 문제점은 중괄호를 추가하지 않고 if 또는 else 절에 두 번째 명령문을 다시 추가하면 코드가 예상치 못한 재미있는 방식으로 중단된다는 것입니다.
유지 관리 측면에서는 항상 두 번째 양식을 사용하는 것이 더 현명합니다.
편집 : Ned는 의견에서 이것을 지적하지만 여기에 링크 할 가치가 있다고 생각합니다. 이것은 단지 상아탑 가상의 헛소리가 아닙니다 : https://www.imperialviolet.org/2014/02/22/applebug.html
if (…) { goto L; goto L; }
아니지만 중괄호를 잊어 버렸습니다. ``if (…) {goto L; 고토 L; }`는 여전히 버그이기 때문에 보안 버그가 아닙니다 (보안상의 결과가 아닌 버그). 다른 예에서, 상황이 반대 방향으로 진행될 수 있으며 중괄호가없는 코드는 실수로 안전 할 수 있습니다. 세 번째 예에서 괄호없는 코드는 처음에는 버그가 없으며 개발자는 괄호를 추가하는 동안 오타가 발생합니다.
명령문 블록을 남기지 않는 데 따른 한 가지 문제점은 else-ambiguity입니다. 그것은 C에서 영감을 얻은 언어는 들여 쓰기를 무시하므로 이것을 분리 할 방법이 없습니다.
if(one)
if(two)
foo();
else
bar();
이것으로부터:
if(one)
if(two)
foo();
else
bar();
else
바인드는 가장 가까운 가장 안쪽에 탐욕스럽게합니다 if
. 이 문제를 모르거나, 생각하지 않거나, 아직 커피가 부족한 사람들이 C 또는 유사한 언어를 코딩하는 경우 문제가 발생합니다. 언어 사양에 따르면 파서는 다른 작업을 수행해야한다고합니다. 그렇습니다. 문법에서 이론적으로 '필요하지 않은'것으로 표시하더라도 중괄호를 항상 포함하는 데 유리한 또 다른 주장입니다.
내 일반적인 패턴은 한 줄에 맞으면 내가 할 것입니다.
if(true) do_something();
else 절이 있거나 실행하려는 코드 true
의 길이가 상당히 길면 괄호로 묶습니다.
if(true) {
do_something_and_pass_arguments_to_it(argument1, argument2, argument3);
}
if(false) {
do_something();
} else {
do_something_else();
}
궁극적으로, 그것은 주관적인 스타일과 가독성 문제로 귀결됩니다. 그러나 일반적인 프로그래밍 세계는 두 가지로 나뉘어져 있습니다 (중괄호를 사용하는 언어의 경우). 예외없이 항상 사용하거나 예외적으로 항상 사용하십시오. 나는 후자 그룹의 일부입니다.
if(true){ do_something(); }
다른 프로그래머가 심각한 버그를 겪을 수있는 이유 를 찾아보십시오 (Apple의 "goto fail"총 ssl 코드 중단).
내가 사용하는 IDE의 코드 포맷터를 사용하고 있습니다. 다를 수 있지만 기본 설정 / 옵션에서 설정할 수 있습니다.
난이게 좋아:
if (statement)
{
// comment to denote in words the case
do this;
// keep this block simple, if more than 10-15 lines needed, I add a function for it
}
else
{
do this;
}
내가 따르는 "규칙"은 다음과 같습니다.
"if"문이 무언가를하기 위해 테스트하는 경우 (IE 호출 함수, 변수 구성 등) 중괄호를 사용하십시오.
if($test)
{
doSomething();
}
어떤 조건에서 어떤 함수가 호출되는지, 프로그램의 흐름이 어디로 가고 있는지 명확히해야하기 때문입니다. 프로그래머가 정확히 어떤 함수가 호출되는지와이 조건에서 어떤 변수가 설정되는지 이해하게하는 것은 프로그램이하는 일을 정확하게 이해하는 데 중요합니다.
루프 또는 함수 내에서 IE 흐름 제어를 수행하기 위해 "if"문이 테스트중인 경우 한 줄을 사용하십시오.
if($test) continue;
if($test) break;
if($test) return;
이 경우 프로그래머에게 중요한 것은 코드를 실행하지 않으려는 예외적 인 경우가 무엇인지 신속하게 발견하는 것입니다. 실행 블록이 아니라 $ test에 모두 포함되어 있습니다.
첫 순간부터 중괄호를 사용하면 이것을 디버깅하지 않아도됩니다.
if (statement)
do this;
else
do this;
do that;
;
:)
나는 중괄호를 사용하는 것을 선호합니다. 중괄호를 추가하면 더 쉽게 읽고 수정할 수 있습니다.
중괄호 사용에 대한 링크는 다음과 같습니다.
내 경험상 첫 번째 형식의 유일한 (매우) 약간의 장점은 코드 가독성이며, 두 번째 형식은 "잡음"을 추가합니다.
그러나 최신 IDE와 코드 자동 생성 (또는 자동 완성)을 사용하면 두 번째 양식을 사용하는 것이 좋습니다. 중괄호를 입력하는 데 추가 시간을 소비하지 않으며 가장 빈번한 버그를 피할 수 있습니다.
충분한 에너지를 소비하는 버그가 있으며 사람들은 큰 시간 낭비를 위해 문을 열지 않습니다.
코드를 작성할 때 기억해야 할 가장 중요한 규칙 중 하나는 일관성입니다. 누가 작성했는지에 관계없이 모든 코드 줄은 동일한 방식으로 작성되어야합니다. 엄격한 것은 버그가 "발생"하는 것을 방지합니다;)
이것은 변수, 메소드, 파일의 이름을 명확하고 명확하게 지정하거나 올바르게 들여 쓰기와 동일합니다 ...
학생들이이 사실을 받아 들일 때, 자신의 소스 코드와의 싸움을 중단하고 코딩을 정말 흥미롭고 자극적이며 창의적인 활동으로보기 시작합니다. 그들은 신경이 아닌 그들의 마음에 도전합니다!
그것은 선호의 문제입니다. 나는 개인적으로 두 스타일을 모두 사용합니다. 더 이상 진술을 추가 할 필요가 없다고 확신하면 첫 번째 스타일을 사용하지만 가능하면 두 번째 스타일을 사용합니다. 더 이상 첫 번째 스타일에 문장을 추가 할 수 없으므로 일부 사람들은이 스타일을 사용하지 않는 것이 좋습니다. 그러나 두 번째 방법은 추가 코드 줄을 필요로하며 사용자 (또는 프로젝트)가 이러한 종류의 코딩 스타일을 사용하는 경우 첫 번째 방법은 간단한 if 문에 매우 선호됩니다.
if(statement)
{
do this;
}
else
{
do this;
}
그러나이 문제에 대한 가장 좋은 해결책은 Python이라고 생각합니다. 공백 기반 블록 구조를 사용하면 if 문을 만드는 두 가지 방법이 없습니다. 하나만 있습니다.
if statement:
do this
else:
do this
여기에는 중괄호를 전혀 사용할 수없는 "문제"가 있지만, 첫 번째 스타일보다 더 이상 선이 아니며 더 많은 문장을 추가 할 수 있다는 이점이 있습니다.
코드에 명시하고 중괄호를 사용하는 것이 낫다는 사실에 대부분의 답변에 동의합니다. 개인적으로 저는 일련의 코딩 표준을 채택하고 팀의 모든 사람들이 표준을 알고 준수 할 수 있도록 보장하고자합니다. 내가 일하는 곳 에서는 .NET 프로젝트를 위해 IDesign.net 에서 발행 한 코딩 표준을 사용 합니다.