Dart에 발 들이기 3

바람찬허파·2023년 8월 11일
0

사람책 개발 공부

목록 보기
3/6

노마드 코더의 'Dart 시작하기' 강의 #3 FUNCTIONS을 기반으로 정리하였습니다.

fat arrow syntax

String sayHello(String name) {
  return "Hello my name is $name";
}

void main() {
  print(sayHello('Jisoo'));
}
  • fat arrow syntax를 사용하면 '=>' 뒤에 나온 내용이 바로 리턴 됨
  • 곧바로 return 하는 함수를 가질 때 사용할 수 있음
  • 한 줄 짜리 리턴하는 함수일 때
String sayHello(String name) => "Hello my name is $name";

Named Parameters

Positional Parameters

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를 사용

Named Parameters

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을 받아야 하는 상황이라면?

  1. required modifier
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 없이 함수를 호출 할 수 있기 때문에 > 아예 해당 형태의 파라미터가 허용되지 않는건가?

0개의 댓글