Iterator refactor

minigrep를 반복자로 정리하는 순서

minigrep 리팩터링은 std::env::args()를 소비하는 Config::build, contents.lines() 검색, IGNORE_CASE 분기를 함께 정리하는 작업입니다.

args.next()

첫 호출은 프로그램명을 버리고, query와 file_path가 없으면 Err("Didn't get a query string") 또는 Err("Didn't get a file path")로 빠집니다.

env::var

IGNORE_CASE가 설정되어 있으면 search_case_insensitive, 없으면 search를 호출합니다.

lines().filter()

line.contains(query) 조건만 남기고, 대소문자 무시는 query와 line을 소문자로 비교합니다.

collect::<Vec<_>>

반환값은 Vec<&str>라서 contents보다 오래 살 수 없고, 검색 결과 문자열을 새로 복사하지 않습니다.