어떤 유형의 녹식도
9126 단어 exceptionsrusteitherfunctional
지금까지 코트린은 내가 언어에 이 개념을 보여준 곳이다.그러나 나는 최근에 줄곧 녹이 많이 슬었다.나의 첫 번째 반응은 그것의 함수 프로그래밍 기능을 탐색하는 것이다.녹병은 정말 그곳에서 전파된다.
《 녹 》 은 사람을 흥분시키는 생각이 많다.차관 검사기, 생명주기 및 대량의 기타 정보.이 글에서, 나는 이 두 언어 중의 어떤 것을 중점적으로 소개할 것이다. 비록 당신이 언어 Result의 실제 명칭에 대해 더 익숙할 수 있지만.
녹을 사용한 원인
녹병이 날로 심각해지는데, 수량은 popular language이다.defined as:입니다.
A language empowering everyone to build reliable and efficient software.
간단한 인터페이스가 있는 도구
예를 들어 녹은 Kotlin이나 Ruby의 대체품입니까?나는 그렇게 생각하지 않는다!Rust와 같은 시스템 프로그래밍 언어는 응용 프로그램을 작성하는 데 사용할 도구가 아닐 수도 있습니다. 특히 엄격한 메모리 관리가 필요하지 않은 상황에서는 그렇습니다.
그러나 Rust가 CLI 도구라는 매우 적합한 용례를 발견했습니다.나는 명령줄에서 사용하는 도구를 가리킨다. 예를 들어
cat
.일반적으로 셸 스크립트로 시작하기 때문에 읽기와 유지보수가 너무 어려워집니다.Rust의 경우, Docker 컨테이너에서나 다른 어느 곳에서나 배포하기 쉬운 고급 언어를 사용하여 바이너리 파일로 포장할 수 있습니다.Go는 이 분야에서 성공을 거두었다.이 두 가지 일에 참여한 후에 나는 녹균이 더욱 사용하기 쉽다는 것을 발견했다.
환경 영사 이 두 가지 상황은 사실상 모두 녹슬었다고 불린다
만일 당신이 이전의 게시물을 놓쳤다면, 우리는 그 중 하나를 신속하게 보여 드리겠습니다.둘 다 하나의 실체로 그 값은 두 가지 다른 유형으로 왼쪽과 오른쪽이라고 할 수 있다.그것은 실패할 수 있는 계산을 나타낸다.따라서
Right
측은 성공의 결과이고 Left
측은 오류의 결과이다.사실이 증명하듯이rust는 이라는 내장된 임의의 데이터 유형을 가지고 있다.그것은
Ok
과 Err
의 두 가지 가능한 값이 있다.Rust에는 Result이 없습니다. 이것은 오류 처리 조건이 주로 사용 결과라는 것을 의미합니다.좋은 소식!예외적 상황 사용 결과
결과는 언어에 잘 융합되었다.그것은 두 가지 가능한 유형을 가진 매거진으로 실현되었다.
enum Result<T, E> {
Ok(T),
Err(E),
}
우리가 값을 전개하려고 시도할 때, 매거로 매우 편리하며, 잠시 후에 우리는 볼 수 있을 것이다.결과 반환
Ok
과 Err
을 구조 함수로 포장할 수 있습니다.let success: Result<i32, &str> = Ok(42);
let failure: Result<i32, &str> = Err("failed :(");
확장 값
많은 녹슨 조작들이 결과를 되돌려 줄 것이다.당신은 어떻게 내재적인 가치를 얻습니까?당신은 어떻게 수술 결과에 근거하여 무엇을 하기로 결정합니까?이 두 문제의 답안은 모두 패턴이 일치하는 데 있다.
fn read_state(file: Result<i32,&str>) {
match file {
Ok(answer) => println!("Extracted from file {}", answer),
Err() => println!("Bitter disappointment"),
}
}
결과 유형에 따라 무엇을 할지 결정하고 한 번의 작업에서 데이터를 추출하는 방법을 주의하십시오.그것은 매우 편리하다.그 밖에 패턴 일치는 상세하기 때문에 우리는 우리가 이미 모든 가능성을 처리했다고 확신한다.나는 패턴이 일치하는 것을 좋아한다.링크
너는 계산을 한 번만 하는 일이 매우 드물다.그러면 매번 이 값을 열고 변환하고 다시 포장하시겠습니까?그건 너무 짜증나.반대로
map
과 flatMap
(Rust에서 and_then
이라고 함수) 응용 함수를 사용하여 새로운 결과를 얻도록 하겠습니다.만약 네가 기억한다면, 이 방법들은 편견이 있기 때문에, 그것들은 영원히 잘못된 사례에 적용되지 않을 것이다.pub fn from_file(file_name: &str) -> anyhow::Result<Self> {
fs::read_to_string(file_name)
.and_then(|content| serde_json::from_str(&content))
}
평면 문법
Result/earth 모델링 오류를 사용하는 단점 중 하나는 그 안에 포함된 데이터를 조작할 때 코드가 매우 끼워질 수 있다는 것입니다.비록 이 없지는 않지만, 하스켈에서 온 do notation은 이 문제를 해결하려고 시도했다.
다행히도 러스트에게도 해결 방안이 있다!detractors.이것을 사용하면 Ok 결과에서 데이터를 추출하거나 효과가 없으면 Err로 되돌아갈 수 있습니다.보아하니 이렇다.
pub fn from_file(file_name: &str) -> anyhow::Result<Self> {
let content = fs::read_to_string(file_name)?;
let result = serde_json::from_str(&content)?;
Ok(result)
}
read_to_string
과 from_str
은 모두 실패할 수 있으므로 Result
으로 되돌아갑니다.이 경우 계산이 중지되고 오류가 반환됩니다.코드는 안전성에 영향을 주지 않는 상황에서 가독성을 유지한다.그것은 question mark operator 판자 상자와 잘 결합되었다.만약 당신의 방법에 여러 가지 오류가 있다면, 어쨌든 전파에 도움이 될 것입니다.만약 그들이
std::error::Error
을 실현한다면, 즉,어쨌든 결론
누가 러스트와 같은 시스템 프로그래밍 언어에서 함수 프로그래밍 개념을 사용할 수 없다고 했습니까?나는 최근에 Go 코드를 많이 읽었는데, 이 코드는 그 안에 전해지는
if err != nil
개의 끊임없는 목록보다 더 읽을 수 있다.쿠버네트의 물건을 녹으로 쓸 수 있었으면 좋겠어!
Reference
이 문제에 관하여(어떤 유형의 녹식도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sirech/either-types-for-rust-46k4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)