Как программист на Ruby, я нахожу первый более понятным. Это дает понять, что все выражение является присваиванием, а назначаемая вещь определяется на основе некоторой логики, и это уменьшает дублирование. Это будет выглядеть странно для людей, которые не привыкли к языкам, где все является выражением, но написание кода для людей, которые не знают язык, не так важна для цели IMO, если только они не являются вашими целевыми пользователями. В противном случае от людей следует ожидать мимолетного знакомства с ним.
Я также согласен с предложением bp о том, что вы можете сделать его более понятным, сделав отступ для целого выражения if так, чтобы все это было визуально справа от назначения. Это абсолютно эстетично, но я думаю, что это делает его более легким для просмотра и должно быть понятнее даже для тех, кто не знаком с языком.
Так же, как в стороне: Этот тип if
вовсе не уникален для Ruby. Он существует во всех Лиспах (Common Lisp, Scheme, Clojure и т. Д.), Scala, во всех ML (F #, OCaml, SML), Haskell, Erlang и даже в прямом предшественнике Ruby, Smalltalk. Это просто не распространено в языках, основанных на C (C ++, Java, C #, Objective-C), которые используют большинство людей.