Flutter In Action을 읽으며 Dart의 기초부터 실습하는 중이다.
/// 화살표 함수 사용하기
void main() {
// 기본 함수
String makeGreeting(String name) {
return '안녕, $name';
}
print(makeGreeting('Park'));
// 고차 함수: => 는 {return 표현식}과 같다. 화살표 함수에서는 return 키워드 불필요.
String makeGreetingArrow(String name) => '안녕, $name';
print(makeGreetingArrow('Park'));
}
오래된 Java 문법에 익숙해져 있던 터라, Dart가 많이 낯설다.
/// 이름 지정 파라미터
void main(List<String> args) {
// 이름 지정 파라미터(required)를 사용하면 반드시 파라미터 이름을 지정해야 한다.
String reqParam({required String param}) {
return param;
}
reqParam(param: '');
}
요즘 에디터는 많이 똑똑해져서, 전용 IDE가 아니더라도 강력하게 자동 완성/코드 추천해준다.
Dart를 접하고 ?.연산자를 보고 참 편하다고 생각했다. null 인지 연산자로, null이 아니면 할당하고 null이면 오류를 발생시키지 않고 그대로 null을 할당한다.
/// 선택형 위치 지정 파라미터
void main(List<String> args) {
// 아래는 안 되는 모양. 아래와 같은 에러가 발생.
// The parameter 'z' can't have a value of 'null' because of its type, but the implicit default value is 'null'.
// Try adding either an explicit non-'null' default value or the 'required' modifier.dartmissing_default_value_for_parameter
// int addSomeNums(int x, int y, [int z]) {
// int sum = x + y;
// if (z != null) {
// sum += z;
// }
// return sum;
// }
// 이건 된다!!!
int addSomeNums2(int x, int y, [int? z]) {
int sum = x + y;
if (z != null) {
sum += z;
}
return sum;
}
// 세 번째 파라미터는 선택형이므로 인수를 전달하지 않아도 된다.
print(addSomeNums2(5, 4));
print(addSomeNums2(5, 4, 3));
}
?? 연산자도 편리하다. DB에서 가져온 데이터에 null이 있을 때 자동으로 0등으로 대치할 수 있다.
void main(List<String> args) {
var age = null;
int userAge = age ?? 0;
print(userAge);
}
??= 연산자는 반대의 작업을 한다. 객체가 null이면 백업값을 할당하고 아니면 객체를 그대로 반환.
void main(List<String> args) {
var x = 5;
x ??= 3;
print(x);
}
고차함수 테스트
void main(List<String> args) {
// method 1(anonymous function무명 함수 사용)
List<int> nums = [1, 2, 3];
nums.forEach((element) {
print(element + 1);
});
// method 2
void addOneAndPrint(int num) {
print(num + 1);
}
nums.forEach((element) {
addOneAndPrint(element);
});
// 이렇게 호출해도 된다.
nums.forEach(addOneAndPrint);
}
고급 함수 개념.
/// 고급 함수 개념
void main(List<String> args) {
// 옛날 방식
List<int> nums = [1, 2, 3, 4, 5];
int i = 0;
int sum = 0;
while (i < nums.length) {
sum += nums[i];
i += 1;
}
print(sum);
// 새로운 방식
int sum2 = 0;
List<int> nums2 = [1, 2, 3, 4, 5];
sum2 = nums.reduce((total, element) => total + element);
print(sum2);
}
List.map과 forEach
/// List.map 과 forEach 사용하기
void main(List<String> args) {
List<int> smallNums = [1, 2, 3];
Iterable<int> biggerNums = smallNums.map((e) => e * 2);
print(smallNums);
print(biggerNums);
}
내일은 Flutter 편으로 들어가자.