Named Parameters
인자의 이름을 명시해서 값을 전달하는 방식으로 인자의 순서에 구애받지 않고 이름을 지정하여 값을 전달할 수 있기 때문에 가독성이 높아지고 선택적으로 인자를 전달할 수 있게 한다.
(조건)
- named argument 를 사용하기 위해서 parameter 리스트를 가지게 해야 함.
ex) sayHello({String name, int age, String country,}) { }
- null 값이 전달되고 해당 값을 참조하게 될 것을 Dart가 우려하기 때문에 매개변수의 기본값을 넣어줘야 함 (null 참조 방지)
null safety 방지 방법 2가지
1. default value를 줘서 방지하는 방법
String sayHello({
String name = 'anon',
int age = 99,
String country = 'wakanda', // 마지막 아이템에 , 를 붙이면 알아서 포맷됨
}) {
return "Hello $name, you are $age, and you come from $country";
}
위 코드는 argument 에 default value 를 주기 때문에 해당 함수를 호출할 때 null 값을 전달해도 기본값을 참조하여 null safety 방지가 가능하다.
2. require modifier 를 사용해서 '필수 값' 으로 만드는 방법
String sayHello({
// null safety 방지를 위한 두 번째 방법으로 인자에게 required 지정자를 붙여서 반드시 인자를 전달 받도록 하는 방법임
required String name,
required int age,
required String country, // 마지막 아이템에 , 를 붙이면 알아서 포맷됨
}) {
return "Hello $name, you are $age, and you come from $country";
}
위 코드에서 인자에게 required 지정자를 붙여 반드시 인자를 전달 받도록 하는 방법이며, 로그인 같은 기능을 구현할 때 사용자가 반드시 데이터를 넘겨줘야 실행 가능하기 때문에 해당 방법을 사용하면 적절하다.
void main() {
print(sayHello(
// 함수의 정의를 확인하고 순서에 상관없이 그에 맞게 인자를 명시하여 값을 넘김
age: 20,
country: 'korea',
name: '슬슬',
));
print(sayHello(
age: 10,
name: '산이',
country: 'koera',
));
// sayHello 함수를 호출하려면 required 인자를 반드시 전달해야 하기 때문에 오류가 뜸
}
Parameter 의 두 가지 종류
- Positional Parameter
- parameter 의 순서를 지켜주며 인자를 전달해야 한다.
- 문제점) 함수를 호출할 때마다 각각의 위치를 기억해야 한다.
String sayHello(String name, String country, int age) {
return "Hello $name, you are $age, and you come from $country";
}
void main() {
sayHello('nico', 'wakanda', 12); // 3 positional argument 를 요구함
}
=> 위와 같은 방법을 지양해야 함. 왜냐하면 해당 function이 같은 파일 내에 있지 않을 때 인자만 보고 이해하기가 어려움 (가독성 저하)
- Optional Positional Parameters
- 매개변수 중 하나의 인자는 받지 않아도 되는 경우의 설정
- 값을 받지 않아도 되는 인자에게 대괄호를 씌우고 nullable 하게 바꾼 뒤 default value 를 준다
- 주의점) 잘 사용하지 않는다.
String sayHello(String name, int age, [String? country = 'cuba']) => 'Hello $name, you are $age years old from $country';
void main() {
var result = sayHello('nico', 12,); // 따라서 country 인자를 넘겨주지 않아도 에러 X
print(result);
}
=> 위 방법은 매개변수 중 값을 받지 않아도 되는 인자를 따로 설정해 주는 경우에 사용하는 방법이나, 잘 사용하지 않는다.
'Dart' 카테고리의 다른 글
(Dart) QQ Operator 와 Typedef (0) | 2024.10.16 |
---|---|
(Dart) Dart의 특징에 대해 알아보자 (0) | 2024.10.07 |
(Dart) final, late, const 키워드를 사용하여 변수 생성하기 (0) | 2024.10.06 |
(Dart) null safety 와 nullable 변수 (0) | 2024.10.06 |
(Dart) var, dynamic 키워드 (0) | 2024.10.06 |