あどけない話

Internet technologies

利用されてないローカル変数

僕はすでに XEmacs を使っていませんし、Mew でもサポートを止めています。なのに、XEmacs を Mac に入れ続けています。

何故かというと。。。

利用されていないローカル変数を見つけるためです。XEmacs では、バイトコンパイルすると、これを表示してくれます。(Emacs にあって、XEmacs にはないグローバル変数も警告します。それらの警告メッセージに埋もれてしまわないようにするには、工夫が必要です。)

以前から気が向けば、この機能が Emacs にないか調べていましたが、結局発見できませんでした。というわけで、emacs-devel で聞いてみたところ、Stefan が個人的に実装しているので、興味があるなら commit してくれるとのことでした。

結論:

  • 今のところ Emacs では利用されてないローカル変数は発見できない
  • その内できるようになるかも

早く聞けばよかったなぁ。

あなたはどれが好き?

イベントリスナーの実装の違いを吸収するために、よく以下のようなコードを書きます。

var setHandler = (function() {
    if (addEventListener) {
        return function(el, type, func) {
            el.addEventListener(type, func, false);
        };
    }
    if (attachEvent) {
        return function(el, type, func) {
            el.attachEvent('on' + type, function() {
                func.call(el, window.event);
            });
        };
    }
    return function(el, type, func) {
        el['on' + type] = func;
    };
})();

関数型言語に慣れていないと、こういう定義の仕方が気持ち悪いのだそうです。

もちろん、手続き型言語のように、以下のようにも書きます。

var setHandler = addEventListener ?
    function(el, type, func) {
       el.addEventListener(type, func, false);
    } :
    attachEvent ?
    function(el, type, func) {
      el.attachEvent('on' + type, function() {
          func.call(el, window.event);
      });
    } :
    function(el, type, func) {
        el['on' + type] = func;
    };

また、以下のようにも書けます。

var setHandler;
if (addEventListener) {
    setHandler = function(el, type, func) {
        el.addEventListener(type, func, false);
    };
} else if (attachEvent) {
    setHandler = function(el, type, func) {
        el.attachEvent('on' + type, function() {
            func.call(el, window.event);
        });
    };
} else {
    setHandler = function(el, type, func) {
        el['on' + type] = func;
    };
}

1番目よりも、2番目3番目の方が分りやすいとは決して言えないような気がします。という訳で、1番目が気持ち悪いと思う人は、早く慣れましょうというお話でした。

ところで、こういうコードは何と呼ぶのでしょう? Adaptor パターン? そんなに高尚なものではない?