Flutter/Dart

[Dart] Dart 언어 기초 문법 - (4) 함수와 람다

jungha_k 2023. 6. 7. 15:17

함수의 일반적인 특징

 

1. 한 번 작성, 여러 곳에서 재활용 가능

2. 반환 값 없을 경우 void 키워드 사용


매개변수 지정 방법

1. 위치 매개변수 (positional parameter, 순서가 고정된 매개변수)

- 입력된 순서대로 매개변수에 값 지정

int addTwoNumbers(int a, [int b = 2]){
	return a + b;
}

void main(){
	print(addTwoNumbers(1)); //3
}

 

2. 명명된 매개변수 (named parameter, 이름이 있는 매개변수)

- 순서 상관 X, 지정하고 싶은 매개변수의 이름 이용, 값 입력

- { } / required 키워드 이용

int addTwoNumbers({
 required int a,
 int b = 2;
 }) {
  return a + b;
 }
 
 void main(){
  print(addTwoNumbers(a: 1)); //3
  }

 

위치 매개변수, 명명된 매개변수 섞어쓸 수 有

: 반드시 위치 매개변수가 명명된 매개변수보다 먼저 위치해야함!

int addTwoNumbers(
	int a, {
    required int b,
    int c = 4,
    }) {
    return a + b + c;
}

void main(){
	print(addTwoNumbers(1, b:3, c:7)); //11
}
)

 


* 익명 함수와 람다 함수

 

익명 함수 & 람다 함수 공통점 - 둘 다 함수 이름 無, 일회성 사용

다트에서는 익명 함수, 람다 함수를 구분하지 않는다!

 

 

* 익명 함수

(매개변수){
	함수 바디
}

 

* 람다 함수 : 익명 함수에서 {} 제거, => 추가됨!

(매개변수) => 단 하나의 스테이먼트 (명령 단위)
  • 글로벌 스코프로 다룰 필요 無 : 이름 정하고, 미리 선언할 필요 없어서
  • 적절히 사용시 코드 간결화 가능
  • 가독성이 높음 (위치 적절) → 콜백함수, 일회성 높은 로직 사용시 주로 사용
// 익명 함수
void main(){
	List<int> numbers = [1,2,3,4,5];
    
// 일반 함수로 모든 값 더하기
final allMembers = numbers.reduce((value, element) {
	return value + element;
    });
    
print(allMembers);
}
↕ ↕ ↕ ↕ ↕ ↕ ↕ ↕ ↕ ↕

// 람다 함수
void main(){
	List<int> numbers = [1,2,3,4,5];
    
 // 람다 함수로 모든 값 더하기
 final allMembers = numbers.reduce((value, element) => value + element);
 
 print(allMembers);
}

* typedef 와 함수

 

typedef 키워드?

: 함수의 시그니처를 정의하는 값

(시그니처 : 함수 선언부를 정의! = 반환값 타입, 매개변수 개수와 타입... 동작에 대한 정의는 無)

typedef Operation = void Function(int x, int y);

void add(int x, int y){
	print('결괏값 : ${x + y}');
}

void subtract(int x, int y, Operation oper){
	oper(x, y);
}

void main(){
	calculate(1, 2, add);
}

 

typedef ListMapper<X> = Map<X, List<X>>;

Map<String, List<String>> m1 = {}; // 코드가 길어진다
ListMapper<String> m2 = {}; // 같은 내용! 이지만 코드가 짧고 간결해짐.