Eukleides project

from http://d.hatena.ne.jp/u5_h/

Rustを勉強中4

実践的なアプリケーションを書いてみよう! Rustの構造化プログラミング【第二言語としてのRust】
写経物

    • cargo

  いわゆるビルドツール
  rustcがgccなら、cargoはmake
  パッケージ管理も行うのでAnt,Maven,Gradle,cocoa podといった類?

$ cargo new PROJECTNAME --bin
$ cd PROJECTNAME

      • binは実行可能なプロジェクト(binクレート)
      • 依存関係をCargo.tomlに書く
      • Cargoで使えるライブラリはcrates.ioにある. e.g. 正規表現regexクレート
    • rsgrep

  Unixコマンドのgrepを書いてみようとのこと。以下にざっと実装方針をまとめる

      • コマンドライン引数を取る eg. $ grep foo.txt bar
      • ファイル入力ができる
      • 入力結果を出力する(ここまではcat)
      • 入力結果から検索文字列を抽出(正規表現)

解説

      • ライブラリ機能を盛り込むには以下のように書けば良い

use クレート名::型、トレイト;
use クレート名::
e.g. use regex::Regex;

      • 標準ライブラリ以外でライブラリを取り込みたい時はソースに以下を記述

extern crate クレート名;
e.g. extern crate regex;

      • 標準ライブラリ以外でライブラリを取り込みたい時はCargo.tomlへの記述もお忘れなく

[dependencies]
regex = "0.2.1"

let pattern = match env::args().nth(1)
let filename = match env::args().nth(2)

      • 基本はmatch式とSome,None,Ok,Errで判定し、処理をするブロックが立て続け

let reg = match Regex::new(&pattern)
let file =match File::open(&filename)
let line = match line

      • BufReader::new(file)でファイル入力

参照型ではなく実体を入れる

      • for line in input.lines()でファイル内容を1行ごとに読み込む
      • reg.is_match(&line)でパターンマッチング

と言ったような流れ。だいぶリーダブルなコードである。