fp_Rust - kzono/study_rust GitHub Wiki

å‚ē…§é€éŽę€§

immutable

ä¾‹å¤–ć‚’ä½æć‚ćŖć„ć‚Øćƒ©ćƒ¼å‡¦ē†

chatGPT ćøć®č³Ŗå•ćØēµęžœć€‚

怐Qć€‘ä¾‹å¤–ć‚’ä½æć‚ćŖć„ć‚Øćƒ©ćƒ¼å‡¦ē†ćØćÆļ¼Ÿć€€ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ć‚’ć©ć®ć‚ˆć†ć«ä½æć†ć‹ć€čŖ¬ę˜Žć—ć¦ćć ć•ć„ć€‚

怐Ać€‘ä¾‹å¤–ć‚’ä½æć‚ćŖć„ć‚Øćƒ©ćƒ¼å‡¦ē†ćØćÆć€ćƒ—ćƒ­ć‚°ćƒ©ćƒ ć®å®Ÿč”Œäø­ć«äŗˆęœŸć—ćŖć„ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ćŸå “åˆć€ä¾‹å¤–ć‚’ć‚¹ćƒ­ćƒ¼ć—ć¦ćƒ—ćƒ­ć‚°ćƒ©ćƒ ć®åˆ¶å¾”ć‚’č»¢é€ć™ć‚‹ä»£ć‚ć‚Šć«ć€é–¢ę•°ć‚„ćƒ”ć‚½ćƒƒćƒ‰ćŖć©ć®ęˆ»ć‚Šå€¤ć«ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’å«ć‚ć¦å‡¦ē†ć‚’č”Œć†ę–¹ę³•ć§ć™ć€‚

ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ćÆć€é–¢ę•°ć‚„ćƒ”ć‚½ćƒƒćƒ‰ć®ęˆ»ć‚Šå€¤ć«ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’å«ć‚ć‚‹ćŸć‚ć«ä½æē”Øć•ć‚Œć‚‹ć“ćØćŒć‚ć‚Šć¾ć™ć€‚ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ćÆć€ē•°ćŖć‚‹ēØ®é”žć®å€¤ć‚’ęŒć¤åˆ—ęŒ™åž‹ć®ć‚ˆć†ćŖć‚‚ć®ć§ć‚ć‚Šć€ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’č”Øć™ćŸć‚ć®åž‹ć‚’å®šē¾©ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚

ä¾‹ćˆć°ć€ę¬”ć®ć‚ˆć†ćŖć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’č”Øć™ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ć‚’å®šē¾©ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚

enum Result<T, E> {
    Ok(T),
    Err(E),
}

ć“ć®ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ćÆć€ęˆ»ć‚Šå€¤ćØć—ć¦ę­£åøøēµ‚äŗ†ę™‚ć«ćÆ Ok に値を含め、異常終了時には Err ć«ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’å«ć‚ć¦čæ”ć™ć“ćØćŒć§ćć¾ć™ć€‚

ć“ć®ć‚ˆć†ćŖä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ć‚’ä½æē”Øć™ć‚‹ć“ćØć§ć€ä¾‹å¤–ć‚’ä½æć‚ćŖć„ć‚Øćƒ©ćƒ¼å‡¦ē†ćŒåÆčƒ½ć«ćŖć‚Šć¾ć™ć€‚ćŸć ć—ć€ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ć‚’ä½æē”Øć™ć‚‹å “åˆćÆć€å‘¼ć³å‡ŗć—å“ć§åæ…ćšć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’ćƒć‚§ćƒƒć‚Æć™ć‚‹åæ…č¦ćŒć‚ć‚Šć¾ć™ć€‚

怐Qć€‘ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ćØćƒ‘ć‚æćƒ¼ćƒ³ćƒžćƒƒćƒć‚’ä½æć£ćŸć‚Øćƒ©ćƒ¼å‡¦ē†ć«ć¤ć„ć¦čŖ¬ę˜Žć—ć¦ćć ć•ć„ć€‚

