일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |
Tags
- SampleApp
- OpenAI
- LifeCycle
- network
- uikit
- dart
- iot
- isolate
- designpattern
- WWDC24
- singleton
- dartz
- WiFi
- factory
- builder
- weatherkit
- flutter
- swift
- concurrency
- 문법
- Xcode
- SwiftUI
- AppleDeveloper
- Adapter
- state
- philipshue
- Architecture
- EventLoop
- tuist
- GIT
Archives
- Today
- Total
Jaebi의 Binary는 호남선
Flutter - Dartz 본문
목차
- https://pub.dev/packages/dartz
- 함수형 프로그래밍 기능 제공
Naive Approach:
class Response{
Failure? failure;
Person? person;
bool get hasError => failure!=null;
Response(dynamic response){
if(response is Failure)
this.failure = response;
else
this.person = response;
}
}
Response res = Response(failedReponse);
res.person = validResponse; //now 'res' has both person and failure
- 발생하는 문제: Response 클래스가 Person과 Failure Attribute 둘을 동시에 initialize할수 있음
- 우리는 Person 이나 Failure 둘 중 하나만 가지고 있게 하고싶음
- 에러 체크를 누락 할 수 있음
- 필요 사항:
- 하나의 타입만 가능하게,
- 더욱 강력한 에러 핸들링 시행
Either<L, R> 타입
- 2개의 타입을 동시에 표현
- L(left): 실패 케이스
- R(right): 성공 케이스
- Fold method 사용하여 두개의 값을 처리
Either<int, String> response = Right("Hello, im right");
response.fold(
(integerValue) => print('Integer : $integerValue'),
(stringValue) => print('String : $stringValue')
);
- => “Hello, im right“을 출력 함
Actual Use from the Naive Approach:
class Response {
Either<Failure, Person> person;
Response(dynamic response) {
if (response is Failure)
person = Left(response);
else
person = Right(response);
}
}
- Either를 사용하여 더이상 2개의 인스턴스가 생성되지 않음 (필요사항: a 충족)
void main() async {
Person validResponse = Person('Saravana');
Failure failedReponse = Failure('something went wrong');
Response myResponse = Response(validResponse);
myResponse.person.fold(
(failure) => print('Failed : ${failure.message}'),
(person) => print('Response : ${person.name}'),
);
//prints 'Response : Saravana'
}
- Fold()를 사용하여 Failure와 Person의 대한 경우를 모두 처리해야함, 안하면 컴파일 에러 (필요사항: b 충족)
Reference
'Flutter' 카테고리의 다른 글
Flutter - Internet Connection 확인 (0) | 2024.06.01 |
---|---|
Flutter - Open AI 연동 (0) | 2024.06.01 |
Flutter - 유용한 링크 (0) | 2024.06.01 |
Flutter - 이슈 해결 (0) | 2024.06.01 |
Flutter - Clean Architecture (0) | 2024.06.01 |