Stream에서 IO Exception을 던지고 싶으세요?그렇다면
3062 단어 FunctionalProgrammingJava
Vavr의 Try 또는 Either를 사용합니다.
이런 일 없어요?
흐름에서 값을 처리하고 중간 λ 표현식에서 이상 검사를 처리해야 합니다
주: BookReader
외부에 있기 때문에 바꾸기 어렵다고 생각하세요
일반적인 처리
런타임 오류를 RuntimeError로 변경한 경우
방법 내와private 범위 내에서 오류를 잘 처리하는 것은 좋지만,public의 세계에서 예외를 제외하는 것은 이미 매우 고생스럽다.
또 지금은 그런 일이 없어도 쉽게 그런 일을 할 수 있다는 점이 불안하다.
억지로 Stream을 안 쓰면 되잖아요.
맞습니다.나는 런타임 에러가 던지는 것보다 낫다고 생각한다.
로컬 변수는 0개에서 2개로 증가했고 인코딩량은 2배를 넘었고 플러그인은 2개 단계를 심화시켰다. 팀 전체가 만족한다면 별론이다.
본론
예를 들어 Golang은 메타그룹 (여러 개의 실례 그룹) 을 사용하여 이상 시스템의 결과를 호출자에게 전파하지만 Java는 언어 규범 단계에서 메타그룹을 지원하지 않습니다.
클래스를 만들면 대체할 수 있지만 함수형 프로그래밍에 대해서는 Scala와 Haskell을 참고하면 더 좋은 생각이 있을 것입니다.
Vavr는 Java에서 함수형 프로그래밍을 쉽게 할 수 있는 라이브러리입니다.
Either
Right
또는 Left
모든 값의 클래스입니다.보통 정상계Right
, 이상계Left
.다자렛Optional
의 강화판의 인상이 좋았으면 좋겠어요.Optional
에서는 null
인지 여부의 정보만 흐름의 하류로 흐르지만, Either
값을 흐름의 하류로 흐르게 할 수 있습니다. 예를 들어 예외입니다.
Try
이름은try-catch를 함수형으로 쓰는 클래스입니다.
이상을 검사할 수 있는 λ 표현식을 받아들여 이상이 발생했을 때의 처리를 λ 형식으로 표시할 수 있다.
이것도 Either
역시 정상값, 이상값 중 하나Optional
를 포함하고 있다고 생각하십시오.
분위기만 보면 Try가 선택이라고 생각하지만 Try에서 이상계 처리된 입력이 Throwable
로 바뀌어 베팅이 발생하기 쉬우므로 Either
로 쓰면 모호하지 않은 경우도 있다.
써봐요.
예를 들면 이런 느낌일 것 같아.
Either:
Try:
이 점을 유의하십시오.만약 정확하게 처리한다면 다음 방송이 필요하다.
겸사겸사 말씀드리다
Vavr를 처음 사용하면 자바를 볼 수 없어서 유지하기가 어려워요. 왜 Scala와 Haskell을 사용하지 않나요?
기타 솔루션
자바를 무리하지 않고 계속 사용해도 되나요?그렇게 지도 모른다, 아마, 아마...
잡감
OSS 이야기인데...
https://github.com/vavr-io/vavr ↩
Reference
이 문제에 관하여(Stream에서 IO Exception을 던지고 싶으세요?그렇다면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dracuttimeout/items/f05489d0486d6695463e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Stream에서 IO Exception을 던지고 싶으세요?그렇다면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dracuttimeout/items/f05489d0486d6695463e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)