어떤 유형의 녹식도

올해 나는 Either datatype에 관한 대량의 글을 썼다.이것은 이상을 호소하지 않는 상황에서 오류를 모델링하는 좋은 방법이다.
지금까지 코트린은 내가 언어에 이 개념을 보여준 곳이다.그러나 나는 최근에 줄곧 녹이 많이 슬었다.나의 첫 번째 반응은 그것의 함수 프로그래밍 기능을 탐색하는 것이다.녹병은 정말 그곳에서 전파된다.
《 녹 》 은 사람을 흥분시키는 생각이 많다.차관 검사기, 생명주기 및 대량의 기타 정보.이 글에서, 나는 이 두 언어 중의 어떤 것을 중점적으로 소개할 것이다. 비록 당신이 언어 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는 이라는 내장된 임의의 데이터 유형을 가지고 있다.그것은 OkErr의 두 가지 가능한 값이 있다.Rust에는 Result이 없습니다. 이것은 오류 처리 조건이 주로 사용 결과라는 것을 의미합니다.좋은 소식!

예외적 상황 사용 결과


결과는 언어에 잘 융합되었다.그것은 두 가지 가능한 유형을 가진 매거진으로 실현되었다.
enum Result<T, E> {
   Ok(T),
   Err(E),
}
우리가 값을 전개하려고 시도할 때, 매거로 매우 편리하며, 잠시 후에 우리는 볼 수 있을 것이다.

결과 반환

OkErr을 구조 함수로 포장할 수 있습니다.
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"),
    }
}
결과 유형에 따라 무엇을 할지 결정하고 한 번의 작업에서 데이터를 추출하는 방법을 주의하십시오.그것은 매우 편리하다.그 밖에 패턴 일치는 상세하기 때문에 우리는 우리가 이미 모든 가능성을 처리했다고 확신한다.나는 패턴이 일치하는 것을 좋아한다.

링크


너는 계산을 한 번만 하는 일이 매우 드물다.그러면 매번 이 값을 열고 변환하고 다시 포장하시겠습니까?그건 너무 짜증나.반대로 mapflatMap(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_stringfrom_str은 모두 실패할 수 있으므로 Result으로 되돌아갑니다.이 경우 계산이 중지되고 오류가 반환됩니다.코드는 안전성에 영향을 주지 않는 상황에서 가독성을 유지한다.
그것은 question mark operator 판자 상자와 잘 결합되었다.만약 당신의 방법에 여러 가지 오류가 있다면, 어쨌든 전파에 도움이 될 것입니다.만약 그들이 std::error::Error을 실현한다면, 즉,

어쨌든 결론


누가 러스트와 같은 시스템 프로그래밍 언어에서 함수 프로그래밍 개념을 사용할 수 없다고 했습니까?나는 최근에 Go 코드를 많이 읽었는데, 이 코드는 그 안에 전해지는 if err != nil개의 끊임없는 목록보다 더 읽을 수 있다.쿠버네트의 물건을 녹으로 쓸 수 있었으면 좋겠어!

좋은 웹페이지 즐겨찾기