Defining a Function
String sayHello(String name) => "Hello $name";
void main() {
print(sayHello("yee"));
}
- 반환 값의 타입을 명시해 함수 선언 (반환 값이 없다면 void)
- JS와 동일하게 return을 생략하는 arrow function 가능
Named Parameters
String sayHello(
{required String name, int age = 23, required String country}) =>
"$name / $age / $country";
void main() {
print(sayHello(name: "yee", age: 23, country: "Korea"));
}
- 함수 선언부에서 매개변수를 중괄호로 묶어 인수에도 이름을 붙이도록 할 수 있음
- null safety를 위해 초기값을 지정하거나 인수를 반드시 넣도록 required를 붙여줘야 함
Optional Positional Parameters
String sayHello(String name, int age, [String? country = "korea"]) =>
"$name / $age / $country";
void main() {
print(sayHello("yee", 23));
}
- named parameter를 사용하지 않고 순서대로 인수를 입력하는 방식이 positional parameter
- positional parameter는 null safety를 위해 기본적으로 모두 required 상태
- 초기값과 함께 대괄호 + 타입 뒤에 ?를 붙여 optional positional parameter로 지정 가능
- 이 방식보다는 named parameter를 주로 사용
QQ Operator
String capitalizeName(String? name) => name?.toUpperCase() ?? "default";
void main() {
print(capitalizeName(null)); // default
String? name = "a";
name ??= "b";
print(name); // a
name = null;
name ??= "b";
print(name); // b
}
- ?? 연산자로 왼쪽 값이 null이라면 기본 값 반환
- ??= 연산자로 변수 값이 null인지 체크해 값 할당
Typedef
typedef ListOfInts = List<int>;
typedef UserInfo = Map<String, String>;
ListOfInts reverseListOfInts(ListOfInts list) {
var reversedList = list.reversed.toList();
return reversedList;
}
String sayHi(UserInfo userInfo) => "Hi ${userInfo["name"]}";
void main() {
print(reverseListOfInts([1, 2, 3, 4, 5]));
print(sayHi({"name": "yee"}));
}
- TS type alias와 비슷하게 타입을 따로 지정해 관리할 수 있음
- Map 타입 등의 형태를 설명하려면 Class를 활용하는 것이 더 유용
본 내용은 노마드코더의 'Dart 시작하기'를 바탕으로 작성되었습니다
'Languages > Dart' 카테고리의 다른 글
[글또] JavaScript 개발자와 Dart 찍먹하기 (0) | 2023.02.11 |
---|---|
[노마드코더] #5 Classes (0) | 2023.01.12 |
[노마드코더] #3 Data Types (0) | 2023.01.09 |
[노마드코더] #2 Variables (0) | 2023.01.08 |
[노마드코더] #1 Introduction (0) | 2023.01.04 |