Flutter In Action을 읽으며 Dart의 기초부터 실습하는 중이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /// 화살표 함수 사용하기 void main() { // 기본 함수 String makeGreeting(String name) { return '안녕, $name' ; } print(makeGreeting( 'Park' )); // 고차 함수: => 는 {return 표현식}과 같다. 화살표 함수에서는 return 키워드 불필요. String makeGreetingArrow(String name) => '안녕, $name' ; print(makeGreetingArrow( 'Park' )); } |
오래된 Java 문법에 익숙해져 있던 터라, Dart가 많이 낯설다.
1 2 3 4 5 6 7 8 9 | /// 이름 지정 파라미터 void main(List<String> args) { // 이름 지정 파라미터(required)를 사용하면 반드시 파라미터 이름을 지정해야 한다. String reqParam({required String param}) { return param; } reqParam(param: '' ); } |
요즘 에디터는 많이 똑똑해져서, 전용 IDE가 아니더라도 강력하게 자동 완성/코드 추천해준다.

Dart를 접하고 ?.연산자를 보고 참 편하다고 생각했다. null 인지 연산자로, null이 아니면 할당하고 null이면 오류를 발생시키지 않고 그대로 null을 할당한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /// 선택형 위치 지정 파라미터 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등으로 대치할 수 있다.
1 2 3 4 5 | void main(List<String> args) { var age = null ; int userAge = age ?? 0 ; print(userAge); } |
??= 연산자는 반대의 작업을 한다. 객체가 null이면 백업값을 할당하고 아니면 객체를 그대로 반환.
1 2 3 4 5 | void main(List<String> args) { var x = 5 ; x ??= 3 ; print(x); } |
고차함수 테스트
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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); } |
고급 함수 개념.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /// 고급 함수 개념 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
1 2 3 4 5 6 7 8 | /// 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 편으로 들어가자.