Ruby의 unless 쉽게 읽기
Ruby 에는 unless 문법이 있습니다. if !current_user 를 unless current_user 로 쓸 수 있습니다. 간단한 조건에서는 좋은 것 같습니다. 자연어처럼 읽히거든요. return unless user_logged_in 그런데 조건이 여러 개 있는 경우에는? unless file.exist? && file.owner == current_user && permission != :readonly # do something end 하, 머리가 팽팽 돕니다. 어떤 개새가 이렇게 코드를 써놨어? unless 로 복잡한 조건을 적은 코드를 볼 때마다 if 로 고치곤 했습니다. 어느 날, 같이 일하던 동생에게 흥미로운 조언을 들었습니다. "unless를 assert 처럼 생각하고 읽으면 좋아요." 아래 코드 처럼 생각하면 좋다는 것이었습니다. assert(file.exist? && file.owner == current_user && permission != :readonly) 즉, 반드시 파일이 존재해야 하고, 소유자는 현재 사용자이며, 읽기 전용이 아니어야 다음 코드로 진행할 수 있다. 함수 시작부에 assert 를 쓰듯이 unless를 비슷한 용도로 쓰면 읽기가 오히려 편한 경우가 있다고. raise FileNotExist unless file.exist? raise AccessDenied unless file.owner == current_user && permission != :readonly 오 뭐야? 좋은데? 낯설음을 뒤로하고 저는 이걸 받아들였습니다. 더 이상 unless를 if 로 고치지 않고 적절히 섞어 쓰게 됐습니다.