Migemoって

いまさらですけど Migemo ってあいまい検索の一種ですよね。ローマ字で日本語をインクリ〜というのは詳細で、あいまい検索機能の一種というのが概要ですよね。

あと思ったのが Migemo は検索部分は含まなくてもいいのかという点。C/Migemo はローマ字から正規表現を生成するものですし。

以下は機能メモ

  • ローマ字からひらがな(かたかな)を生成する機能。(入力途中のものなどを補完する)
  • Migemo辞書を引く機能。(「読みから漢字」や「英単語からカタカナ」など)
  • 辞書を引いた結果から正規表現を生成する機能。(巨大な正規表現になりがちなのでその対処)
  • 検索対象から正規表現を使って検索する機能。

半角英数字記号類を全角英数字記号類に変換

function h2z(han) {  // 半角英数字記号類を全角英数字記号類に変換
  // ASCII の 文字類 => 全角のそれら ( SP が含まれていないことに注意 )
  // [\u0021-\u007e] => [\uff01-\uff5e] 
  return han.replace(/[\u0021-\u007e]/g, function(c) {
    return String.fromCharCode(c.charCodeAt(0) + 0xff01 - 0x0021);
  });
}

とりあえず書いてみたのですが、これでいいのかな。教えてえらい人。

r2z はなんかおかしいと思ったので、 h2z に直してみた。roma も han にしてみた。

switch と初期化

http://d.hatena.ne.jp/Isoparametric/20070328/1175093521

初期化はダメなんですね。知らなかった。

switch 文の括弧は break; で抜けたりするあたりからして、ブロックとは思えないので変数の宣言さえしようと思わなかった。宣言したいときはブロック書いてその中で、ですね。http://d.hatena.ne.jp/noya/20070327#1175011966の方が書いてたのと大体同じですね。 fall-through な場合は、switch のすぐ下で宣言ですね*1。 case の後の処理が多いなら関数に……

C に戻るまでもなく現在進行形で C ってのがすごく悲しいですね。

*1:ここで初期化ができないってのが驚き。いや、使うことないですけど。

JavaScript メモ

  • プロパティも配列も連想配列
  • 関数がオブジェクト?
  • new したら prototype を自動で参照してくれる?
// 以下、コードもどきのメモ

// 連想配列の書き方
var hash = {a:'afx', 'b':'bcc'};  // => じゃない, key の " ' は省略できる?
hash['c'] = 'clnch';

// プロパティも配列も連想配列
var arr = new Array;  // [] でも同じ?
arr[0] = 'a';    // ↓と同じ ( 0 に .ToString() がかかる? )
arr['0'] = 'a';  // ↑と同じ
arr['a'] = 'afx';  // ↓と同じ
arr.a = 'afx';     // ↑と同じ

// 関数がオブジェクト?
var Klass = function() {}  // ↓と同じ?(スコープとかが違いそう。 new はこれでもできるぽい)
function Klass() {}        // ↑と同じ?

// new したら prototype を自動で参照してくれる?
Klass.prototype = {a:'afx', b:function(){return '飛べない豚はなんとかかんとか'}};  // これも連想配列

Klass.a // undefined (この状態じゃ prototype は見てくれない )

var obj = new Klass;
obj.a  // 'afx'
obj.b()  // '飛べない豚はなんとかかんとか'

// で、どうして prototype があるのか理解していなかったり。