怐Ać€‘ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ćØćƒ‘ć‚æćƒ¼ćƒ³ćƒžćƒƒćƒć‚’ä½æć£ćŸć‚Øćƒ©ćƒ¼å‡¦ē†ćÆć€é–¢ę•°ć‚„ćƒ”ć‚½ćƒƒćƒ‰ć®ęˆ»ć‚Šå€¤ć«ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’å«ć‚ć¦å‡¦ē†ć‚’č”Œć†ę–¹ę³•ć§ć™ć€‚ć“ć®ę–¹ę³•ćÆć€ä¾‹å¤–ć‚’ä½æć‚ćŖć„ć‚Øćƒ©ćƒ¼å‡¦ē†ć®äø€ēØ®ć§ć‚ć‚Šć€å®‰å…Øę€§ć‚„äæ”é ¼ę€§ć®é«˜ć„ćƒ—ćƒ­ć‚°ćƒ©ćƒ ć‚’å®Ÿē¾ć™ć‚‹ćŸć‚ć«ęœ‰ē”Øć§ć™ć€‚

ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ćÆć€ē•°ćŖć‚‹ēØ®é”žć®å€¤ć‚’ęŒć¤åˆ—ęŒ™åž‹ć®ć‚ˆć†ćŖć‚‚ć®ć§ć‚ć‚Šć€ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’č”Øć™ćŸć‚ć®åž‹ć‚’å®šē¾©ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚ćŸćØćˆć°ć€ę¬”ć®ć‚ˆć†ćŖä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ć‚’å®šē¾©ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚

enum Result<T, E> {
    Ok(T),
    Err(E),
}

ć“ć®ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹ćÆć€ęˆ»ć‚Šå€¤ćØć—ć¦ę­£åøøēµ‚äŗ†ę™‚ć«ćÆ Ok に値を含め、異常終了時には Err ć«ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’å«ć‚ć¦čæ”ć™ć“ćØćŒć§ćć¾ć™ć€‚

ćƒ‘ć‚æćƒ¼ćƒ³ćƒžćƒƒćƒć‚’ä½æē”Øć™ć‚‹ć“ćØć§ć€é–¢ę•°ć‚„ćƒ”ć‚½ćƒƒćƒ‰ć®ęˆ»ć‚Šå€¤ć«å«ć¾ć‚Œć‚‹ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’ē°”å˜ć«å‡¦ē†ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚ćŸćØćˆć°ć€ę¬”ć®ć‚ˆć†ćŖé–¢ę•°ć‚’č€ƒćˆć¦ćæć¾ć—ć‚‡ć†ć€‚

fn divide(a: i32, b: i32) -> Result<i32, &'static str> {
    if b == 0 {
        return Err("division by zero");
    }
    Ok(a / b)
}

この関数は、引数 b が 0 の堓合には Err ć«ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’å«ć‚ć¦ē•°åøøēµ‚äŗ†ć—ć€ćć‚Œä»„å¤–ć®å “åˆć«ćÆ Ok ć«čØˆē®—ēµęžœć‚’å«ć‚ć¦ę­£åøøēµ‚äŗ†ć—ć¾ć™ć€‚ć“ć®é–¢ę•°ć‚’å‘¼ć³å‡ŗć™å “åˆć«ćÆć€ćƒ‘ć‚æćƒ¼ćƒ³ćƒžćƒƒćƒć‚’ä½æē”Øć—ć¦ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’å‡¦ē†ć™ć‚‹ć“ćØćŒć§ćć¾ć™ć€‚

let result = divide(10, 0);
match result {
    Ok(value) => println!("result: {}", value),
    Err(error) => println!("error: {}", error),
}

この例では、関数 divide ć‚’å‘¼ć³å‡ŗć—ć¦ć‚Øćƒ©ćƒ¼ęƒ…å ±ć‚’å«ć‚€ęˆ»ć‚Šå€¤ć‚’å–å¾—ć—ć€ćƒ‘ć‚æćƒ¼ćƒ³ćƒžćƒƒćƒć‚’ä½æē”Øć—ć¦ę­£åøøēµ‚äŗ†ę™‚ćØē•°åøøēµ‚äŗ†ę™‚ć®å‡¦ē†ć‚’åˆ†å²ć—ć¦ć„ć¾ć™ć€‚

ä»£ę•°ēš„ćƒ‡ćƒ¼ć‚æåž‹( Algebraic data type)

map, reduce, filter

ē„”åé–¢ę•°ļ¼ˆćƒ©ćƒ ćƒ€ļ¼‰

é«˜éšŽé–¢ę•°

  • é–¢ę•°ć®å¼•ę•°ćØć—ć¦é–¢ę•°ć‚’å–ć‚‹ć€‚
  • é–¢ę•°ć®ęˆ»ć‚Šå€¤ćØć—ć¦é–¢ę•°ć‚’čæ”ć™ć€‚

é–¢ę•°åˆęˆ

ć‚«ćƒŖćƒ¼åŒ–

éƒØåˆ†é©ē”Ø

å†åø°

ćƒ‘ć‚æćƒ¼ćƒ³ćƒžćƒƒćƒ

åž‹ęŽØč«–

āš ļø **GitHub.com Fallback** āš ļø