REFACTOR: extract logic and remove loop

This commit is contained in:
fiatcode 2026-02-10 08:39:34 +07:00
parent 5c9962eb61
commit c1a5ed7ed7
2 changed files with 17 additions and 17 deletions

View file

@ -1,17 +1,17 @@
String integerToRoman(int number) {
var result = '';
for (int i = 0; i < number; i++) {
if (number == 5) {
result += 'V';
return result;
const romanSymbols = {5: 'V', 1: 'I'};
if (_isSubtractiveCase(number)) {
return romanSymbols[1]! + romanSymbols[5]!;
}
if (number == 4) {
result += 'IV';
return result;
if (_canRepeatSymbol(number)) {
return romanSymbols[1]! * number;
}
result += 'I';
}
return result;
return romanSymbols[number] ?? '';
}
bool _isSubtractiveCase(int number) => number == 4;
bool _canRepeatSymbol(int number) => number < 4;

View file

@ -14,11 +14,11 @@ void main() {
expect(roman_numerals.integerToRoman(3), 'III');
});
test('converts 5 to V', () {
expect(roman_numerals.integerToRoman(5), 'V');
});
test('converts 4 to IV', () {
expect(roman_numerals.integerToRoman(4), 'IV');
});
test('converts 5 to V', () {
expect(roman_numerals.integerToRoman(5), 'V');
});
}