政略結婚じゃないよ。

コンピュータや音楽のことなど

全体表示

[ リスト ]

javascript のプログラムで
    "SELECT id,name FROM people WHERE name like 'A%'"
のような文字列を作りたいとき、
普通にやると下記のようになる。
    SQL = "SELECT " + fieldList + " FROM " + table +
          " WHERE " + tagetField + " LIKE '" + targetValue + "%'";
これだと + と引用符だらけで、特にシングルクォートと
ダブルクォートが混ざっているところなど最悪。
で、こんな風に書けるようにしてみた。
    SQL = "SELECT %1 FROM %2 WHERE %3 LIKE '%4%'"
          .into(fieldList, table, tagetField, targetValue);
上記でつくったものを応用してさらに便利に使える
バリエーションも加えた。
  criteria = " WHERE id=%1".intoIf(val);
val == null だと criteria == "" となる。
ちょっと前まではこんな風に書いていた。
  criteria = (val == null) ? ""
                           : " WHERE id=" + val;
もっと昔はこんな風に書いていた。
  if (val == null) {
    criteria = "";
  } else {
    criteria = " WHERE id=" + val;
  }
5行 -> 2行 -> 1行
おぉ、生産性 5倍 (当社比)
ソースは以下のとおり。
String.prototype.into = function() {
  var rv = this, arg = arguments;
  for (var i = arg.length - 1; i >= 0; i--)
    rv = rv.replace(new RegExp("%"+(i+1), "g"), arg[i]);
  return rv;
}

String.prototype.intoIf = function() {
  var rv = this, arg = arguments;
  for (var i = arg.length - 1; i >= 0; i--) {
    if (arg[i] == null) return "";
    rv = rv.replace(new RegExp("%"+(i+1), "g"), arg[i]);
  }
  return rv;
}
String の prototype を拡張している。
インデックス i を降順にしているのは
10番目の引数(%10)を1番目の引数(%1)よりも
先に処理するため。

into(), intoIf() いずれも高級な処理は
していないので 引数の中身に %1 のような
文字列が含まれていると予期しない結果に
なることもありえる。

.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事