void
는 반환 값이 없다는 것을 의미한다. 따라서 함수 내에서 반환 값이 있을 경우 알맞은 자료형을 함수명 앞에 명시해야 한다. 코드 시작과 동시에 바로 return 을 때려버리는 함수의 경우 fat arrow syntax
를 사용하여 간략하게 작성할 수 있다.
// 반환 값이 없는 함수
void sayHello(String name) {
print("Hello $name nice to meet you!");
}
// 반환 값이 있는 함수
String sayHello(String name) {
return "Hello $name nice to meet you!";
}
// fat arrow syntax
String sayHello(String name) => "Hello $name nice to meet you!";
함수 호출 시 파라미터의 순서를 헷갈릴 수도 있고, 파라미터가 내포한 의미를 쉽게 파악하지 못할 수도 있다. 그러한 함수의 직관성을 높이기 위해 함수의 파라미터들을 중괄호({})
로 감싸주어 Named argument
로 만들 수 있다.
이제 파라미터의 순서에 관계 없이 함수를 호출할 수 있지만, 파라미터의 값을 모두 작성하지 않을 수도 있기 때문에 기본 값을 지정하거나, required modifier를 사용하여 미연에 오류를 방지할 수 있다.
String sayHello({
String name = 'gigi',
int age = 99,
String country = 'Korea',
}) {
return "Hello $name, you are $age, and you come from $country";
}
void main() {
// 기본 값을 지정하였을 경우 파라미터를 입력하지 않아도 된다.
sayHello();
}
required
를 작성하면 함수 호출 시 파라미터가 정상적으로 입력되지 않은 경우 Dart의 null safety 특성에 기반하여 빨갛게! 알려준다.String sayHello({
required String name,
required int age,
required String country,
}) {
return "Hello $name, you are $age, and you come from $country";
}
void main() {
// 함수에 정의된 파라미터의 순서와 상관 없이 값을 입력할 수 있다.
sayHello(age: 99, country: 'Korea', name: 'gigi');
}
앞서 말했다시피 아래 코드는 파라미터를 정상적으로 입력하지 않은 경우이다.
파라미터의 필수 값 여부를 선택적으로 지정하고 싶다면 필수 요소에 포함하고 싶지 않은 특정 파라미터를 대괄호([])
로 감싸고 기본 값을 할당하면 된다. 이와 같이 코드를 작성할 경우 대괄호로 감싼 파라미터의 값이 null
일 경우 함수 정의 시 지정한 기본 값
으로 할당된다.
String sayHello(String name, int age, [String? country = 'Korea']) =>
"Hello $name, you are $age years old from $country";
void main() {
sayHello('gigi', 99);
}
QQ Operator에는 ??
, ??=
이 있다.
??
는 좌항이 null이면 우항을 반환한다.
??=
는 좌항이 null이면 우항의 값을 할당한다.
자료형에 원하는 alias(별명)
를 만들 때 사용할 수 있다.
typedef ListOfInts = List<int>;
ListOfInts reverseListOfNumbers(ListOfInts list) {
var reversed = list.reversed;
return reversed.toList();
}
void main() {
reverseListOfNumbers([1, 2, 3, 4]);
}