Ruby의 unless 쉽게 읽기

Ruby 에는 unless 문법이 있습니다.
if !current_userunless 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 로 고치지 않고 적절히 섞어 쓰게 됐습니다.

Ruby의 unless 쉽게 읽기

K리그 프로그래머

Ruby의 unless 쉽게 읽기

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 8월 28일 오전 2:37

댓글 0