의도적으로 프로그래밍 언어가 "깨끗한 코드"를 시행 할 수 있습니까? [닫은]


19

그래서 저는 C ++로 첫 프로젝트를 코딩하고 있는데, 코드를 "정리"하게 만드는 것보다 더 많은 노력이 필요한 것 같습니다. 즉, C ++은 추악하지만 작동하는 코드를 작성할 수있는 것처럼 보입니다.

내가 생각하게했던

프로그래밍 언어가 의도적으로 깨끗한 코드를 시행 할 수 있습니까? 그런 언어가 이미 있습니까?

또한 이것이 프로그래밍 언어 개발 / 이론에서 디자인 원칙으로 어떻게 통합됩니까? 어떤 조치가 사용됩니까?


14
많은 언어가 시도했습니다. 아무도 내 의견으로는 성공하지 못했습니다.
로봇 고트

5
불행히도 이것은 "깨끗한 코드"에 대한 객관적인 정의가 없기 때문에 전적으로 의견 기반입니다. 대화방에서 자유롭게 토론 하십시오. 모든 사람들이 공유 할 의견이있을 것입니다.
Ixrec

9
아니오, 모든 언어로 FORTRAN을 작성할 수 있습니다.
whatsisname

4
당신은 언어를 바보 증거가 가능한지 묻고 있습니다. 그들이 말하는 것처럼, 바보는 독창적 입니다.
로봇 고트

2
이 질문의 목적 상 "깨끗한 코드"에는 어떤 특징이 있습니까? 이를 정의해야합니다. 그렇지 않으면 타당성을 가진 모든 대답이 유효 할 수 있습니다.
Theodoros Chatzigiannakis

답변:


20

언어 디자인이 "깨끗한 코드"에 미치는 주요 효과는 구문 수준입니다. 속기 및 애매한 연산자 (Perl / APL)가 많은 언어는 "더러운"코드에 적합하지만 작은 요소 세트 (예 : Python)가있는 언어는 더 깨끗한 코드에 적합합니다.

그러나 의미론은 매우 다른 동물입니다. 언어의 의미가 깨끗한 방식으로 사용되도록 강요 할 수있는 방법은 없습니다. 특히 컴파일러로서 언어 사용자가 달성하려고하는 것을 알 수 없기 때문입니다. 강력한 도구는 단순히 좋은 도구입니다.

하루가 끝나면 구문보다 의미가 더 중요합니다. 또한 유지 관리 개발자로 파악하기가 가장 어려운 부분이기도합니다 (예 : "이 코드는 실제로 무엇을 의미합니까? 무엇을하는지 알 수 있습니다 ...").

결과적으로 깨끗한 코드를 적용 할 디자인이 없지만 깨끗한 의미론으로 간단한 구문을 작성하여 더 쉽게 만들 수 있다고 말할 수 있습니다. 더 나은 또는 나쁜, 깨끗 한 코드는 주로 개발자 지식, 동기 부여, 훈련 및 기술의 문제입니다.


2
타입 시스템이 올바른 의미론을 시행하기 위해 먼 길을 갈 수 있다고 말하고 싶습니다. 예를 들어, 강력한 형식의 언어는 변수에 적용 가능한 형식의 값이 할당되도록합니다. 타입을 저렴하고 쉽게 만드는 언어는 타입의 의미를 더 많이 인코딩하도록 권장합니다. 강력한 형식의 언어는 프로그래머가 형식 변환에 대한 의도를 표현하도록합니다. 상용구로 의미를 모호하게하는 언어로 인해 의미를 추론하기가 더 어려워집니다. "깨끗한"의미가 무엇인지에 대해서는 명확하지 않습니다. 그러나 그것이 올바른 의미론과 크게 겹친다 고 생각합니다.
복원 Monica Monica

7

언어는 프로그래머가 깨끗한 코드 정의의 일부인 특정 종류의 버그를 해결하도록 강요하거나 장려 할 수 있습니다. 예를 들어, 다양한 언어는 비교적 적절한 주소 지정 작업을 수행합니다.

  • 널 포인터 예외.
  • 공유 상태 버그.
  • 동시성 문제.
  • 확인되지 않은 예외.

