코드 중복 제거 방법

나쁜 맛의 첫 번째는 중복 코드다.왜 그것은 이렇게 악명이 높습니까?시청자 여러분은 b1의 시리즈의 첫 번째 문장인 을 보실 수 있습니다. 본고는 더 이상 설명을 반복하지 않고 그 중의 관점만 인용합니다.
알림: 모든 것에 대해 코드는 한 번만 나타나야 하며 유일한 것이다.
다음은 몇 가지 전형적인 중복 코드를 없애는 방법과 중복 코드를 없애는 습관을 키우는 방법을 소개한다.

같은 클래스에서 반복


첫 번째는 같은 클래스에 중복 코드가 존재하는데 가장 식별하기 쉽고 해결하기 쉽다.다음 예를 참조하십시오.
try {
    executorService.runTasks(...)
    timer.scheduleAtFixedRate(
        () =>saveProgress(getProgress()),
        period, period
)
}
finally { executorService.shutdown() timer.cancel()
saveProgress(getProgress())
}
saveProgress(getProgress()) 두 곳에 나타나 추출 방법으로 해결할 수 있다.
try {
    executorService.runTasks(...)
    timer.scheduleAtFixedRate(
        () =>persistProgress(),
        period, period
)
}
finally { executorService.shutdown() timer.cancel()
persistProgress()
}

def persistProgress() {
saveProgress(getProgress())
}

만약 한 종류가 매우 길고 수천 줄이 된다면, 한 종류에서도 중복을 식별하기 어렵다.이것은 또 다른 나쁜 맛인'초장류'와 관련된다.'나쁜 맛을 없애라'는 후속에 전문적인 문장이 그것을 해결할 것이다.

같은 종류의 나무 아래에서 중복하다


두 번째는 같은 종류의 나무 아래의 서로 다른 자류에서 중복되는 것으로 첫 번째 종류보다 식별하기 어렵다.
class Child1 extends Parent {
    def run() {
        init()
        process()
    }
    ...
}

class Child2 extends Parent { def
run() { process() } ...
}

위로 이동 방법과 템플릿 방법으로 공통 부분을 공통 부류로 위로 이동할 수 있습니다.
class Parent {
    def run() { //     
        init()
        process()
    }
    
    def init() {}
    def process() //    ,      
}

class Child1 extends Parent {
override def init() { ... } override def process() { ... }
}

class Child2 extends Parent {
override def process() { ... }
}

상관없는 종류에서 중복되다


세 번째는 전혀 상관없는 두 종류 중 전문적으로 찾지 않으면 발견하기 어렵다.
class App1 {
    val last3 = scores.sort().take(3)
}

class App2 { val last10 = scores.
sort().take(10)
}

방법을 추출한 다음 방법을 새 클래스로 이동하여 중복을 제거할 수 있습니다.
class App1 {
    val last3 = Seqs.lastN(scores, 3)}

class App2 { val last10 =
Seqs.lastN(scores, 10)
}

object Seqs { // def
lastN[E](seq: Seq[E], n: Int) : Seq[E] = { // seq.sort().take(n) }
}

위의 예는 업무상 관련이 없는 두 종류다.
업무상 관련이 있거나 직접적으로 유사할 수 있으니 이럴 때 공공 기류를 뽑아 두 번째 중복에 따라 재구성해야 한다.
세심하게 보면 세 가지 유형의 중복은 점진적인 관계가 있고 점점 멀어지고 식별하기 어려워지며 해결하기도 어렵다는 것을 알 수 있다.'상관없는 클래스에서 중복'은 재구성을 통해 앞의 두 가지로 전환한 다음에 계속 재구성하면 해결할 수 있다.

좋은 인코딩 습관을 길러야 한다


중복을 해결하는 것은 결코 어렵지 않다. 어려운 것은 중복을 발견하는 것이다.중복을 발견하는 것은 결코 어렵지 않다. 어려움은 중복을 발견하는 습관을 기르는 것이다.한 야드는 코드를 써서 기능을 완성하기 전에 습관적으로 좌우를 좌우로 살펴보고 다른 사람이 이미 관련 기능을 했는지 내가 하고자 하는 것과 코드를 공용할 수 있는지 살펴보면 중복을 쉽게 발견할 수 있다.
힌트: 만약 당신이 움직일 점이 있다면 먼저 그녀 주위의 한 바퀴를 알아라.
중복을 해결했을 뿐만 아니라 시간이 지나면서 전체 시스템에 대한 이해도가 나도 모르게 많이 높아졌다는 것을 알게 되었다.
사실 사람됨과 마찬가지다. 유명한 재테크 코치인 보토사펠은 이라는 책에서 다음과 같이 강조했다.
개인의 영역을 주도적인 영역으로 끊임없이 바꾸는 것은 미래에 대한 당신의 책임입니다.
사적인 영역은 생활 속에서 나와 관련된 것이고 주도적인 영역은 내가 직접적이거나 간접적으로 영향을 미친다.일에 부딪히면 문 앞의 눈만 쓸어서는 안 된다. 적극적으로 참여하고 수동적인 것을 주동적인 것으로 바꾸어야만 더욱 많은 기회를 얻을 수 있고 우리를 더욱 좋아지게 할 수 있다.

총결산


시청자 여러분은 중복을 없애는 기술뿐만 아니라 문장의 두 가지 중요한 힌트를 이해하셨으면 합니다.
  • 어떤 사물에 대해서도 코드에 한 번만 나타나야 하며 유일한 것이다.
  • 움직일 점이 있다면 먼저 그녀 주위를 한 바퀴 돌아라.

  • 관련 기사


    재구성, 기업급 응용의 성경

    샘플 코드에 대한 설명


    코드를 어떻게 잘 쓰는지 말하려면 코드로 말해야 한다고 생각한다.하지만 휴대전화 화면에 있는 코드의 전시는 큰 문제다.예시 코드가 모두가 이해할 수 있도록 하기 위해서 한 코드는 약간의 취사를 했다.
  • 전체 실행 가능한 코드가 아닌 세션으로 강조
  • 언어는 Scala로 간결하고 읽기 쉽기 때문
  • 절대 스칼라를 몰라서 스트레스를 받지 마세요. 한 사이즈는 그녀 안에서 가장 친근한 부분을 쓸 거예요. 안심하세요.
    힌트: Scala는 JVM 플랫폼의 언어로 간결하고 확장 가능한 특성을 가지고 있다. 현재 매우 유행하는 빅데이터 처리 프레임워크인 Spark는 Scala로 개발된 것이기 때문에 Scala를 배워서 손해를 보지 않을 것이다.

    좋은 웹페이지 즐겨찾기