Language/Dart

[Exercism] Difference Of Squares

paran21 2022. 8. 30. 21:10

https://exercism.org/tracks/dart/exercises/difference-of-squares

 

Difference Of Squares in Dart on Exercism

Can you solve Difference Of Squares in Dart? Improve your Dart skills with support from our world-class team of mentors.

exercism.org

 

먼저 처음 풀이는 단순히 for문을 사용해서 푼 풀이다.

결과적으로 return해야하는 것은 합의제곱(squareOfSum)과 제곱의합(sumOfSquares)이다.

 

import 'dart:math';

class DifferenceOfSquares {
  int squareOfSum(int number) {
    int sum = 0;
    for(int i = 1; i < number + 1; i++) {
      sum += i;
    }
    return pow(sum, 2) as int;
  }
  
  int sumOfSquares(int number) {
    num squares = 0;
    for(int i = 1; i < number + 1; i++) {
      squares += pow(i, 2);
    }
    return squares as int;
  }
  
  int differenceOfSquares(int number) {
    return squareOfSum(number) - sumOfSquares(number);
  }
}

 

두 번째로 수정한 버전은 community solution을 참고하였다.

일단 람다식으로 풀었는데, map과 reduce에서 매개변수를 생략하고 함수를 바로 사용할 수 있다는 것을 알게 되었다.

또 sum과 square은 어차피 반복해서 사용하는 메서드라 private으로 분리를 해주었다.

class DifferenceOfSquares {
  int differenceOfSquares(int number) => squareOfSum(number) - sumOfSquares(number);
  
  int squareOfSum(int number) => _square(_toList(number).reduce(_sum));
  int sumOfSquares(int number) => _toList(number).map(_square).reduce(_sum);
  
  Iterable<int> _toList(int number) => Iterable.generate(number, (i) => i + 1);
  int _sum(int left, int right) => left + right;
  int _square(int value) => value * value;
}

 

그렇지만 팀원과 코드리뷰를 하면서, 어차피 sum과 square같이 단순한 메서드를 굳이 분리를 해주지 않아도 되지 않을까? 라는 얘기를 했고, 메서드를 너무 분리하면서 오히려 가독성을 떨어트리는 것이 아닌지 의견을 나누었다.

 

나는 보통 세세하게 쪼개는 편인거 같은데, 메서드를 분리한다면 우선 메서드 네이밍을 아주 잘 해야한다고 생각한다.

그래서 굳이 해당 메서드로 들어가지 않아도 이 메서드에서 어떤 로직이 일어날지 추론을 할 수 있다면 매번 세부 메서드로 들어가 볼 필요는 없을 것 같다!

'Language > Dart' 카테고리의 다른 글

[Exercism] Bob  (0) 2022.09.08
[Exercism] Word Count  (0) 2022.08.31
[Style] no_leading_underscores_for_local_identifiers  (0) 2022.08.19
[Exercism] Armstrong Numbers #num #math  (0) 2022.08.19
[Exercism] Scrabble Score #가독성 있는 코드란?2  (0) 2022.08.18