Хотя простота и удобочитаемость синтаксиса Ruby — это то, что мне понравилось за последние несколько месяцев, его простота не всегда означает ясность при программировании или отладке.
При использовании тернарного оператора вместо простых операторов if/else в различных программах я иногда получал непредвиденную синтаксическую ошибку. Поначалу это сводило меня с ума, потому что синтаксис тернарного оператора прост и временами работал правильно. После дальнейшего изучения я понял, что синтаксическая ошибка возникает только при использовании тернарного оператора для вывода строки с помощью метода puts. Хотя Ruby не требует, чтобы вы включали круглые скобки при вызове метода, включение круглых скобок вокруг строки, передаваемой методу puts, исправило ошибку.
5 > 2 ? puts 'some text' : puts 'some other text' #Syntax error 5 > 2 ? puts('some text') : puts('some other text') # No error
Хотя я был счастлив решить эту проблему, я хотел знать, почему скобки необходимы для вызова метода puts при использовании с тернарным оператором. После некоторых исследований я обнаружил, что без круглых скобок Ruby не знает, является ли двоеточие дополнительным аргументом, передаваемым в put, началом символа, частью хэша или частью троицы. Таким образом, ошибка. В этом случае кажется, что быть более явным и использовать круглые скобки не только полезно, но и необходимо.
Кроме того, я также понял, что удаление вызова puts из условного оператора и простое возвращение значения методу puts было лучшим способом при использовании тернарного оператора для вывода строк. Например..
5 > 2 ? puts('some text') : puts('some other text') # vs. puts 5 > 2 ? 'some text' : 'some other text'