argument contract

args 벡터에서 두 설정 값만 분리하면 minigrep의 입력 계약이 생긴다

`cargo run --` 뒤의 값은 프로그램에 전달되고, `args[0]`은 실행 파일 이름으로 남는다. 예제 11-2는 필요한 두 값만 참조자로 꺼낸다.

위치 변수 역할
args[0] "target/debug/minigrep" 사용 안 함 호출된 바이너리 이름이므로 이번 장의 검색 입력에서는 제외한다.
args[1] "test" query 파일 안에서 찾을 문자열이며 `&args[1]`로 빌린다.
args[2] "sample.txt" file_path 다음 절에서 `fs::read_to_string`에 넘길 경로 값이다.
env::args 프로그램 인수 반복자
collect Vec<String>으로 수집
index 1번과 2번 선택
borrow 문자열 참조 저장
print 값 연결 확인
참조 사용

`&args[1]`, `&args[2]`

벡터 안의 `String` 소유권을 옮기지 않고, main의 나머지 코드에서 읽을 수 있도록 참조만 잡는다.

아직 남은 위험

인수가 부족하면 인덱싱이 패닉

args.len() 검사는 아직 없으므로, 리팩터링 절에서 `Config::build`와 `Result`로 다듬는다.

다음 연결

file_path는 파일 읽기의 입력

이 절은 값을 꺼내는 단계까지만 다룬다. 다음 절에서 경로를 실제 파일 내용 문자열로 바꾼다.