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 = {}; // 같은 내용! 이지만 코드가 짧고 간결해짐.