https://exercism.org/tracks/dart/exercises/space-age
행성과 초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 |