728x90
https://github.com/archun39/Rust/tree/main/chapter12/minigrep
[Rust/chapter12/minigrep at main · archun39/Rust
Contribute to archun39/Rust development by creating an account on GitHub.
github.com](https://github.com/archun39/Rust/tree/main/chapter12/minigrep)
Chapter 12 - I/O project
- .collect() : 반복자가 생성한 모든 값을 포함하는 벡터로 변환. → 주석 필수
- 프로젝트 이름은 벡터의 첫 번째값, args[0]을 차지한다. 따라서 [1]부터 사용하자.
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
let query = &args[1];
let file_path = &args[2];
println!("Searching for {query}");
println!("In file {file_path}");
}
파일 읽기
let contents = fs::read_to_string(file_path)
.expect("Should have been able to read the file");
바이너리 프로젝트 파일 분리
- 별도의 관심사를 기준으로 분할한다.
- 프로그램을 main.rs파일과 lib.rs파일로 분할하고 프로그램 로직을 lib.rs로 옮긴다.
- 명령줄 구문 분석 로직이 작다면 main.rs에 그대로 둔다.
- 명령줄 구문 분석 로직이 복잡해지기 시작하면 main.rs에서 추출하여 lib.rs로 옮긴다.
에러 메시지 넣기
- panic!을 활용한 에러 메시지를 만들 수 있다. 그러나 사용자에게 제공하고 싶지 않은 외부 정보도 포함될 수 있다.
- Result 사용
- 값을 반환하는지 확인하고 반환하는 경우 호출하기 위해
if let
을 주로 사용.
파일 나누기
- main과 lib을 나눌 때 main함수에 없는 모든 코드를 lib에 옮겼다.
- 이후 lib.rs로 옮긴 코드를 main.rs에 있는 바이너리 크레이트의 범위로 가져와야한다.
use minigrep::Config
TDD (테스트 주도 개발)
- 실패하는 테스트를 작성하고, 예상한 이유로 실패하는지 확인하기 위해 테스트를 실행한다.
- 새로운 테스트를 통과할 수 있을 만큼의 코드만 작성하거나 수정한다.
- 방금 추가하거나 변경한 코드를 리팩토링하고 테스트가 계속 통과되는지 확인한다.
- 1단계 반복
환경 변수 작업
impl Config {
pub fn build(args: &[String]) -> Result<Config, &'static str> {
if args.len() < 3 {
return Err("not enough arguments");
}
let query = args[1].clone();
let file_path = args[2].clone();
let ignore_case = env::var("IGNORE_CASE").is_ok(); //환경 변수 세팅
Ok(Config {
query,
file_path,
ignore_case,
})
}
}
실행
$ IGNORE_CASE=1 cargo run -- to poem.txt
오류 메시지 작성
eprintln!
: 오류 메시지를 화면에 띄우고, output.txt에 작성하지 않음.
728x90
'Languages > RUST' 카테고리의 다른 글
[RUST] TRPL : Chapter15 - Smart Pointer (0) | 2024.12.06 |
---|---|
[RUST] TRPL : Chapter 13 - Iterators & Closures (0) | 2024.12.02 |
[RUST] TRPL : Chapter 11 - Test (0) | 2024.12.01 |
[RUST] TRPL : Chapter 10 - Generic Types & Lifetime (0) | 2024.11.29 |
[RUST] TRPL : Chapter9 - Error Handling (0) | 2024.11.29 |