目次

Rustの勉強[CLI作成編 その3]

(更新: )ぎじゅつ

はじめに

#

NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版
を読んでいる

  • 職場でブログのお披露目会してRustを学んだ
  • 実は私のポジションでは触らないのだが、普通に面白くて勉強している

今日読む場所

#

NO IMAGEファイルを読み込む - The Rust Programming Language 日本語版

お勉強

#

メモ

#
  • 粛々とgrepを作っていく

  • 引数は受け取れた

  • use std::io::prelude::*;の書き方してしまってよいのだろうか

  • 全部importされてしまうが

use std::env;
use std::fs::File;
use std::io::prelude::*;

fn main() {
    // --snip--
    println!("In file {}", filename);

    // ファイルが見つかりませんでした
    let mut f = File::open(filename).expect("file not found");

    let mut contents = String::new();
    f.read_to_string(&mut contents)
        // ファイルの読み込み中に問題がありました
        .expect("something went wrong reading the file");

    // テキストは\n{}です
    println!("With text:\n{}", contents);
}
  • 写経したけど動かなくね、これ
  • おいいいいいいいいいいいいいいいいい
  • // snipが記述あるかもしれないけど表示しないよってことらしい
  • しるか!!
use std::env;
use std::fs::File;
use std::io::prelude::*;

fn main() {
    let args: Vec<String> = env::args().collect();

    let query = &args[1];
    let filename = &args[2];

    // {}を探しています
    println!("Searching for {}", query);

    println!("In file {}", filename);

    let mut f = File::open(filename).expect("file not found");

    let mut contents = String::new();
    let read_to_string = f
        .read_to_string(&mut contents)
        // ファイルの読込中に問題がありました
        .expect("something went wrong reading the file");

    // テキストは\n{}です
    println!("With text:\n{}", contents);
}
  • とりあえずこうなった
$ cargo run the poem.txt
   Compiling minigrep v0.1.0 (file:///projects/minigrep)
    Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
     Running `target/debug/minigrep the poem.txt`
Searching for the
In file poem.txt
With text:
I'm nobody! Who are you?
Are you nobody, too?
Then there's a pair of us - don't tell!
They'd banish us, you know.

How dreary to be somebody!
How public, like a frog
To tell your name the livelong day
To an admiring bog!

こうでるらしいが

 cargo run the poem.txt
   Compiling minigrep v0.1.0 (/Users/ryu.aizawa/Repo/minigrep)
warning: unused variable: `read_to_string`
  --> src/main.rs:19:9
   |
19 |     let read_to_string = f
   |         ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_read_to_string`
   |
   = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default

warning: `minigrep` (bin "minigrep") generated 1 warning (run `cargo fix --bin "minigrep" -p minigrep` to apply 1 suggestion)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.49s
     Running `target/debug/minigrep the poem.txt`
Searching for the
In file poem.txt
With text:
I'm nobody! Who are you?
Are you nobody, too?
Then there's a pair of us - don't tell!
They'd banish us, you know.

How dreary to be somebody!
How public, like a frog
To tell your name the livelong day
To an admiring bog!

私は誰でもない!あなたは誰?
あなたも誰でもないの?
なら、私たちは組だね、何も言わないで!
あの人たちは、私たちを追放するでしょう。わかりますよね?

誰かでいるなんて侘しいじゃない!
カエルみたいで公すぎるじゃない。
自分の名を長い1日に告げるのなんて。
感服するような沼地にね!
  • warningがでるようになった
  • unused variableってそのまんまだな
  • たしかに使っていないかも

あれ、なんかまちがっていたな

use std::env;
use std::fs::File;
use std::io::prelude::*;

fn main() {
    let args: Vec<String> = env::args().collect();

    let query = &args[1];
    let filename = &args[2];

    // {}を探しています
    println!("Searching for {}", query);

    println!("In file {}", filename);

    let mut f = File::open(filename).expect("file not found");

    let mut contents = String::new();
    f.read_to_string(&mut contents)
        // ファイルの読込中に問題がありました
        .expect("something went wrong reading the file");

    // テキストは\n{}です
    println!("With text:\n{}", contents);
}
  • こうだ
  • 警告も消えた

まとめ

#
  • 記述間違えていたが、なんか辻褄が合わなくて違うね?と気がつけた
  • expectを使っていて、neovim内で戻り値を見るとちゃんとresultになっていて感動した
  • 読めるようにもなってきている

NO IMAGEリファクタリングしてモジュール性とエラー処理を向上させる - The Rust Programming Language 日本語版