Ловим exception внутри выражений

Илья • 28 января 2007 г.

Век живи, век учись.

Не так:
if @user.name
  @user.name.capitalize
else
  "name not set"
end
И не так:
@user.name? ? @user.name.capitalize : "name not set"
И даже не так:
begin
  @user.name.capitalize
rescue
  "name not set"
end
А вот так:
@user.name.capitalize rescue "name not set"

Красота…

Update: Привёл немного не подходящий пример в прошлый раз: @user.name обычно не возвращает исключение, поэтому этот метод тут не поможет.

Another update: На самом деле этот хак не стоит воспринимать слишком серьёзно. Есть большая вероятность того, что вы не поймаете какое-нибудь действительно важное исключение, которого вы не ожидали.

5 комментариев:

  1. dru:

    Супер, спасибо за совет!

  2. enternet:

    Сильно. Кто бы мог подумать.

  3. Dmytro Shteflyuk:

    А если так?

    @user.name || “name not set”

  4. Илья:

    Dmytro Shteflyuk

    Это только в том случае, если не вылетает exception.

    Я привёл плохой пример в этой заметке, так как обычно @user.name возвращает nil, а не exception…

  5. vlmonk:

    Действительно красиво.

Извините, но комментарии для этой статьи уже закрыты.