본문 바로가기
Dart (Flutter)

[Dart] Functions

by llHoYall 2023. 2. 3.

이번 포스팅에서는 Dart의 함수에 대해 살펴보겠습니다.

이미 다른 언어들을 통해 다 아는 내용일테니 Dart에서의 문법 사항 정도만 눈여겨 보시면 될 거 같아요.

Fundamentals

DartOOP 언어 입니다. 함수또한 object이며 first-class object이고, Function type을 갖습니다.

main() 함수는 프로그램의 entry point로 없어서는 안됩니다.

다른 언어들과 마찬가지로 return type과 parameters를 갖습니다.

명시적인 return type이 없고 return value가 없다면, null이 return 됩니다.

void sayHello(String name) {
  print("Hello, $name");
}

void main() {
  sayHello('HoYa');
}

Arrow Functions

함수의 축약형인 arrow function이 있습니다.

결과를 즉시 return 하며, arrow 뒤에는 expression만 올 수 있으며, statement는 올 수 없습니다.

num adder(int x, int y) => x + y;

Anonymous Functions

익명 함수는 다음과 같이 생겼습니다.

([[Type] param1[, …]]) {
  codeBlock;
};

문법 notation이 익숙지 않다면 보기 어려울 수 있겠지만, [] 표현은 optional인 걸 알고 보시면 어렵지 않으실 거에요.

const list = ['apples', 'bananas', 'cherry'];

list.map((item) {
  return item.toUpperCase();
});

간단한 예제로 한 번 보시죠.

map() method안에 익명 함수가 보이시죠? 문법 notation과 비교해 보시면 쉽게 아실 거에요.

list.map((item) => item.toUpperCase())

Arrow 함수를 사용하면 위와 같이 더욱 간소화 시킬 수 있습니다.

Parameters

이번에는 함수의 매개 변수에대해 조금 더 살펴보겠습니다.

Named Parameters

기본적으로는 위치에 따라 지정되는 positional parameter가 사용됩니다.

하지만, 이는 parameter의 개수가 많아지면 기억하기가 어렵고 가독성이 떨어지는 치명적인 단점이 있어 대부분의 modern 언어들은 이름으로 지정할 수 있는 기능이 지원됩니다.

먼저 예시를 보고 설명을 드리겠습니다.

void sayHello({String name = 'HoYa', int age = 18}) {
  print("Hello, $name. You are $age years old.");
}

num adder({required int x, required int y}) => x + y;

void main() {
  sayHello(age: 20, name: 'Kim');
  print(adder(x: 2, y: 3));
}

{}로 전체 parameter를 감싸면 named parameter로 동작하게 되며, 호출 시 이름을 명시해야합니다.

단, default value를 지정해 주거나 nullable임을 명시하거나 required keyword를 붙여 user로 부터 입력을 강제해야합니다.

Optional Positional Parameter

특정 parameter를 []로 감싸면, optional positional parameter로 동작합니다.

이 parameter는 생략이 가능하고, 생략 시 default value를 갖습니다.

Nullable일 경우는 null, 값을 명시했을 경우는 명시한 값이 default value가 됩니다.

이 때, 명시된 값은 compile-time 상수여야 합니다.

void sayHello(String name, [int? age]) {
  print("Hello, $name.");
  if (age != null) {
    print("You are $age years old.");
  }
}

void adder(int x, [int y = 0]) {
  print("$x + $y = ${x + y}");
}

void main() {
  sayHello('Kim');
  sayHello('Kim', 18);
  adder(1);
  adder(2, 3);
}

Wrap Up

이번에는 함수에 대해 살펴보았습니다.

상당히 직관적인 scope을 갖고 있기 때문에 따로 scope 관련 내용은 다루지 않았는데, 추가로 필요한 내용이 있다면 업데이트 하도록 하겠습니다.

'Dart (Flutter)' 카테고리의 다른 글

[Dart] Enumerated Type  (0) 2023.02.08
[Dart] Classes  (0) 2023.02.08
[Dart] Control Flow Statements  (0) 2023.02.03
[Dart] Operators  (0) 2023.02.02
[Dart] Data Types  (0) 2023.02.01

댓글