[Dart] #3 Functions

ZenTechie·2023년 8월 17일
0

Dart

목록 보기
3/4
post-thumbnail

Function 생성하기

타입 이름(매개변수타입 매개변수이름) {
	실행할 코드
}

실행할 코드가 단 1개라면, 함수를 한 줄로 표현할 수 있다.

void helper() => print('Hello World');

Named Parameters

아래의 코드를 살펴보자.

String introduction(String name, int age, String country) {
  return "Hi, My name is ${name} and I'm ${age} and I live in ${country}";
}

void main() {
  introduction('zenTechie', 26, 'nowhere');
}

introduction 함수를 호출할 때 각 인자가 의미하는 바가 무엇인지 바로 알아챌 수 있을까? 아니다.

각 인자가 어떤 의미를 가지는지 알려주기 위해 Named Parameters를 사용할 수 있다.

아래는 Named Parameters를 적용한 코드이다.

String introduction({String name = '', int age = 26, String country = ''}) {
  return "Hi, My name is ${name} and I'm ${age} and I live in ${country}";
}

void main() {
  introduction(
    name: 'zenTechie', 
    age: 26, 
    country: 'nowhere');
}

위와 같이 작성하면, 각 인자가 어떤 의미를 가지는지 알 수 있다.

이때, 매개변수를 보면 default 값을 전달해주는 것을 볼 수 있다. 이는, 만약 사용자가 인자를 빼먹었을 때 null 전달을 막기 위함이다.

만약, default value를 지정하고 싶지 않고 사용자에게 인자를 받아야만 한다면 어떻게 할까?
이때는 required 키워드를 사용한다.

String introduction({
  required String name,
  required int age,
  required String country
}) {
  return "Hi, My name is ${name} and I'm ${age} and I live in ${country}";
}

void main() {
  introduction(name: 'zenTechie', age: 26, country: 'nowhere');
}

즉, required는 반드시 값이 필요함을 의미한다. ➡️ null safety를 적용할 수 있게된다.

+) required는 어디에서 사용할 수 있을까? 로그인 기능!


Optional Positional Parameters

함수를 호출할 때 특정 매개변수가 꼭 필요로 되지 않는다면 이를 어떻게 표시할 수 있을까?

optional positional parameters는 아래의 조건을 만족해야 한다.

  • 매개변수를 대괄호로 감싼다.
  • 매개변수의 타입이 nullable함을 표시한다.
  • default value를 지정한다.
String introduction(String name, int age, [String? country = 'nowhere']) {
  return "Hi, My name is ${name} and I'm ${age} and I live in ${country}";
}

void main() {
  introduction('zenTechie', 26);
}

QQ 연산자

?? 연산자를 사용하면 왼쪽 값이 null인지 확인한다.
만약 null이 아니라면, 왼쪽 값을 return하고 null이면 오른쪽 값을 return한다.

left ?? right

예시 코드는 아래와 같다.

String isStringNull(String? str) {
  return str ?? "String is null";
}

void main() {
  String str1 = "Hello";
  String? str2 = null;
  print(isStringNull(str1)); // Hello
  print(isStringNull(str2)); // String is null
}

??= 연산자도 있는데, 이는 왼쪽 변수의 값이 null이면 오른쪽 값을 왼쪽 변수에 할당하라는 의미이다.

left ??= right
void main() {
  String? name;
  name ??= 'John Doe';
  print(name); // John Doe
}

Typedef

Typedef를 사용하면 사용자가 원하는 alias를 붙일 수 있게 해줌으로써 자료형을 간편하게 작성할 수 있다.

typedef NameList = List<String>;

NameList nameList(NameList names) => names;

// 동일한 코드
List<String> nameList(List<String> names) => names;
profile
데브코스 진행 중.. ~ 2024.03

0개의 댓글