문제

나는 비트가 기절하여 많은 반응의 질문에는 개발자가에 더 관심이 많은 결과 컴파일된 바이트이상의 의미에 대한 자신의 코드입니다.는 알-선택에 대한 postfix/prefix 증가로 나가는 경향이 있을 알-선택 사용에 관하여 부울에 대한 열거된 형식으로 두 값에 대해 적절한 기능의 명명,그리고...

그래서 질문은 더 rethorical 폴:을 때 하나 허용되는 무시의 의미는 무엇이 쓰는?어디서의 경계선?

  • 운전자++(postfix/prefix)
  • 문자열입니다.empty()대string==""
  • 벡터입니다.empty()대벡터입니다.size()==0
  • 열거{on,off}대부울에=true;off=false
  • ...

은 그것을 이름을 지정합니다.

편집

지 않았다는 의미에 대한 질문에 대한 필요(마이크로)-최적화를 달성할 수 있습니다.오히려 내가 원한에 대한 의견을 어떻게 잘 해야할 당신이 쓰기에 다음과 같은 문장"그러나 컴파일하 dword,어쨌든 그렇게해야하는 이유는 내가 그것을 만들 enum?" (는 극단적인 경우...).

도움이 되었습니까?

해결책

나는 a 많은 내 경력에서 코드. 확실히 여기 많은 사람들만이 아니라 많은 코드입니다. 그 기간 동안, 나는 진정한 시간과 시간으로 증명 된 한 가지를 배웠습니다. 결함이 들어옵니다.

결함은 수리 비용과 비용이 소요됩니다. 저렴할 때 코드를 깨끗하고 명확하게 선점하는 데 시간을 할애하거나 나중에 많은 시간과 돈을 쓸 수 있습니다. 당신은 서둘러 또는 코딩 표준을 준수하지 않기 때문에 그것을 함께 때렸습니다. 최종 결과는 당신은 시간과 돈을 낭비하고 있습니다. 또한, 당신은 약간의 선불 투자로 예방 될 수 있었기 때문에 낭비 할 필요가 없었던 시간과 돈을 낭비하고 있습니다.

나는 코드를 작성하는 방식에 대해 세심한 것을 후회하지 않았습니다. 그것은 나를 괴롭히기 위해 결코 돌아 오지 않았습니다. 조잡한 것은 항상 나를 괴롭히기 위해 돌아 왔습니다.

다른 팁

"OK"를 정의하십시오. 초기 배송 날짜에 작동하는 경우에는 괜찮지 만 변경을 수행해야 할 때마다 이전 코드를 파악하는 데 3 주가 더 걸리나요?

당신의 대답이 있습니다 : 코드를 이해할 수 있고 코드를 유지하는 능력을 상하게하지 않는 한.

결론에 영향을 미치지 않는 난해한 것들에 대해 걱정하기 시작하면 너무 멀리 가고 있다고 생각합니다. 제 3의 조작자 사용 여부 또는 명시 적 글쓰기 여부와 같은 토론은 아무것도 할 일이 없지만, 앉아서, 발을 올리거나, 맥주/와인/소다를 마시고, "큰 결과"의 문제에 대해 토론하는 경우에도 진술이 좋습니다. :)

그러나 부울에 대한 열거를 만드는 것은 명백한 잘못입니다.

비용 기능에 따라 다릅니다

여기서 사람들이 논쟁하기를 좋아하고 종종 혼동하는 몇 차원의 차원. 실제로 대답은 그것이 달라집니다. 당신이 진정으로 소중히 여기는 것은 무엇입니까?

  • 캐릭터 수
  • 생성 된 OP의 수
  • 실행 시간
  • 이식성
  • 유지 가능성
  • 명쾌함
  • 영리
  • 안정성 (버그가 없습니까?)
  • 확장 가능성

나는 항상 명확성과 같은 고차를 먼저 목표로합니다. 명확성 상실은 인간주기에서 지불되며, 그 중 항상 부족이 있습니다. 사람들은 생시 시계 시간에 거의 관심이 없으며, 자신이하는 사람들은 거의 항상 조기에 최적화하고 있습니다.

그것이 당신에게 도움이된다면, 나는 우리가 스택을 올라가서 진전을 이루고, 비트와 숫자에 노예가되는 것이 아니라 의미론과 일을 더 많이 돌보고 있다고 생각합니다. 그러나 이것은 기초를 잊고 특정 시맨틱 비트가 어떻게 구현되는지 기억하는 변명이 아닙니다. 당신은 속도가 중요하기 시작하고 컨벤션이 창 밖으로 나가는 드문 기회 동안 바지에 걸리기를 원하지 않습니다.

