sumUpTo function

num sumUpTo(
  1. num start,
  2. num end, {
  3. num step = 1,
})

Sums all values from start to end (inclusive), stepping by step.

Throws an ArgumentError if step is zero or its sign doesn’t allow reaching end from start.

Example:

print(sumUpTo(1, 5));                 // 15  (1+2+3+4+5)
print(sumUpTo(5, 1, step: -1));       // 15  (5+4+3+2+1)
print(sumUpTo(1, 5));                 // 15
print(sumUpTo(5, 1, step: -1));       // 15
print(sumUpTo(7, 7));                 // 7
print(sumUpTo(0, 10, step: 2));       // 30  (0+2+4+6+8+10)
sumUpTo(1, 5, step: -1);              // throws ArgumentError
sumUpTo(2, 8, step: 0);               // throws ArgumentError

Implementation

num sumUpTo(num start, num end, {num step = 1}) {
  if (step == 0) {
    throw ArgumentError('Step cannot be zero');
  }
  if ((step > 0 && start > end) || (step < 0 && start < end)) {
    throw ArgumentError(
      'Invalid range: step direction must match range direction',
    );
  }

  num total = 0.0;
  for (var current = start;
      step > 0 ? current <= end : current >= end;
      current += step) {
    total += current;
  }
  return total;
}