Language/Dart

[Excercism] Space Age #enum

paran21 2022. 9. 8. 16:32

https://exercism.org/tracks/dart/exercises/space-age

 

Space Age in Dart on Exercism

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

exercism.org



행성과 초seconds가 주어지면 조건에 따라서 나이를 계산하는 문제이다.

 

각 행성들의 공전 주기가 Earth Year로 주어졌기 때문에

 

1) 행성별로 One Earth Year을 구하고, 

2) 주어진 초를 지구 나이로 환산한 뒤에

 

2) / 1)로 답을 구했다.

 

비슷비슷한 개념이 많아서 메서드명이나 변수명을 어떻게 만들어야 하는지 고민이 되었다.

(지금도 가독성이 좋은 것 같지는 않다)

 

class SpaceAge {
  final int seconds_of_one_earth_year = 31557600;
  
  double age({required String planet, required int seconds}) {
    double _oneEarthYear = EarthYear.getOneEarthYear(planet);
    double _age = _convertToEarthAge(seconds) / _oneEarthYear;
    return double.parse(_age.toStringAsFixed(2));
  }
  
  double _convertToEarthAge(int seconds) => seconds / seconds_of_one_earth_year;
}

enum EarthYear {
  earth('Earth', 1),
  mercury('Mercury', 0.2408467),
  venus('Venus', 0.61519726),
  mars('Mars', 1.8808158),
  jupiter('Jupiter', 11.862615),
  saturn('Saturn', 29.447498),
  uranus('Uranus', 84.016846),
  neptune('Neptune', 164.79132);
  
  final String _planet;
  final double _oneEarthYear;
  
  const EarthYear(this._planet, this._oneEarthYear);
  
  static double getOneEarthYear(String planet) {
    return EarthYear.values
        .firstWhere((value) => value._planet == planet)
        ._oneEarthYear;
  }
}

 

다트에서 enum을 처음 써봤는데 자바와 크게 다르지 않았다.

모든 변수는 private으로 만들었고, getter는 필요하지 않을 것 같아서 static method만 만들었다.

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

[Exercism] Gigasecond #Duration #Named parameter  (0) 2022.09.08
[Exercism] Hamming  (0) 2022.09.08
[Exercism] Bob  (0) 2022.09.08
[Exercism] Word Count  (0) 2022.08.31
[Exercism] Difference Of Squares  (0) 2022.08.30