노마드 코더의 'Dart 시작하기' 강의 #3 FUNCTIONS을 기반으로 정리하였습니다.
String sayHello(String name) {
return "Hello my name is $name";
}
void main() {
print(sayHello('Jisoo'));
}
String sayHello(String name) => "Hello my name is $name";
String sayHello(String name, int age, String country) =>
"Hello my name is $name, age $age, from $country";
void main() {
print(sayHello('Jisoo', 20, 'Korea'));
}
// Hello my name is Jisoo, age 20, from Korea
코드에서 sayHello()를 호출 시 -> Parameter의 순서를 맞추어야 하는 불편함 => Named Parameter를 사용
String sayHello({
String name,
int age,
String country,
}) =>
"Hello my name is $name, age $age, from $country";
void main() {
print(sayHello(name: 'Jisoo', age: 20, country: 'Korea'));
}
문제가 발생함 > 만약 sayHello(age: 12) 이렇게 호출한다면 name과 country는 null이 될 수 있음
해결 방법
1. default value의 사용
String sayHello({
String name = 'Jisoo',
int age = 12,
String country = 'Wakanda',
}) =>
"Hello my name is $name, age $age, from $country";
하지만, 반드시 input을 받아야 하는 상황이라면?
String sayHello({
required name,
required int age,
required country,
}) =>
"Hello my name is $name, age $age, from $country";
변수 앞에 required를 지정 > sayHello라는 함수가 호출 될 때 name, age, country 변수를 반드시 가져야 함을 명시 함.
만약 필요한 값이 지정되지 않았다면 -> 컴파일 하지 않음
궁금증
required는 왜 필요한 것인가?
//상황 1 required modifier 사용하지 않음.
String sayHello({
String name,
int age,
String country,
}) =>
"Hello my name is $name, age $age, from $country";
void main() {
print(sayHello(name: 'Jisoo', age: 20, country: 'Korea'));
}
이 상황에서는 올바른 파라미터를 입력해도 > null 값이 있을 까봐 에러가 발생함. 만약 사용자가 입력하지 않으면 null이 되어버리니까
//상황2 required modifier 사용 & data를 전부 입력하지 않음
String sayHello({
required String name,
required int age,
required String country,
}) =>
"Hello my name is $name, age $age, from $country";
void main() {
print(sayHello(age: 20, country: 'Korea'));
}
이 코드에서는 필요한 파라미터를 모두 입력하지 않았기에 > 에러가 발생함. 사용자가 제대로 입력한다면 컴파일 ok , 필요한 데이터를 입력하지 않으면 에러.
아! Named Parameters를 사용하면 모든 파라미터를 입력했는지 확인해야 함 > require를 통해 입력이 반드시 필요한 파라미터의 데이터를 받을 수 있음 > require이 없다면 사용자가 모든 값을 입력하였을 때에도, 입력하지 않았을 때에도 오류가 발생함.
근데 왜 required modifier을 사용하지 않아도, 모든 파라미터의 데이터를 입력하였을 때 오류가 발생하지?
개발자가 필수적인 parameter 없이 함수를 호출 할 수 있기 때문에 > 아예 해당 형태의 파라미터가 허용되지 않는건가?