enum, 함수, posional/optional/named parameter, Operation
2023. 3. 13. 23:42ㆍ앱 개발/dart
1. enum
- 열거형(enumerated type)을 정의하는데 사용되는 키워드
- 서로 관련된 상수값을 하나의 타입으로 정의하고, 코드의 가독성을 높이고 실수를 줄이는 등의 장점을 가짐
- 해당 열거형은 고정된 개수의 값을 가지며 이 값들은 각각 고유한 이름을 가짐
enum Status {
approved, // 승인
pending, // 대기
rejected, // 거절
}
void main() {
Status status = Status.pending;
if (status == Status.approved) {
print('승인입니다.');
} else if (status == Status.pending) {
print('대기입니다.');
} else {
print('거절입니다.');
}
}
2. Positional / Opentional / Named Parameter
1. Positional Parameter
- 순서가 중요한 파라미터
// positional parameter - 순서가 중요한 파라미터
addNumbers(int x, int y, int z) {
print('x : $x, y : $y, z : $z');
int sum = x + y + z;
print('sum = $sum');
if (sum % 2 == 0) {
print('짝수입니다.');
} else {
print('홀수입니다.');
}
return sum;
}
2. Optional Parameter
// optional parameter - 있어도 되고 없어도 되는 파라미터
addNumbersOptional(int x, [int y = 10, int z = 10]) {
...
(위와 동일)
...
}
3. Named Parameter
// named parameter - 이름이 있는 파라미터 (순서가 중요하지 않다.)
addNumbersNamed({
required int x,
required int y,
int z = 10,
}) {
...
(위와 동일)
...
}
4. 화살표 함수(arrow function)
// before
addNumbers(int x, {
required int y,
int z = 30
}) {
int sum = x + y + z;
return sum;
}
// after
// before
addNumbers(int x, {
required int y,
int z = 30
}) => x + y + z;
5. 사용
void main() {
int result1 = addNumbers(10, 20, 30); // x = 10, y = 20, z = 30
int result2 = addNumbersOptional(10); // x = 10, y = 10, z = 10
int result3 = addNumbersNamed(x: 10, y: 20); // x = 10, y = 20, z = 10
print('result1 : $result1, result2: $result2, result: $result3'); // 60 / 30 / 40
}
3. Operation
void main() {
Operation operation = add;
print(operation(10, 20)); // 10 + 20 = 30
operation = subtract;
print(operation(30, 20)); // 30 - 20 = 10
print(calculate(5, 6, add)); // 5 + 6 = 11
print(calculate(10, 5, subtract)); // 10 - 5 = 5
}
typedef Operation = int Function(int x, int y);
// 더하기
int add(int x, int y) => x + y;
// 빼기
int subtract(int x, int y) => x - y;
// 계산
int calculate(int x, int y, Operation operation) {
return operation(x, y);
}