HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

変数のスコープの局所化

一般的にどうなのだろうか、という話もあると思うが‥
自分は、括弧やインデントが多少増えても、変数のスコープを局所化することの方が重要だと考えている。
例えば、こんなコード。(たまたまJSPなだけ。)

<%
    String result = ""; 
    String attr1 = (String) session.getAttribute("attr1");
    if (attr1 != null && !attr1.equals("")) {
        result = "?attr1=" + attr1;
    }
%>
    <%-- ‥この後に100行くらい続く。--%>

このとき、変数 attr1 はどこまで使われるのか?パッと見ただけでは分からない。「この後に100行くらい続く」の後でも使われるかもしれないし、使われないかもしれない。それは「この後に100行くらい続く」コードや要素の中身を見ないと分からない。
ここでしか使われないのなら、次のように書くと、変数 attr1 の立場が明確になる。

<%
    String result = ""; 
    {
        String attr1 = (String) session.getAttribute("attr1");
        if (attr1 != null && !attr1.equals("")) {
            result = "?attr1=" + attr1;
        }
    }
%>
    <%-- ‥この後に100行くらい続く。--%>

で、括弧が、インデントが多くていや、という状態になるのなら、それはメソッドを分割するなり、(JSPなら)カスタムタグをちゃんと書くなり、ユーティリティメソッドとかを作ってそれを呼び出すだけにするなり、手はあるはず。

どうでしょう。