다트 언어에는 기본적으로 제공하는 수 많은 함수가 존재 합니다.
우리는 이미 만들어져 있는 함수를 가져다가 원하는 개발을 하면 될 뿐 입니다.
Iterable
- Iterable은 리스트(List)와 Set(집합) 처럼 하나씩 순회 가능한 컬렉션의 공통 부모 타입.
- Iterable은 인터페이스(추상 클래스).
- 정리하면 Interable은 여러 데이터를 하나씩 순서대로 꺼내서 볼 수 있는 구조.
- 아래 코드는 List, Set 데이터를 map 함수를 사용해서 Interable 형태로 변환함.
- map 함수는 데이터를 하나씩 가져와서 처리.
void main() {
List<String> listStudents = ['철수', '짱구', '맹구', '유리'];
final listNewStudents = listStudents.map((x){
return '1학년 1반 ${x}';
});
print(listStudents);
print(listNewStudents);
Set<String> setStudents = {'철수', '짱구', '맹구', '유리'};
final setNewStudents = setStudents.map((x){
return '1학년 1반 ${x}';
});
print(setStudents);
print(setNewStudents);
}
Map 함수를 사용한 데이터 변경하기.
- split('') 할 경우 문자열을 하나의 문자로 나누어 리스트 타입으로 만들어줌.
- 리스트 상태의 데이터를 map 을 사용해서 Iterable 타입으로 변경과 동시에 데이터에 '등' 문자 데이터 추가.
- 마지막으로 다시 리스트 타입으로 데이터 변환 후 출력.
void main() {
String splitString = '12345';
var result = splitString.split('').map((x) => '${x}등').toList();
print(result);
}
- Map 컬렉션 같은 경우 데이터가 key, value 두개이므로 각각 컨트롤 가능.
void main() {
Map<String, String> player = {
'토트넘' : '손흥민',
'뭰헨' : '김민재',
'파리' : '이강인'
};
final result = player.map((key, value) => MapEntry('해외축구팀 ${key}','해외축구선수 ${value}'),);
print(result);
final kyes = player.keys.map((x) => '외국팀 ${x}');
final values = player.values.map((x) => '외국선수 ${x}' );
print(kyes);
print(values);
}
- Set 컬렉션도 변경 가능함.
void main() {
Set soccerPlayer = {
'손흥민',
'이강인',
'김민재'
};
final mapSet = soccerPlayer.map((x) => '축구 선수 ${x}').toSet();
print(mapSet);
}
where 함수
한 마디로 조건임.
void main() {
List<Map<String, String>> soccerPlayer = [{
'team' : '토트넘',
'name' : '손흥민',
},{
'team' : '뭰헨',
'name' : '김민재',
},{
'team' : '파리',
'name' : '이강인',
},
];
final result = soccerPlayer.where((x) => x['team'] == '토트넘');
print(soccerPlayer);
print(result);
}
reduce 함수
리듀스는 다트 컬렉션에서 모든 요소를 누적하여 하나의 값으로 줄이는 함수.
처음 두개의 파라미터를 가지고 연산을 시작하고 그 결과를 다음 요소와 계속 연산.
결국에는 반복 하는 코드로 전 반복 연산값을 사용하는 특성상 무조건 리턴 값이 있어야함.
void main() {
List<int> numbers = [1, 2, 3, 4, 5, 6, 7];
final result = numbers.reduce((prev, next) {
print('------------');
print('prev : ${prev}');
print('next : ${next}');
return prev + next;
});
print(result);
final result = numbers.reduce((prev, next) => prev + next);
}
fold 함수
다트의 폴드 함수는 리스트의 모든 요소를 하나의 값으로 누적하는 함수.
리듀스와 유사하지만 초기값을 직접 지정할 수 있는게 차이.
아래 코드에서 모든게 똑같지만 시작 숫자가 10이라는 차이.
void main() {
List<int> numbers = [1, 2, 3, 4, 5, 6, 7];
final result = numbers.fold(10, (prev, next) {
print('------------');
print('reduce prev : ${prev}');
print('reduce next : ${next}');
return prev + next;
});
final result2 = numbers.reduce((prev, next) {
print('------------');
print('fold prev : ${prev}');
print('fold next : ${next}');
return prev + next;
});
print(result);
print(result2);
}
cascading operator
List 병합할 때 사용.
first, second 리스트를 한번에 사용하고 싶을 때 유용.
void main() {
List<int> first = [1, 2, 3, 4, 5];
List<int> second = [11, 12, 13, 14, 15];
print([first, second]);
print([...first, ...second]);
}
컬렉션 데이터를 클래스로 변경
toString 함수는 객체를 문자열로 출력할 때 자동으로 호출.
void main() {
List<Map<String, dynamic>> rawData = [
{'name': '철수', 'grade': 1},
{'name': '영희', 'grade': 2},
{'name': '짱구', 'grade': 3},
];
List<Student> students = rawData.map((data) {
return Student(data['name'], data['grade']);
}).toList();
// print(students.map((s) => s.toString()).toList());
print(students);
}
class Student {
final String name;
final int grade;
Student(this.name, this.grade);
@override
String toString() => 'Student(name: $name, grade: $grade)';
}
'Dart' 카테고리의 다른 글
| 다트 스트림(Dart Stram)이란 무엇일까. (0) | 2025.07.16 |
|---|---|
| 다트 비동기 프로그래밍(Dart async Programming)란 무엇일까. (0) | 2025.07.15 |
| 다트 제네릭(Dart Generic)란 무엇일까. (2) | 2025.07.08 |
| 다트 인터페이스(Dart Interface)란 무엇일까. (0) | 2025.07.08 |
| 다트(Dart) 상속(inheritance)이란 무엇일까. (0) | 2025.07.07 |