깨끗한 코드는 주로 사람과 사람 사이의 의사 소통에 관한 것이기 때문에 여러분에게 도움이 될 것 입니다. 프로그래밍 언어에는 실제로이를 지원할 수있는 수단이 하나 뿐이며 이것이 바로 표현력 입니다. 정의하기는 정말 어려운 용어이지만 기본적으로 좋은 프로그래머는 좀 더 표현적인 언어로 더 깨끗한 코드를 작성하는 것이 더 쉽습니다. 다른 사람과 잘 소통하는 알고리즘을 쉽게 표현할 수있는 더 많은 도구가 있습니다. 나에게 잘못하지 말고, 거의 모든 프로그래밍 언어로 깨끗한 코드를 작성할 수 있습니다. 일부 언어는 더 쉬워지고 상대적 결과가 더 좋습니다.

그러나 표현력을 향상시킬 수는 없으며 마술처럼 사람들이 더 나은 코드를 작성하기 시작할 것입니다. 대부분의 프로그래머는 언어를 바꿀 수있는 손잡이를 더 많이 제공하고 제대로 사용하는 방법을 모르므로 코드가 실제로 더 나빠집니다. 코드 품질을 향상 시키려면 훈련과 멘토링이 필요합니다. 은 총알이 없습니다.


6

어느 정도. 많은 언어는 언어 설계자의 이상에 따라 일부 형태의 깨끗한 코드를 장려하도록 의도적으로 설계되었습니다. 모든 언어로 추악하고 이해하기 어려운 코드를 작성하는 것이 가능하지만 일부 언어는이를 막기 위해 더 많은 노력을 기울입니다.

예를 들어 파이썬은 언어의 의미 론적 구조에 따라 블록을 들여 쓰는 반면 다른 많은 언어에서는 완전히 임의의 들여 쓰기를 할 수 있습니다. 이것은 특정 이상 청결을 적극적으로 장려하는 언어의 예입니다.


3

수량화 할 수 있으면 최적화 할 수있는 언어를 만들 수 있습니다.

실제로 "깨끗한 코드"정책을 시행하는 특정 언어는 모르지만 빌드시 실행되는 스타일 경찰은 매우 일반적입니다.

이것이 언어로 구워지는 것과 별개의 단계 인 주된 이유는 주로 우선 순위의 기능입니다. 프로그래머가 가장 폭넓게 채택 할 수있는 유연성을 허용하는 것은 프로그래밍 언어의 가장 큰 관심사입니다. 너무 많은 프로그래밍 언어와 DSL이있어서 어떤 입력이 허용되는지에 대해 까다 롭고 의견을 제시함으로써 사용자 기반을 인위적으로 제한함으로써 더 광범위한 채택에 방해가 될 수 있습니다.

예를 들어 사람들이 글을 쓰도록 강요하는 것은 C #의 최선의 이익이 아닙니다

if (condition)
{

대신에

if (condition) {

그러나 스타일 체커 수 있습니다 즉, 그들이 할 수 있도록 설계하고 무엇 때문에 까다로운을 의견을 고집한다.

그래서 질문에 대답하기 위해

프로그래밍 언어가 의도적으로 깨끗한 코드를 시행 할 수 있습니까 ?

강조 광산

"깨끗한 코드"의 의미에 대한 강력한 정의를 제공하는 한, 절대적으로.

예를 들어, "깨끗한 코드"를 다음과 같이 정의 할 수 있습니다.

  • 줄 길이는 80 자 이하 여야합니다
  • 100 개 이하의 라인으로 구성된 기능
  • 들여 쓰기는 두 칸이되어야합니다
  • 열린 중괄호는 줄 끝에서 정확히 하나의 공백이 와야합니다.
  • 라인 당 두 명 이하의 운영자

이러한 규칙 중 일부 또는 전부에 동의하지 않을 수도 있지만 하루가 끝날 무렵에는이를 수량화 할 수 있으며 프로그래밍 방식으로 시행 할 수 있습니다.


1

아니, 당신이 묘사하는 의미가 아닙니다. "추악함"감지는 자동으로 수행 할 수 없습니다!

그러나 언어 디자이너는 좋은 코드를 장려하기 위해 일을 할 수 있습니다 (때로는 안전하고 좋은 코드가 길고 "추악한"이기 때문에 "깨끗한"말을하고 싶지 않습니다). 예를 들어, Rust 언어의 설계자들은 징계 된 C ++ 프로그래머들이하는 경향이있는 것을 보았고 (힙 할당 값을 단일 "소유자"에게주는 것과 같이) 그러한 것들 중 일부를보다 쉽게 ​​수행 할 수있었습니다. 여기에는 일반적인 실수를하지 않았는지 확인하는 데 사용할 수있는 유형 검사기가 포함됩니다.

좋은 언어 디자인은 종종 반응 적이라고 말합니다. 디자이너는 좋은 프로그래머가하는 일을보고 더 쉽고 더 예쁘게 만들려고합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.