1. Optional Positional Parameters
String sayHello(
String name,
int age,
[String? country = 'korea']
) =>
'Hello $name, you are $age years old from $country';
void main() {
var result = sayHello('taek', 20);
print(result);
}
일부 parameter에 null을 받으면 default value를 설정할 수 있게 한다.
형식은 메서드의 매개변수에 대괄호[]를 하고 타입 뒤에 ?를 붙여서 null이 가능하게 만든 다음, 뒤에 default value를 설정해주는 것이다.
2. QQ Operator(Question Question Operator)
'??' or '?='
Flutter에서 자주 사용된다.
예를 들어 내 이름을 대문자로 반환하는 메서드를 만들어보겠다.
String capitalizeName(String name) => name.toUpperCase();
void main() {
capitalizeName('taek');
}
여기서 name에 null을 입력하면 좋겠다고 해서 아래와 같이 작성해주면, toUpperCase()가 오류가 뜬다. null일지도 모르는 값에 toUpperCase()를 호출할 수 없기 때문이다.
따라서 이것을 해결하는 방법은
첫번째, if 조건문으로 null일 때와 아닐 때 구분하여 return한다.
그런데 여기서 더 짧게 만들 수 있다. -> qq operator
다음으로 넘어가기 전에 하나 더 알아야 할 것.
qq equals || qq assignment operator
null 일 수 있는 name variable을 만들고 다음과 같이 적어주는데,
??= 의 의미는 '만약 name이 null이라면 다음의 값을 할당해라' 이다.
위처럼 두번 작성하면 경고창이 뜨면서 실행이 되는데,
name ??= 'anon';
위에서 'taek'을 할당해 주기 때문에, 'null이 될 수 없어서 name ??= 'anon'; 은 절대 실행될 수 없다' 라고 알려주는 것이다.
3. Typedef
자료형이 헷갈릴 때 도움이 될 alias을 만드는 방법이다.
typedef는 자료형에 alias를 붙일 수 있게 해준다.
List<int> reversListOfNumbers(List<int> list) {
var reversed = list.reversed;
return reversed.toList();
}
void main() {
print(reversListOfNumbers([1, 2, 3]));
}
reversListOfNumbers() 메서드를 보면 매개변수로 받는 자료형도 List<int>이고 반환형도 List<int>로 동일하다. 위 소스코드에서 이걸 typedef로 정의해서 바꾼다면,
이렇게 수정이 가능하다.
typedef는 우리가 원하는 만큼 생성할 수 있다.
Map도 typedef로 정의해서 예시를 작성해보겠다.
이렇게 작성할 수 있는데, Map처럼 구조화된 data의 형태를 지정하고 싶다면, class를 배워야한다.
class에 대한 내용은 다음 포스팅에서 보겠다.
'앱 개발 > Dart' 카테고리의 다른 글
Dart Classes(클래스) - Named Constructor Parameters, Named Constructors (0) | 2024.05.16 |
---|---|
Dart Classes(클래스) - Class, Constructors (0) | 2024.05.14 |
Dart Functions(함수) - Defining a Function, Named Parameters (0) | 2024.05.08 |
Dart Data Types(데이터 타입) (0) | 2024.05.08 |
Dart Variables(변수) (0) | 2024.05.07 |