공부내용

dart문법_함수형 프로그래밍

골목코딩 2024. 10. 30. 10:47

메서드 체이닝(함수의 연속)

: .을 이용해 연속으로 함수 사용

int number = -12345
var result = number.abs().toString().contains('3');
print(result); // true

 

 

많이 사용되는 함수

1. 형변환 함수

 

toString() : int → String으로 변환

int.parse() : String int로 변환(변환 불가시 오류 발생)

int.tryParse() : String  int로 변환(변환 불가시 null 반환)

double.parse() : String  double로 변환(변환 불가시 오류 발생)

double.tryParse() : String  double로 변환(변환 불가시 null 반환)

toList() : 특정 Collection 타입의 값을 List 타입으로 변환(Map 변환 불가)

toSet() : 특정 Collection 타입의 값을 Set 타입으로 변환(Map 변환 불가, 중복 항목은 자동 삭제)

asMap() : 특정 Collection 타입의 값을 Map 타입으로 변환

                 (Set 변환불가_index값이 없어서. List에서 변환시 index가 키값이 됨)

 

2. 고차함수

 

map()

: Collection 타입인 데이터의 각 요소에 특정 함수를 적용한 새로운 Collection 타입의 데이터를 반환.

  원본 데이터를 직접 가공하지 않고, 특정 함수를 적용한 새로운 데이터를 반환.

  Collection의 Map과 다름.

 

map(([매개변수]) { return [매개변수에 적용할 동작] });

 

List<int> numbers = [1, 2, 3, 4, 5];
var doubledNumbers = numbers.map((n) {
return n * 2;
});
print(doubledNumbers); // (2, 4, 6, 8, 10)

 

 

where()

: Collection 타입의 데이터에 있는 각 요소들을 특정 조건에 넣었을 때 참인 요소들만 필터링한 

  새로운 Collection 타입의 데이터를 반환

  참인 요소가 없을 경우 빈 값을 반

 

where(([매개변수]) { return [조건식] });

 

List<int> numbers = [1, 2, 3, 4, 5, 6];
var result = numbers.where((number) {
return number.isEven
});
print(result); // (2, 4, 6)

 

where(([매개변수]) => [조건식] );

 

List<int> numbers = [1, 2, 3, 4, 5, 6];
var result = numbers.where((n) => n.isEven);
print(result); // (2, 4, 6)

 

 

firstWhere() : 참인 요소들 중 첫번째 요소 반환

lastWhere()  : 참인 요소들 중 마지막 요소 반환

 

reduce() : Collection 타입의 데이터에 있는 요소들을 하나의 값으로 결합

reduce(([매개변수1], [매개변수2]) { return [적용할 동작] });

List<int> numbers = [1, 2, 3, 4, 5];
var result = numbers.reduce((a, b) {
  return a + b;
});

 

fold() : Collection 타입의 데이터에 있는 요소들을 하나의 값으로 결합

fold(초기값, ([매개변수1], [매개변수2]) { return [적용할 동작] });

List<int> numbers = [1, 2, 3, 4, 5];
var result = numbers.fold(0, (a, b) {
  return a + b
});

 

any() : Collection 타입의 데이터에 있는 요소 중 하나라도 주어진 조건을 만족하면 true 를 반환

any(([매개변수]) { return [조건식] });

List<int> numbers = [1, 2, 3, 4, 5];
var result = numbers.any((number) {
return number.isEven;
});
print(result); // true

 

every() : Collection 타입의 데이터에 있는 모든 요소가 주어진 조건을 만족하면 true 를 반환

takeWhile() : Collection 타입의 데이터에 있는 요소들을 주어진 조건에 넣었을 때 참이 되는 동안은 해당 요소들을

          반환하고, 조건이 처음으로 거짓이 되는 순간부터의 요소들은 모두 무시

takeWhile(([매개변수]) { return [조건식] });

List<int> numbers = [1, 2, 3, 4, 5, 6];
var result = numbers.takeWhile((number) {
 return number < 4;
});
print(result); // (1, 2, 3)

 

skipWhile() : Collection 타입의 데이터에 있는 요소들을 주어진 조건에 넣었을 때 참이 되는 동안은 해당 요소들을

              건너뛰고, 조건이 처음으로 거짓이 되는 순간부터의 요소들을 모두 반환

List<int> numbers = [1, 2, 3, 4, 5, 6];
var result = numbers.skipWhile((number) {
 return number < 4;
});
print(result); // (4, 5, 6)