Dart 함수

Byeonggwan Kang·2023년 3월 28일
0

dart, flutter and modes

목록 보기
4/9

Dart의 함수와 관련된 특징을 설명한다.

  • Required parameter
  • Named parameter
  • positional parameter

Required parameter

void printPositionalHello(String name, String region) {
	print('Hello $name, you are from $region');
}

void main() {
	printPositionalHello('철수', 'Korea');
}


출력
Hello 철수, you are from Korea.

다음과 같이 함수의 파라미터를 모두 사용하도록 하는 방식을 Required parameter라고 부른다. 이 방식은 편하지만 몇 가지 문제점이 있다. 파라미터가 많아지거나, 다른 파일에 쓰여있는 함수를 사용할 때 가독성이 떨어질 수 있다. 따라서 이 방식을 보완하기 위해 dart에는 다른 언어와 비슷하게 named parameter를 지원한다.


Named parameter

void printNamedHello({
	required String name,
	required int age,
	String region = 'Korea',
}) {
	print("Hello $name, you are $age years old from $region.");
}

void main() {
	printNamedHello(
    name: "철수",
    age: 27,
  );
}


출력
Hello 철수, you are 27 years old from Korea.

Named parameter 방식에서는 파라미터의 순서와 상관 없이 함수를 호출할 수 있다. Named parameter 방식을 사용할 파라미터에는 중괄호({})를 감싸주면 된다. 함수 호출 시 반드시 받아야 할 인자는 required 키워드를 사용한다. 받지 않아도 되는 파라미터들은 반드시 default 값을 정해주거나 nullable로 선언해야 한다. 이는 함수 호출 시 null 값으로 들어갈 수 있어서인데, dart는 null safety를 중요하게 여긴다는 것을 다시 한 번 상기시켜주는 부분이다.


Optional Positional parameter

void printOptinalHello(String name, int age, [String region = 'Korea']) {
	print("Hello $name, you are $age years old from $region.");
}

void main() {
	printOptinalHello("병관", 27);
}


출력
Hello 철수, you are 27 years old from Korea.

단순하게 파라미터를 안 써도 되도록 함수를 선언하고 싶다면 해당 파라미터에 대괄호([])를 둘러주면 된다. 물론 이 파라미터도 반드시 default 값을 알려주거나 nullable로 선언해야 한다는 것 잊지 말자.


번외: QQ operator

Object isEvenInt(int? num) => num?.isEven ?? -1;

String nullCheck(String? str) => str ??= "null value is detected";

void main() {
	print(isEvenInt(null));
	print(nullCheck(null));
}


출력
-1
null value is detected

노마드 코더에서는 ??와 ??=연산자를 언급한다. 이 두 연산자는 null 값을 다루는 연산자이다. 사용 방법은 다음과 같다.

LEFT ?? RIGHT   // LEFT가 null이면 RIGHT, 아니면 LEFT를 반환함.
LEFT ??= RIGHT // LEFT 가 null이면 LEFT에 RIGHT를 대입함.

딱 봐도 awesome한 연산자니까 기억해두면 된다.

0개의 댓글