2009-07-20 7 views
2

私はいくつかのスクリプトを書いて、私は通常私のコードは次のようになりますポイントに達する:RubyのNの端をより良く見えるようにするには?

  end 
     end 
     end 
    end 
    end 
end 

を私はあなたのことは知らないが、これは私にとって非常に醜いです。これについて何かできますか?

+1

これはRuby専用のものではありません。階段のコードは永遠に残っています。 – Pesto

+1

Pythonはこれが面白いです。なぜなら、それは外側に階段を上っているだけなので、戻ってこないからです。私はそれがオプションではないことを知っていますが、それはPythonの設計目標の1つでした。 – Soviut

答えて

19

:-)のPythonを使っていますか?より多くのメソッドを使用するリファクタリング?代わりに他のルーチンに渡されたブロックを使用しますか?

一般に、ディープネストは、メソッドが複雑すぎて分割されるべきであるという指標です。内在する複合文をリファクタリングしたメソッドに基づいて名前を付けることで、暗黙的な構造化文書の作成にも役立ちます。

4

これらの内部ブロックが何か簡単に名前を付けて(再利用可能かもしれませんか?)、それらを小さな別個の機能にリファクタリングしないのはなぜですか?それから、はるかに短い終わりのシーケンスで終わるでしょう。

は、そうでない場合は別のアプローチはあまりない巣あなたのコードを実行してください

+0

誰かがPythonを提案してくれると確信していました:) – Geo

+0

私は実際にPythonとPotion [http://github.com/why/potion/tree/master]の両方を念頭に置いていましたが、後者はもう少し実験的な味です。 ) –

5

小さな断片に分割するアドバイスは良いです。そのようなネストされたブロックがたくさん必要な場合は、endというキーワードにコメントを付けてラベルを付けることができます。

end # End conditional statement 
    end # End method declaration 
end # End class declaration 

まだ醜いですが、少なくとも明確です。

上記以外のオプションが望ましい。

2

小さなテスト可能な機能を使用してください。あなたの機能とより重要なロジックはテストするのが簡単なだけでなく、コードが読みやすくなります。

1

Iは、ネストされた見ている "{}" のブロックと4-空間ソフトタブと:

端; END; END;エンド

Iこれは垂直方向のスペースを節約するとしたが、Iドン深いネスティングを避け、ブロック終了行をコメントする上のコメントは有効なアプローチです。深いネスティングは、スピードアップが必要なもののメソッドコールのオーバーヘッドを避けることですが、可読性はほとんどそのような「最適化」よりも優先されます。

1

独自のRubyをコンパイルする場合は、ennnnnnndスタイル構文RubyKaigiの話です)。残念ながら、これはRubyコアのrejectedと提案されています。

+0

リンクのために+1、私はまだこれが拒否されて満足しています。 –

+1

@MichaelKohl:あなたが何かをすることができるかどうかを見るための好奇心と、おそらくあなたが気づかないことを理解する知恵の両方を持つことは良いことだと思います。 –

関連する問題