오늘 릿코드 데일리 풀다가 이분탐색을 사용할 일이 있어 러스트가 제공하는 이분탐색 라이브러리를 살펴보았는데, 재밌는 점을 발견하여 정리를 한다.
(만약 데일리 풀이 코드가 궁금하다면 여기로)
Vec에 binary_search 라는 함수가 있다.
만약 배열에 찾고자 하는 값이 있다면 해당 인덱스를 반환하고, 없다면 lower bound 즉 그 값이 들어가야 할 인덱스를 반환한다.
사실 자세한 설명은 아래에 첨부한 러스트 docs를 보는게 정확하고 친절하다. 그럼에도 이 글을 쓰는 이유는 러스트가 제공하는 이분탐색 함수가 파이썬이 제공하는 이분탐색 함수랑 다른 점이 있었고 여기서 러스트의 철학을 배웠기 때문이다.
파이썬이 제공했던 bisect 라이브러리와 달랐던 점은 무엇이었냐하면 Result로 한 번 값을 감싸서 반환한다는 것이었다. 러스트에서는 이분탐색하여 찾고자 하는 값이 있다면 OK로 감싸고, 없다면 Err로 감싸서 반환한다.
Result로 감싸서 이분탐색한 값이 없는 경우와 있는 경우를 명확하게 구분짓고 있었다. 여기서 "에러를 안전하고 명확하게 처리"하려는 러스트의 철학을 맛보았다.
참고
rust docs