Dart 언어 정리 : List 심화(forEach, map, reduce, fold)
일단 리스트를 먼저 만들어줍니다.
void main() {
//Looping
//Mapping
//Reduce
//Fold
List<String> newjeans = [
'민지',
'하니',
'해린',
'혜인',
'다니엘'
];
}
∇Looping-forEach
여기서 Loopint-forEach를 만들어주면,
void main() {
//Looping
//Mapping
//Reduce
//Fold
List<String> newjeans = [
'민지',
'하니',
'해린',
'혜인',
'다니엘'
];
//Looping - forEach
//리스트의 내부 메소드.
//메소드안에 함수와 파라미터를 받는게 가능.
newjeans.forEach((value){
print(value);
});
}
메서드 forEach안에 파라미터(value)를 넣어주고 프린트를 찍어주면
List에 담긴 값들이 출력이 됩니다.
for문처럼, 값을 돌아가면서 뽑아오는데, value라는 파라미터 값으로 담아서 print해준다고 이해했습니다.
∇Map.
-map은 forEach와 다르게 리턴값을 받을 수 있습니다.
final newList = newjeans.map((value){
});
map을 통해 리스트의 값을 리턴하게 되면
각각 리스트의 값이 새로운 값으로 대체되게 됩니다.
예시를 들자면,
void main() {
//Looping
//Mapping
//Reduce
//Fold
List<String> newjeans = [
'민지',
'하니',
'해린',
'혜인',
'다니엘'
];
//Looping - forEach
//리스트의 내부 메소드.
//메소드안에 함수와 파라미터를 받는게 가능.
newjeans.forEach((value){
print(value);
});
for(String value in newjeans) {
print(value); }
print('-----------');
//Mappint - map
final newList = newjeans.map((value){
return '제 이름은 $value입니다.';
});
print(newList);
}
이렇게 코드를 구성했을 때
이렇게 새롭게 구성된 값을 결과값으로 리턴하는 것을 볼 수 있습니다.
물론, 기존의 리스트는 변경이 없습니다.
void main() {
//Looping
//Mapping
//Reduce
//Fold
List<String> newjeans = [
'민지',
'하니',
'해린',
'혜인',
'다니엘'
];
//Looping - forEach
//리스트의 내부 메소드.
//메소드안에 함수와 파라미터를 받는게 가능.
newjeans.forEach((value){
print(value);
});
for(String value in newjeans) {
print(value); }
print('-----------');
//Mappint - map
final newList = newjeans.map((value){
return '제 이름은 $value입니다.';
});
print(newList);
print(newjeans);
}
∇Reduce/Fold.
Reduce와 Fold도 리턴값을 각각 돌려받습니다.
√ Fold 메서드는 Dart의 리스트나 이터러블 객체를 이용하여 값을 누적하는데 사용됩니다.
초기값과 함께 주어진 함수를 사용하여 각 요소를 처리하고 누적된 값을 반환합니다.
fold의 형태는
fold(시작할 값, (이전 리턴 계산 값을 담는 파라미터, 현재 집어넣고 있는 값의 파라미))
//Reduce/Fold -reduce, fold
List<int> numbers = [
1,2,3,4,5 ];
int total = numbers.fold(0,(total,element){
return total + element;
});
print(total);
√ fold와 유사하지만, reduce는 초기값을 사용하지 않고 리스트의 첫 번째 요소부터 시작하여 각 요소를 처리하고 누적된 값을 반환합니다.
reduce((이전에 리턴한 값, 현재 집어넣는 값))
int total2 = numbers.reduce((total,element){
return total+element;
});
print(total2);
실행하면 total의 첫번째 값이 들어가서 진행됩니다.
reduce가 fold와 다른점은, 반환값은 인수와 같은 타입이어야 합니다.
타입들이 다르면 reduce를 사용할 수 없습니다.
List<String> names = [
'코드팩토리',
'레드벨벳',
'BTS'
];
int total3 = names.fold(0,(total,element){
return total + element.length;
});
print(total3);
final total4 = names.reduce((total, element){
return total + element.length; });
}
이런식으로 코드를 구성했을 때
fold는 정상 실행이 되지만,
reduce에서
이처럼 타입이 맞지 않다는 오류가 발생합니다.
∇화살표함수 ( =>)
"=>" 는 Dart 언어에서 사용하고, 표현식을 오른쪽으로 실행하며 값을 반환하는 함수를 정의하는 방법입니다.
* 함수를 정의할 때 생기는 중괄호 {}를 없애고 사용합니다.
int total2 = numbers.reduce((total,element){
return total+element;
});
print(total2);
//화살표함수
int total3 = numbers.reduce((total,element) => total+element);
print(total3);
}
기존에 {}와 return을 적어주고 했던 것과 같은 결과값을 받을 수 있습니다.
단 화살표함수는 =>뒤에 오는 내용이 '한줄'로 끝나는 경우에만 사용이 가능합니다.