1. Required Parameter
2. Optional Positional Parameter
3. Optional Named Parameter
Optional은 다시 nullable 기반인지(default가 없는지), 기본값(nullable value) 기반인지에 따라 동작이 달라진다.
[])void func(String a, [int? b]) {
print('$a, $b');
}
func("hello"); // b -> null
func("hello", 3); // b -> 3
[]안의 파라미터는 전달해도 되고 생략해도 된다.?)로 만드는 것이 일반적이다.void func(String a, [int count=1]) {
print('$a $count');
}
func("Apple"); // Apple 1
func("Apple", 10); // Apple 10
?)이 필요없다.{})void show({String? name, int? age}) {
print('name=$name, age=$age');
}
show(); // name=null, age=null
show(name : "BCKkingkkang"); // name=BCKkingkkang, age=null
{} 내부 파라미터는 이름 기반 전달void show({String name='none', int age=0}) {
print('$name, $age');
}
show(); // none, 0
show(name : 'BCkkingkkang'); // BCKkingkkang, 0
show(age : 27); // none, 27
void createUser({required String name, int age=0}) {}
Nullable Type (Null Safety)
String? name;
name은 null을 가질 수 있다는 의미Java
void print(String a) {}
void print(String a, int b) {}
Dart
void print(String a, [int? b]) {}
void func(int a, [int? b, int? c]) {}
왜 필요한가?
- 가벼운 함수, 단순한 함수에 좋다.
- 파라미터가 많지 않고, 이름을 굳이 붙일 필요가 없을 때
move(10); // x = 10
move(10, 20); // x = 10, y = 20
여기서 x, y는 순서가 명확하기 때문에 이름을 붙일 필요가 없다.
void func({int? a, int? b}) {}
왜 필요한가
- 실수를 줄이기 위해
- 어떤 값이 어떤 역할인지 명확하게 보이기 위해
- 파라미터가 많아질수록 이름 필수
createUser(age : 20, name : 'K');
이런 식이면 실수가 거의 없다. 하지만 위치 파라미터라면
createUser(20, 'K');
age와 name이 헷갈릴 가능성이 있다.
[]{}required와 세트로 사용된다.