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 로 고치곤 했습니다.

어느 날, 같이 일하던 동생에게 흥미로운 조언을 들었습니다.

unlessassert 처럼 생각하고 읽으면 좋아요.

아래 코드 처럼 생각하면 좋다는 것이었습니다.

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

오 뭐야? 좋은데?
낯설음을 뒤로하고 저는 이걸 받아들였습니다.
더 이상 unlessif 로 고치지 않고 적절히 섞어 쓰게 됐습니다.

오늘도 이런 unless 코드를 쓰다가 조언해 준 동생 생각이 났습니다.
알려줘서 고맙다.😁

P.S. 하지만… 알려줬던 동생은 이젠 기억도 못하는 것 같습니다.

얼간의 동생과의 카톡 대화


함께 읽으면 좋은 글: