可能な限り簡潔にするよう努めることは常に良い考えであり、そのためには物事を率直に述べることが最善です。このような宣言は、変数がステートメント内にかなり完全に埋め込まれているため、変数がどこで発生したかを判断するのを難しくします。
括弧内でスコープ変数を宣言することは、通常は受け入れられると見なされます。
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)
最も複雑なプログラムは、多くの経験を持ち、物事を単純な方法で表現する方法を知っている人々によって書かれているため、最も単純に見えることがよくあります。
興味深いことに、最も単純なプログラムのいくつかは、多くの場合、最も複雑なプログラムです。なぜなら、これらのプログラムは、見栄を張って見せびらかしている初心者によって書かれているか、深い溝に自分自身を掘り下げて、問題を修正することを期待してコードを投げ続けている初心者によって書かれているからです。