Dart의 함수와 관련된 특징을 설명한다.
- Required parameter
- Named parameter
- positional 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를 지원한다.
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를 중요하게 여긴다는 것을 다시 한 번 상기시켜주는 부분이다.
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로 선언해야 한다는 것 잊지 말자.
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한 연산자니까 기억해두면 된다.