flutter create를 통해 프로젝트를 생성하면 아래 사진과 같은 구조로 파일구조가 생성되게 된다.
파일구조를 살펴보자
제일먼저 lib 폴더는 프로그램에서 사용되는 dart파일을 넣어두는 폴더이다.(사진에서도 main.dart가 포함되어있다) 실제 여기서 여러 폴더구조를 만들고 파일을 생성하여 코딩을 하는 폴더이다
다음 android, ios, linux, macos, web폴더인데 각각 디바이스에서 사용할 수 있는 센서등을 사용할때 native언어로 코드를 작성해서 사용하면 된다고 한다
test폴더는 TDD를 위해 lib폴더의 테스트를 생성하기 위한 폴더이다
다음으로 pubspec.yaml은 프로젝트 구성에 대해 선언이 있는곳인데, SDK버전이나, 사용할 라이브러리등을 선언한다 사용방법은 pub.dev에서 선언되있는 dependency를 긁어서 복붙하거나 flutter pub add명령어를 사용해서 라이브러리를 추가하는 방식이다
그 외 파일들은 딱히 프로젝트 사용에 있어 건드릴 필요가 없어 소개는 여기까지 하기로 한다.
// where(([매개변수]) { return [조건식]; }
List<int> numbers = [1,2,3,4,5,6,7];
var result = numbers.where((number) {
return number > 5;
});
print(result); // 6,7 출력
-> reduce()는 collection에 있는 요소들을 하나의 값으로 결합하는 함수
-> 예제는 아래와 같다, 리스트를 순회하면서 앞에 값을 뒤에 값에 계속더하면서 진행된다
-> 특징은 collection의 데이터타입 과 같은 타입으로만 반환할 수 있고 데이터가 비어있을경우 에러가 발생한다(stateError)
// reduce(([매개변수1], [매개변수2]) { return [동작] };
List<int> numbers = [1,2,3,4,5];
var result = numbers.reduce((a, b) {
return a + b
});
print(result); // 15 출력
-> fold()는 reduce에서 초기값이 추가된다. reduce()와는 다르게 초기값이 초기값으로 세팅된다.
-> 특이사항으로는 다른 타입으로도 반환이 가능하고 요소가 없어도 에러가 발생 안한다고 한다.
// fold(초기값, ([매개변수1], [매개변수2]) { return [동작] });
// 앞에 초기값이 추가된다
List<int> numbers = [1,2,3,4,5];
var result = numbers.fold(0, (a, b) {
return a + b
});
print(result); // 15 출력
-> any()는 주어진 collection중 하나라도 조건을 만족시 true를 반환한다(where과 비슷하지만 bool을 반환한다)
-> every()는 collection에서 모든 요소가 맞아야 true가 반환된다
-> takeWhile()은 collection에서 true인 요소가 나오는 동안에는 요소를 반환하고 false로 나오는 요소부터는 무시하는 기능이다
-> skipWhile()은 collection에서 true인 요소가 나오는 동안에는 요소를 스킵하고 false로 나오는 순간부터의 요소를 모두 반환한다
Method Chaining은 위 고차함수를 잘 조합해서 쓰는게 핵심이다
map() + where(),
where() + reduce(),
where() + map() + fold() 등등
Chaining을 통해 collection에서 필요한 여러 작업을 짧은 코드수로 끝낼 수 있다