[Dart] 함수(Function) 및 타입디프(Typedef)

오묘(吳猫)·2022년 5월 18일
0

Dart

목록 보기
5/5
post-thumbnail

1. 함수(Function)

반복되는 로직, 반복되는 코드를 한 번만 작성하고서 재활용할 수 있습니다.

- Positional Parameter

순서가 중요한 파라미터로 함수 사용 시 파라미터 값을 반드시 적어줘야합니다.

👉 예제

void main() {
  // addNumbers(10, 20); // 에러
  addNumbers(30, 40, 50);
}

addNumbers(int x, int y, int z) { 
  int sum = x + y + z;

  print('x : $x'); // x : 20
  print('y : $y'); // y : 30
  print('z : $z'); // z : 40

  if(sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

- Optional Paramenter

파라미터 값이 있어도 되고 없어도 됩니다.
파라미터 안에 대괄호([])를 넣어주면 사용할 수 있으며
사용 방법에 의해 null 을 허용하지 않을 경우 기본값을 추가해줄 수 있습니다.
Optional Paramenter는 Named이거나 Positional 형태일 수 있으나, 동시에 두 가지 형태는 될 수 없습니다.

👉 예제

void main() {
  addNumbers();
  addNumbers(20, 30, 40);
}

addNumbers([int x=10, int y = 20, int z = 30]) { 
  int sum = x + y + z;

  print('x : $x'); // x : 10, x : 20
  print('y : $y'); // y : 20, y : 30
  print('z : $z'); // z : 30, z : 40

  if(sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

- Named Parameter

이름이 있는 파라미터로 순서가 중요하지 않습니다.

함수 호출 시 전달하는 인자를 paramName: value 이름으로 명시하고 그에 해당하는 인자값(value)을 입력하여 전달 하는 방법으로 파라미터 안에 중괄호({})를 넣어주면 사용할 수 있습니다.

Named Parameter 에서 필수 파라미터를 표시하기 위해서는 @required 를 표기 해주어야합니다.

👉 예제

void main() {
  addNumbers(y: 20, x: 10);
  addNumbers( z: 30, x: 10, y: 40);
}

addNumbers({
  required int x,
  required int y,
  int z = 30,
}) {
  int sum = x + y + z;

  print('x : $x'); // x : 10, x : 10
  print('y : $y'); // y : 20, y : 40
  print('z : $z'); // z : 30, z : 30

  if(sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

- Void

우리말로 '공허, 아무것도 없음'을 의미합니다.
반환값이 없을 경우 void 반환 타입을 사용합니다.

👉 예제

// 반환값이 없을 경우
void main() {
  addNumbers(x: 10);
}
void addNumbers({required int x,}) {
  print('x : $x');
}

// 반환값이 있을 경우
void main() {
  int result = addNumbers(x: 20);
}

int addNumbers({required int x,}) {
  print('x : $x');
  return x;
}

- Arrow Function

Lambda 함수(Arrow Function)이 지원되어 조금 더 간결한 코드 작업이 가능합니다.

👉 예제

void main() {
  int result = addNumbers(20, y: 10);

  print('result : $result');
}

// arrow 함수 변환 전
int addNumbers(int x, {
  required int y,
  int z = 30,
}) {
  int sum = x + y + z;
  return sum;
}

// arrow 함수 변환 후
int addNumbers(int x, {
required int y,
int z = 30,
}) => x + y + z;

2. 타입디프(Typedef)

함수를 미리 시크니처화 해서 여러가지 함수를 유용하게 다룰 수 있는 기능입니다.

👉 예제

void main() {
  Operation operation = add;

  int result1 = operation(10, 20, 30);
  print(result1);

  operation = subtract;

  int result2 = operation(10, 20, 30);
  print(result2);

  int result3 = calculate(30, 40, 50, add);

  print(result3);
}
typedef Operation = int Function(int x, int y, int z);

// 더하기
int add(int x, int y, int z) => x + y + z;

// 빼기
int subtract(int x, int y, int z) => x - y - z;

// 계산
int calculate(int x, int y, int z, Operation operation) {
  return operation(x, y, z);
}
profile
괴발개발 기록일지

0개의 댓글