Dart Ranges

Working with number sequences in Dart

📊 What are Ranges?

Ranges represent sequences of numbers in Dart. While Dart doesn't have built-in range syntax, you can create ranges using List.generate() and other methods for loops and iterations.


// Creating a range from 1 to 5
var range = List.generate(5, (i) => i + 1);
print(range); // [1, 2, 3, 4, 5]
                                    

Range Creation Methods

🔢

List.generate()

Create numbered sequences

List.generate(5, (i) => i);
// [0, 1, 2, 3, 4]
🔁

For Loop Ranges

Use loops for iterations

for (int i = 1; i <= 5; i++) {
  print(i);
}
📈

Custom Steps

Create ranges with steps

for (int i = 0; i <= 10; i += 2) {
  print(i); // 0, 2, 4, 6, 8, 10
}
🔄

Iterable.generate()

Memory-efficient ranges

Iterable.generate(5, (i) => i * 2);
// Lazy: 0, 2, 4, 6, 8

🔹 Basic Range Creation

Different ways to create ranges in Dart:

void main() {
  // Range 0 to 4
  var range1 = List.generate(5, (i) => i);
  print('Range 0-4: $range1');
  
  // Range 1 to 5
  var range2 = List.generate(5, (i) => i + 1);
  print('Range 1-5: $range2');
  
  // Range 10 to 14
  var range3 = List.generate(5, (i) => i + 10);
  print('Range 10-14: $range3');
}

Output:

Range 0-4: [0, 1, 2, 3, 4]
Range 1-5: [1, 2, 3, 4, 5]
Range 10-14: [10, 11, 12, 13, 14]

🔹 Range with Custom Steps

Create ranges with different step values:

void main() {
  // Even numbers 0 to 10
  var evens = List.generate(6, (i) => i * 2);
  print('Evens: $evens');
  
  // Odd numbers 1 to 9
  var odds = List.generate(5, (i) => i * 2 + 1);
  print('Odds: $odds');
  
  // Multiples of 5
  var fives = List.generate(4, (i) => (i + 1) * 5);
  print('Multiples of 5: $fives');
}

Output:

Evens: [0, 2, 4, 6, 8, 10]
Odds: [1, 3, 5, 7, 9]
Multiples of 5: [5, 10, 15, 20]

🔹 Range Helper Functions

Create reusable functions for common range operations:

🔸 Simple Range Function

List range(int start, int end) {
  return List.generate(end - start, (i) => start + i);
}

List rangeStep(int start, int end, int step) {
  List result = [];
  for (int i = start; i < end; i += step) {
    result.add(i);
  }
  return result;
}

void main() {
  print('Range 3-8: ${range(3, 8)}');
  print('Range 0-10 step 3: ${rangeStep(0, 10, 3)}');
}

Output:

Range 3-8: [3, 4, 5, 6, 7]
Range 0-10 step 3: [0, 3, 6, 9]

🔹 Lazy Ranges with Iterable

Memory-efficient ranges that generate values on demand:

void main() {
  // Lazy range - doesn't create list immediately
  var lazyRange = Iterable.generate(1000000, (i) => i);
  
  // Only processes what you need
  var firstFive = lazyRange.take(5).toList();
  print('First 5: $firstFive');
  
  // Filter even numbers from range
  var evenNumbers = lazyRange
      .take(10)
      .where((n) => n % 2 == 0)
      .toList();
  print('Even numbers: $evenNumbers');
}

Output:

First 5: [0, 1, 2, 3, 4]
Even numbers: [0, 2, 4, 6, 8]

🔹 Practical Range Examples

Real-world applications of ranges:

🔸 Creating Test Data

void main() {
  // Generate test scores
  var scores = List.generate(10, (i) => (i + 1) * 10);
  print('Test scores: $scores');
  
  // Generate user IDs
  var userIds = List.generate(5, (i) => 'user_${i + 1}');
  print('User IDs: $userIds');
  
  // Generate dates (day numbers)
  var days = List.generate(7, (i) => 'Day ${i + 1}');
  print('Week days: $days');
}

Output:

Test scores: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
User IDs: [user_1, user_2, user_3, user_4, user_5]
Week days: [Day 1, Day 2, Day 3, Day 4, Day 5, Day 6, Day 7]

🔹 Range Operations

Common Range Uses:

  • Loops: Iterate over number sequences
  • Test Data: Generate sample data sets
  • Indexing: Create index lists for arrays
  • Calculations: Mathematical sequences

Performance Tips:

  • Use Iterable.generate(): For large ranges
  • Use for loops: When you don't need a list
  • Use List.generate(): When you need random access

🧠 Test Your Knowledge

Which method creates a list of numbers from 1 to 5?