2009-04-17 2 views
1

단일 표현식을 값과 부울 값으로 평가하는 언어를 좋아합니다. 예를 들어, A = 1은 true로 평가되며, 1도 마찬가지입니다.이 연습이 내 싱크 탱크의 개발자에게 매우 일반적이라면 부작용이 없다고 가정하고 이러한 표현을 리팩터링하지 않는 것이 좋습니까?C 스타일의 논리 및 리팩터링

나는 코드 냄새에 대해 이야기하면서 오랫동안 토론을하고 있지만,이 논리 복잡성은 인 이유는 내가 C를 너무 좋아합니다. 예를 들어 Java로 전환하는 것은 힘들 것입니다.이 효과는 허용되지 않습니다 (false! = 0).

의견이 있으십니까?

답변

4

0이 아닌 값의 사용을 true로, null/0을 false로 리팩터링하는 실제 이유가 없습니다. 하나! 종종 이러한 것들은 가독성을 저해 할 수 있습니다. 자주 포인터를 사용하는 경우, if (somePtr) 대신에 if (somePtr != NULL)을 사용할 것입니다. 왜냐하면 널 포인터를 역 참조하지 않기를 의도한다고 생각하기 때문입니다.

논리가 지나치게 복잡하면 가독성 문제이지만 읽는 것이 어렵다고 생각하지 않는다면? 왜 리팩터링 할 필요가 있을까요?

1

이것은 완전히 주관적이지만 Perl (다양한 방식으로 표현할 수있는 선명도와 다양한 표현력을 제공하는 Perl)과 Java - 또는 - 꽤 덜 속박과 징계 언어). 어떤 사람들은 구조를 원하고 (또는 필요로합니다.), 자바가 더 잘 어울립니다. 더 자유로운 언어가 허용하는 독창성을 좋아하는 사람들도 있습니다.

노련한 프로그래머로 구성된 팀의 경우 창의적인 언어를 사용하면 더 많은 작업을 수행 할 수 있습니다. "더 단단한"언어를 좋아하는 동료가 있다면, 아마도 그 말은 무언가를 말하거나 어쩌면 아닙니다. 하지만 그건 제 의견입니다. :-P

1

Java는 엄격하게 입력되어 많은 이점이 있다고 생각합니다. if는 한 가지에 대해 교차 오류를 많이 방지합니다. 나는 C의 유연성과 통제가 그들의 자리를 차지하고 있다고 생각하지만, 자바는 너무나 큰 팀이 나쁜 프로그래머에 의해 너무 멀리 끌리지 않도록하는 데 정말로 빛난다. C와 Java는 문법은 유사하지만 동일하지는 않습니다. 좋은 이유로 Java가 만들어졌고 그 이유가 있습니다.

제 의견 : 게다가 약간의 영리한 과부하 또는 새로운 기능으로 엄격한 타이핑을 깨뜨릴 수 있습니다.

1

저는이 관용구가 얼마나 잘 알려져 있는지에 관한 문제라고 생각합니다.

예를 들어, 리눅스 커널은 많은 관용구를 가지고 있습니다.

예를 들어,

static int x = 0;

대신에 다음을 수행하십시오.

static int x;

(컴파일러는 제로를 만들 것입니다, 커널 사람들과 함께 내가 아니라 주장한다..)

을 당신은하지 않습니다

경우 (X를!= NULL)

당신이 할 :

(x)의

당신이하지 않는

경우 :

경우 (뭔가 ==를 무엇이든) 반환 0; else return 1;

당신이 할 일 :

return (something! = whatever);

그리고, 논리 값과 정수의 때때로이 혼합이 같은 정말 편리 나올 수 있습니다 build_assert.h

의 고기입니다 :

 
#define EXPR_BUILD_ASSERT(cond) \ 
    (sizeof(char [1 - 2*!(cond)]) - 1) 

그들은 오류 처리 경로에 대해 자유롭게 gotos를 사용하는 조금 contrarian입니다.

가독성과 유지 보수성 측면에서 한 두 라인의 문제가있을 수 있습니다. 그것은 사소한 것들입니다. 관리 성 및 가독성 부서의 실제 고기는 (내 경험에 의하면) 대규모 규모의 것들입니다. 나에게 많은 OOP 자료는 코드를 쓰기 쉽도록 만들고, 읽기가 어렵고, 디버그하기가 더 어렵다. 내게 그것은 순손실이다. 그래서, 나는 oop의 큰 팬이 아니야. 죄송합니다 ... 주제를 바꿨습니다.