목차 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");
}