카테고리 없음
[Flutter] Dart 함수와 람다
연나연
2024. 4. 30. 10:17

목차
1. 함수의 기본 문법
2. 고정된 매개변수 (=포지셔널 파라미터)
3. 이름이 있는 매개변수 (=네임드 파라미터)
- 함수의 매개변수에 디폴트값 지정하기
4. 섞어서 사용하기
5. 함수를 매개변수로 받는 함수
- 익명함수
1. 함수의 기본 문법
반환타입 함수이름(매개변수들) {
코드들...
return 반환값
}
void main(){ var a1 = test_function(); print("a1 : $a1"); } // 반환값 : 반환값이 있으면 반환값의 타입을 적어주고 없으면 void를 작성해주세요 int test_function(){ return 100; }
2. 고정된 매개변수 (=포지셔널 파라미터)
-일반적인 방법으로 파라미터가 나열된 순서대로 인자에 값이 들어가는 방식입니다.
-포지셔널 파라미터방식에서 기본값(디폴트 값)을 지정하는 방법은 [ ]를 사용합니다.
void main(){ // 포지셔널 매개변수가 정의되어 있다면 // 매개변수의 순서에 맞춰서 값을 전달한다. var result2 = positional_function(100, 200); print("result2 : $result2"); // 기본값이 있는 매개변수는 생략이 가능하다 var result3 = positional_function2(100,200,300); print("result3 : $result3"); var result4 = positional_function2(100,200); print("result4 : $result4"); var result5 = positional_function2(100); print("result5 : $result5"); } // 포지셔널 매개변수 int positional_function(int a1, int a2){ return a1 + a2; } // 포지셔널 매개변수의 기본값 // 기본값을 가질 매개변수들을 [ ]로 묶어준다. int positional_function2(int a1, [int a2 = 2, int a3 = 3]){ return a1 + a2 + a3; }
3. 이름이 있는 매개변수 (=네임드 파라미터)
-순서와 관계없이 지정하고 싶은 매개변수의 이름을 이용해 값을 입력할 수 있습니다.
-중괄호 { } 와 required 키워드를 사용하여 네임드 파라미터를 지정할 수 있어요.
-함수를 사용할 때 인자로 매개변수의 이름을 이용하여 값을 전달하므로 매개변수의 순서는 상관없습니다.
-required 키워드는 매개변수가 null값이 불가능한 타입이면 기본값을 지정해 주거나 필수로 입력해야 한다는 의미입니다.
-네임드 파라미터에서 디폴트 값을 지정하려면 required 키워드를 생략하고 등호에 디폴트 값을 입력하면 됩니다.
void main(){ // 네임드 매개변수를 가진 함수 호출 var result6 = named_function(a1: 100, a2: 200); print("result6 : $result6"); var result7 = named_function(a1: 200, a2: 100); print("result7 : $result7"); // required가 붙어 있는 네임드 매개변수는 반드시 값을 지정해줘야 한다. // var result8 = named_function(); // 기본값이 null로 설정된 var result8 = named_function2(a1: 100, a2: 200); print("result8 : $result8"); var result10 = named_function2(a1: 100); print("result10 : $result10"); // 기본값이 지정된 매개변수가 있는 함수 호출 // 네임드 파라미터는 순서가 관계가 없으므로 중간의 매개변수를 생략해도 된다. var result11 = named_function3(a1: 100, a2: 200, a3: 300); print("result11 : $result11"); var result12 = named_function3(a1: 100, a2: 200); print("result12 : $result12"); var result13 = named_function3(a1: 100); print("result13 : $result13"); var result14 = named_function3(a1: 100, a3:300); print("result14 : $result14"); } // 네임드 매개변수 int named_function({required int a1, required int a2}){ return a1 + a2; } // required를 붙히지 않은 매개변수 // requried를 붙히지 않은 매개변수는 필수 항목이 아니기 때문에 // 개발자가 값을 전달하지 않을 수도 있다. // 이 때, null을 허용하는 변수로 정의해줘야 한다. int named_function2({required int a1, int? a2}){ if(a2== null){ return a1; } else { return a1 + a2; } } // 만약 기본값을 직접 지정한다면 // 위와 마찬가지로 required를 제거한다. int named_function3({required int a1, int a2 = 2, int a3 = 3}){ return a1 + a2 + a3; }
4. 섞어서 사용하기
포지셔널 매개변수와 네임드 매개변수가 섞여 있을 경우 포지셔널 매개변수를 앞쪽에 작성해준다.
void main(){ // 포지셔널과 네임드가 같이 있는 함수 호출 // 포지셔널이 앞쪽에 있다. var result15 = function4(100, a2: 200, a3: 300); print("result15 : $result15"); var result16 = function4(100, a2: 200); print("result16 : $result16"); } // 포지셔널과 네임드가 섞여 있을 경우 // 포지셔널을 앞쪽에 작성해줘야 한다. int function4(int a1, {required int a2, int a3=3}){ return a1 + a2 + a3; }
5. 함수를 매개변수로 받는 함수
익명함수
이름이 없는 함수- 매개변수로 함수를 받는 함수를 정의할 때 주로 사용한다.
-익명 함수와 람다함수는 둘 다 함수 이름이 없으며 일회성으로 사용됩니다. 통상 많은 언어에서 익명함수와 람다함수를 구분하지만 다트에서는 구분하지 않습니다.
함수의 형태는 다음과 같습니다. 표현 방식만 다를 뿐 기능은 동일하다고 생각하시면 됩니다.
void main(){ // 함수를 매개변수로 받는 함수에 전달할 함수는 익명 함수로 작성하는 경우가 많다. function5(100, 200, (v1, v2){ print("더하기"); return v1 + v2; }); function5(100, 200, (v1, v2){ print("빼기"); return v1 = v2; }); // 만약 전달할 함수 내부의 코드가 // return 값 // 형태만 잇다면 람다식으로 사용이 가능하다 function5(100,200,(v1,v2){ return v1 + v2; }); function5(100,200,(v1,v2) => v1+v2); } // 함수를 매개변수로 받는 함수 void function5(int a1, int a2, int Function(int v1,int v2) f3){ var r100 = f3(a1,a2); print("r100 : $r100"); }