"한 사람은 언제 쓴 의미를 무시할 수 있습니까? 국경선은 어디에 있습니까?"

합리적인 질문은 "언제 ~해야 한다 하나는 쓴 의미의 의미를 무시합니까? "

나는 프로그래밍을 인간 활동으로보고 있기 때문에 유일한 시간을 말할 것입니다. ~해야 한다 진술의 의미론을 무시하는 것은 시스템 자체가 당신을 강제 할 때입니다. 무언가를하는 방법. 그러한 진술은 문서화하기에 좋습니다.

테두리는 쓰기 온스, 읽기 음성 코드를 다룰 때입니다. 그래야만 다시는 사용하지 않을 것이기 때문에 궁극적으로 당신이 무엇을하고 있는지 (그 경우)하는 것은 중요하지 않습니다. 불행히도, 이것은 반복하지 않을 것을 실천하는 간접적 인 피드백을 다루지 않습니다.

테두리 라인은 부작용입니다.

캡슐화 된 함수가 예상치 못한 부작용으로 원하는 모든 것을 수행하고 코드를 읽을 수 있으면 모든 것이 중요합니다. 외부 사용자가 예측할 수 있고 "기괴한"기능이 내부적으로 유지된다면 그게 전부입니다.

최적화를 추가하면 약간 변경되지만 조기 최적화를 조기에 절대로 최적화해서는 안되기 때문에 끝나는 곳입니다.

마이크로 최적화는 무의미한 시간의 99%.예를 들어,귀하의 컴파일러에 인턴을 모두""하나의 인스턴스를 어쨌든,당신은하지 않은 증가하는 성과에는 어떤 방법을 사용하여 문자열입니다.비어 있습니다.지를 잴 수 있는 효과가 일반적으로 당신은 기대할 수 있는 최고 너무,I have seen"최적화"성능을 저하로 인해,컴파일러는 더 나은 작업을 최적화 방해합니다.

대부분의 코드를 필요로하지 않는 것을 최적화되어 있습니다.이 어디에 있는지 확인하는 일이 필요할 수 있습만으로 진단한 후에는 코드는 실행되고,심지어 다음의 대부분은 시간을 통해 이루어집 최적화 알고리즘,마이크로 최적화입니다.

요즘 대부분의 사람들은 그것이 올바르게 작동한다고 가정하면 가독성이 가장 중요한 고려 사항이라고 동의합니다. 물론 예외가 있습니다. 일부 앱은 가능한 빨리 실행해야하며 일부 앱은 절대 충돌을 허용하지만 일반적으로 가독성이라고 말합니다.

귀하가 제공 한 예제 관찰 - 다음 :

operator++ (postfix/prefix)

string.empty() vs. string == ""

그들이 다른 작업을 비교하므로 좋은 예인 것 같습니다. functionality. 따라서 더 나은 것 ~ 아니다 그들의 의미 론적 차이를 무시하십시오.

대조적으로, 다음 예는 다음과 같습니다.

vector.empty() vs. vector.size() == 0

enumerate { on, off} Vs. boolean on=true; off=false

완벽하게 합리적입니다.

vector.empty() 사용의 컨텍스트가 벡터가 비어 있는지 판단하는 경우에만 바람직합니다. 위험에 처하게됩니다 ~ 아니다 의도) : 이것은 상식으로 귀결됩니다. 비어 있는지 벡터 크기를 묻는 이유는 무엇입니까? 그것은 단순히 코크스에 의해 충분한 현금이 있는지 알고 싶을 때 누군가에게 지갑에 얼마나 많은 돈을 가지고 있는지 물어 보는 것과 같습니다.

에 관해서 enumerate { on, off} Vs. boolean on=true; off=false, 스스로에게 물어보십시오 : 미래에 열거에 또 다른 가치를 더할 가능성이 얼마나됩니까? 원하는 것이 합리적입니다 enumerate {on, off, indeterminate}`(또는 일부 변형)이므로 대답은 예일 수 있습니다. 그렇지 않으면 간단한 부울로 충분합니다.

이것은 당신의 질문의 핵심으로 이어집니다. 이와 같은 질문이나 그 관련성에 대해 어떤 방식 으로든 결정하는 결정 론적/알고리즘 접근법이있는 것 같습니다. 내 대답은 그 날까지 그게됩니다 튜링 머신 통과 할 수 있습니다 튜링 테스트, 나는 아니요. 이것이 인간이 소프트웨어를 엔지니어링하는 데 필요한 이유입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top