중복 코드를 작성하는 것이 나쁜 습관입니까?


최상의 답변

예, 동일한 정렬 및 검색 및 문자열 처리 함수를 수천 번 작성하게 될 것입니다. 지난번의 변형입니다.

이것은 너무나 사실이어서 같은 코드를 쓰지 않는 방법이있는 것처럼 “Do nt Repeat Yourself”라는 학계에서 발생했음을 부인하는 온전한 철학이 있습니다.

이 멍청한 만트라는 사람들로부터 정말 쫓겨나 야합니다.

스마트 한 디자인은 매번 처음부터 시작할 필요가 없다는 것을 의미하고 스마트 코딩은 무언가를 작성해야 할 때를 아는 것을 의미합니다. 새로운 코드와 재사용시기.

시간을 절약하고 디버그를 절약하는 방법으로 코드를 재사용 할 수있는 경우 장점이 있습니다. 이것은 제네릭 및 템플릿과 같은 유용한 도구와 상속 및 범용 API 개념으로 발전하여 모든 유형의 배열 또는 목록에 대해 새로운 검색 기능을 작성해야하는 대신 정렬 및 검색이 일반화됩니다.

코드 텍스트 복사는 버그를 복사하고 코드를 부 풀리며 주로 중복으로 간주되기 때문에 최악의 오류로 간주됩니다.

여기에서 상속이 코드 감소 전략으로 빛을 발합니다. 모든 하위 클래스에 공통적 인 대부분의 기능이 기본 클래스에 포함되는 경우 하위 클래스는 기본 클래스를 값 비싼 재 작성할 필요가 없습니다. 여러 번 하위 클래스가 기본 클래스 함수를 호출 한 다음 전체 함수를 다시 구현하는 대신 몇 가지 변경 작업을 수행 할 수 있습니다. 그것이 바로 그들이 말하는 것입니다.

그러나“Do nt Repeat Yourself”는 이와 같은 포럼에서 일종의 이상적인 코딩 및 디자인 방법으로 컬트 지위를 얻었으며 사실이 아닙니다. 실제 또는 실제 주요 코드 본문의 일부입니다.

오버 디자인은 언어 개발자, 이론가 및 프레임 워크 작성자를위한 것입니다. 실용적인 코더는 작동하는 코드를 작성하고, 프로그램에 이진 검색을 구현하는 두 개의 클래스가 있다면 어떨까요? 다른 두 데이터 클래스에 대한 이진 검색을 처리하기 위해 서브 클래스가있는 세 번째 클래스가 정말로 필요합니까? 아마도 그것은 이진 검색이 필요한 데이터 클래스의 규모를 확장하는 것에 관한 것입니다. 그러면 데이터 클래스 요구 사항을 처리하기 위해 서브 클래 싱 할 수있는 클래스를 올바르게 수행하는 것이 실시간 및 버그 보호기가됩니다. 알겠습니까?

대규모 프로그래밍은 소규모 작업 및 도구를 프로그래밍하는 것보다 분업에 대한 계획과 분석이 훨씬 더 많이 필요합니다. 따라서 1000 줄이 넘는 코드가있는 프로젝트가있는 경우 설계를 살펴보고 중복 알고리즘 및 기능을 찾은 다음이를 단일 기능 유틸리티 클래스 또는 두 개로 수집하고 모든 데이터 개체에 대한 코드를 공유 할 수 있는지 결정합니다. 그러나 궁극적 인 중복 제거를위한 종교적 탐구로 만들지 마십시오. 그리고 그렇게하는 사람들을 믿지 마세요.

답변

가장 효율적인 옵션이라면 나쁜 습관이 아닙니다. 더 간단하고 우아한 솔루션을 쉽게 사용할 수있는 무엇이든 수행하는 것은 나쁜 습관입니다. .

이 경우, 거대한 스위치는 종종 인터페이스로 대체되거나 클래스가 자신의 책임을 갖도록 허용하는 등의 작업을 할 수 있습니다.

예를 들어 이와 같은 것이있는 경우 :

작동 합니다. 값이 추가되고 편집되지 않는 한 코드는 일종의 견고 할 것이며 비트 비교에 거의 시간이 걸리지 않기 때문에 실제로 매우 효율적입니다. 그러나 이것은 제어 할 수없고 탐색하기 어렵고 이미 이러한 자동차 클래스를 정의해야합니다.

대신 시작하겠습니다. 다음과 같이 :

다시 말하지만, 우리는 아마도 numberOfCylinders 메소드 없이도 이걸 가지고 있었을 것입니다. 방법은 다음과 같습니다.

이제 우리가 전국 자동차 부품 매장이라고 상상해보세요. 말 그대로 다양한 제조사, 모델, 트림 등의 수천 대의 자동차. 만약 / 그렇지 않으면 거대한 괴물이되고, 읽을 수없고, 안전하게 추가하거나 제거하기가 매우 어렵습니다.

다시 말해서 , 항상 나쁜 습관은 아닙니다. 때로는 큰 스위치 등이 필요하지만 일반적으로 거기에 숨어있는 더 쉬운 방법이 있습니다.

편집 : n 매우 많은 수의 자동차 조합 (역사상 수백만 개에 달할 수 있음)과 Car 구현 클래스가 여기서 실패합니다. 물론 특정 시점에서 클래스가 작동하지 않을 것이며 데이터베이스에 플랫 파일을 저장하고 접근자를 사용하게 될 것입니다.

제 대답은 매우 긴 시간 사용의 함정을 보여주기위한 것이 었습니다. 조건문은 자동차 부품 상점 아키텍처를 구축하려는 실제 시도가 아닙니다.주요 자동차 소매 업체에서 일하는 경우 소프트웨어 아키텍처의 기초로 제 간단한 대답을 사용하지 마십시오. 🙂

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다