Всегда хорошая идея стремиться к простоте, где это возможно, и с этой целью лучше изложить вещи простым и понятным образом. Подобные объявления затрудняют определение источника переменных, так как они довольно тщательно встроены в оператор.
Объявление переменных в квадратных скобках обычно считается допустимым:
if (found = MyModel.find_by_pigeon_id(params[:pigeon_id]))
# Variable 'found' used only within this block
end
# Ruby variables will persist here, but in many languages they are out of scope
Более подробная версия на самом деле имеет значение:
found = MyModel.find_by_pigeon_id(params[:pigeon_id])
if (found)
# Variable 'found' can be used here
end
# Implies 'found' may be used here for whatever reason
Всегда приятно иметь возможность просматривать программу и видеть все переменные так, как они объявлены. Сокрытие вещей не служит никакой другой цели, кроме как расстраивать людей.
Ruby намного более расслаблен, чем многие другие языки, с точки зрения того, сколько вы можете сойти с рук. Некоторые языки сурово накажут вас за усложнение вещей, потому что крошечная ошибка в объявлении или кастинге может иметь огромные последствия. Это не значит, что вы должны в полной мере использовать это при каждой возможности.
Вот как я бы выступил за реализацию вашего первого примера:
# Ensure that @select_file is defined
@select_file ||= Qt::FileDialog.new
@pushButton.connect(SIGNAL(:clicked)) do
# Block is split out into multiple lines for clarity
@select_file.show
end
Второй:
# Simple declaration, variable name inherited from class name, not truncated
timer = Qt::Timer.new
timer.connect(SIGNAL(:timeout)) do
# Long parameter list is broken out into separate lines to make it clear
# what the ordering is. Useful for identifying accidentally missing parameters.
@label.text = Qt::Application.translate(
"MainWindow",
"The time right now is #{Time.now}",
nil,
Qt::Application::UnicodeUTF8
)
end
timer.start(1000)
Я обнаружил, что самые сложные программы часто выглядят самыми простыми, поскольку они написаны людьми с большим опытом, которые знают, как выразить вещи простым способом.
Интересно, что некоторые из самых простых программ часто являются самыми сложными, поскольку они написаны новичками, которые либо выставляют напоказ и хвастаются, либо копаются в глубокой канаве и продолжают бросать код в проблему в надежде исправить это.