카테고리 없음

[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");
}​