문제

학교 과제로 Java.polynomial을 구현해야합니다. 방법의 일부는 다음과 같습니다 추가 (다항식), 곱하기 (다항식) 등.

같은 경우

p.add(q); // computes p + q

무효를 반환하고 다항식의 합을 p로 유지하는 것이 낫습니까? 아니면 다항식을 반환하고 이전의 p 값을 그대로 유지하는 것이 더 낫습니까?

내 본능은 내가 다음을해야한다고 말해

  • P.ADD (Q)를 '파괴적인'방법으로 구현합니다 ... P의 값에 Q를 추가하고 합을 P에 저장합니다.
  • 또한 다항식의 합을 반환하는 정적 방법 다항식 (p, q)을 구현하십시오.

어떻게 생각해?

도움이 되었습니까?

해결책

개인적으로 나는 불변의 유형을 정말 좋아합니다. 나는 쓸 것이다 p.plus(q) 대신에 p.add(q) 그리고 새로운 다항식을 반환하게하십시오. 불변성은 스레드 안전성 (이 경우에는 문제가되지 않는 것 같음)뿐만 아니라 코드에 대한 추론 측면에서도 많은 일을하고 있습니다. 당신이 그것을 언급 한 후에는 발 아래 물체의 내용을 바꿀 수 없다는 것을 알면 어떤 일이 일어날 지 예측하는 것이 훨씬 쉽습니다.

다른 팁

스타일의 문제입니다. 물체가 불변이되지 않아서 방법이 "파괴적"이 아니기 때문에 일반적으로 더 낫다 (그리고 "깔끔한").

가장 잘 알려진 불변의 클래스는 문자열입니다.

"다항식을 반환하고 이전의 p 값을 그대로 유지하는 것이 낫다"

숫자 유형이 다른 숫자처럼 행동하게되면 인생은 더 좋습니다.

"파괴적인"작업은 메모리 할당을 줄임으로써 성능을 최적화해야 할 때 필요한 악입니다.

트레이드 오프는 변수의 복잡한 상태 변화로 인해 처리가 불투명해진다는 것입니다. 당신은 숨겨진 상태 변화를 원하지 않습니다. 당신은 변수에 대한 값을 변수에 할당하는 것이 크고 명백한 일류, an- = 종류의 일이되기를 원합니다.

그래서 모든 사람들은 당신이 그것을 불변으로 만들어야한다고 말하고 있으며, 그것을 변하기 쉽게 만드는 매우 구체적인 성능의 이유가 없다면 (당신은 단일 마법에 10 억 다항식을 추가하고 메모리 할당을 원하지 않을 것입니다) 불변성은 방법입니다. 토고.

진정한 성능 이유가 있다면, 파괴적이고 비파괴적인 버전을 원하지만 기억하십시오. 이것은 혼란을 초래합니다. 나는 과부하에 대한 당신의 생각이 더 파괴적이거나 아티브를 기반으로하지 않는다고 생각합니다. 모든 것을 비파괴로 만들고 선택한 경우 AddDefluctive (Poly P) 메소드를 만드는 것이 좋습니다.

"파괴적인"방법을 수행하더라도 기능 체인을 허용하기 위해 어쨌든 새 값을 반환하고 싶을 것입니다. 그리고 가치가있는 것에 대해, Biginteger와 Bigdecimal과 같은 문제에 직면했을 때, Sun은 비파괴로 가기로 결정했습니다.

불변으로 만들고 인터페이스를 BigInteger와 동일하게 만드십시오 (적용 가능한 한).

무효를 반환하고 다항식의 합을 p로 유지하는 것이 낫습니까?

나쁘지 않고 반드시 더 나은 것은 아닙니다.

아니면 다항식을 반환하고 이전의 p 값을 그대로 유지하는 것이 더 낫습니까?

더 낫고, 덜 놀라움과 코드를 이해하고 유지하기가 더 쉽습니다. (더 많은 변수를 만들어야하지만)

다항식은 변수 측면에서 고정 값을 가지므로 불변이되는 것이 실제로 의미가 있습니다. 운영을 위해 새로운 다항식을 반환하십시오.

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