@ledsun blog

無味の味は佳境に入らざればすなわち知れず

rustを味見する 3

引き続きサンプルプログラムを写経して実行します。

fn main() {
    let penguin_data = "\
    common name, length (cm)
    Little Penguin, 36
    Yellow-eyed Penguin, 65
    Fiordland Penguin, 76
    Invalid, data
    ";

    let records = penguin_data.lines();

    for (i, record) in records.enumerate() {
        if i == 0 || record.trim().len() == 0 {
            continue;
        }

        let fields: Vec<_> = record.split(',').map(|field| field.trim()).collect();
        if cfg!(debug_assertions) {
            eprintln!("debug: {:?} -> {:?}", record, fields);
        }

        let name = fields[0];
        if let Ok(length) = field[1].parse::<f32>() {
            println!("{}, {} cm", name, length);
        }
    }
}

cargo runを実行するとエラーが起きます。

f:id:ledsun:20220102173205p:plain
rustのコンパイラtypoを指摘されたところ

rust用の拡張機能を入れるとVSCode上でも指摘してくれます。

f:id:ledsun:20220102173337p:plain
VSCodetypoを指摘されたところ

f:id:ledsun:20220102173550p:plain
typoを直して正しく実行されたところ

今のところrustを捉える僕の心的イメージは「ベターJavaScript」です。 型アノテーションがつけられて、ES3の悪いパーツがなくてES5以降のよいパーツが揃っている印象を受けました。 記法もC言語ベースで共通点が多いです。

let Ok(length)はよくわからない謎の機能です。 説明によると「パースに成功したときにlengthに値を入れる」そうです。 例外でもなく、goのように慣習(?)でもなく、独自のエラー処理の仕組みがありそうです。 利点があるのかどうかはまだわかりません。

噂に聞く「コンパイルを通すのがつらい」体験はできていません。 現在の「ベターJavaScript」という心的イメージは間違っていると予想できます。

学習の初期段階の心的イメージは間違っていてよいです。 仮の心的イメージを定義し、今後の学習で矛盾点がでてきたら定義を更新します。 最近は、心的イメージの更新を高頻度に行うことが、新しい技術を習得する秘訣だと思っています。 また、心的イメージには究極の形態はなく、どんなに技術を深く理解しても、学びが増えれば更新されるものだと考えています。 不確実性コーンみたいな物ですが、技術の習得には納期が存在しないので、無限に更新されていくイメージです。