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