프로그래밍

[C++] Philosophy 3 & 4

하루삼십만원 2020. 11. 30. 18:22
반응형

[C++] Philosophy 3 : Express intent

 

Reason (이름이나 주석 처럼) 일부 코드의 의도가 명시되지 않는 한, 코드가 해야할 일을 하고 있는 지 여부를 알 수 없다.

 

Example

v의 element들을 반복하는 의도는 분명하게 나타나지 않는다. index의 구현 세부사항이 (오용될 수 있도록) 노출되었고, i 변수는 (의도되었건 의도되지 않았건) 루프의 범위를 초과해서 남아 있다. Code를 읽는 사람은 코드의 이 부분만 봐서는 알 수가 없다.

 

Better:

이제 반복 메커니즘에 대한 명시적인 언급은 없으며, 루프는 우발적인 변경이 일어나지 않도록 상수(const) 요소에 대한 reference로 작동한다. 만약 element들에 대한 수정이 필요한 경우 다음과 같이 작성한다.

때때로 더 나은 것은, named 알고리즘을 사용하는 것이다. 이 예는 다음과 같은 의도를 직접적으로 표현하기 때문에 Ranges TS의 "for_each"를 사용한다.

마지막 variant은 우리가 v의 element들이 처리되는 순서에 관심이 없음을 분명히 해줍니다.

 

개발자는 아래 3개에 익숙해야 합니다.

● The guidelines support library

● The ISO C++ Standard library

● 현재 project에 쓰이는 기본 library들

 

어떻게 되야 하는지를 말하지 말고, 뭐가 되야 하는지를 말해라. 몇몇의 언어 구조들은 다른 것들보다 의도를 더 잘 표현한다.

 

Example 2D 점들의 좌표가 2개의 integer들로 되어 있다면, 다음과 같이 작성해라.

Enforcement 더 나은 대안이 있는 일반적인 pattern을 찾아봐라.

● 일반 for 반복문 vs. 범위 기반 for 반복문

● f(T*, int) interfaces vs. f(span<T>) interfaces

● 너무 큰 범위의 반복 변수

● naked new and delete

● 기본 제공 유형의 많은 parameter들이 있는 함수

 

영리하고 반자동화된 프로그램 변환을 위한 huge scope이 있다.

 

원문 출처

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#p3-express-intent

 

C++ Core Guidelines

 

isocpp.github.io

 

[C++] Philosophy 4: Ideally, a program should be statically type safe

 

Reason 이상적으로 프로그램은 (compile-time에) 완전하게 정적으로 type safe해야 한다. 불행하게도 이것은 불가능한데 문제가 되는 영역은 아래와 같다.

● unions

● casts

● array decay

● range errors

● narrowing conversions

 

Note 이러한 영역은 심각한 문제(예: crash 및 security violations)의 원인이다. 우리는 대체 기법을 제공하려고 노력한다.

 

Enforcement 개별 프로그램에 필요하고 실현 가능한 개별 문제 범주를 개별적으로 금지, 제한 또는 탐지할 수 있다. 항상 대안을 제시하라. 예를 들면 다음과 같다.

 

● unions - use variant (in C++17)

● casts - 사용을 최소화하고 template이 도움을 줄 수 있다.

● array decay - span 사용 (from the GSL)

● range errors - span 사용

● narrowing conversions - 사용을 최소화 하고 narrow나 narrow_cast를 적절히 사용해라 (from the GSL)

 

원문 출처

isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#p4-ideally-a-program-should-be-statically-type-safe

 

C++ Core Guidelines

 

isocpp.github.io

 

반응형

'프로그래밍' 카테고리의 다른 글

[C++] Philosophy 7 & 8  (0) 2020.12.02
[C++] Philosophy 5 & 6  (0) 2020.12.01
[C++] Philosophy 1 & 2  (0) 2020.11.29
[C++] shared_ptr, weak_ptr  (0) 2020.10.18
[C++] unique_ptr  (0) 2020.10.17