2008年10月27日

BloggerのFollowが日本語にも対応してた

ちょっと前にクリボウさんのTipsに、BloggerにFollow機能が追加されたことが紹介されていた。記事中に

(今のところ、表示言語を英語にした場合のみ)
と書かれている通り、このブログでは使用できないでいたのだが、先日ふと使用できることに気がついた。ブログパーツ「読者」も追加したところ、問題なく使用できた(しかし、読者数0という悲しい結果を目の当たりにしたのですぐ削除した)。



追加の手順

手順 1:「追加」ボタンを押押すと表示される。ここでURLを直接入力するか、Google Readerから指定する。
手順 2:追加した相手やその他ユーザに知らせるかどうかを指定する

なお、追加したリストはGoogle Readerに「読者になっているブログ」として追加される。つまりGoogle ReaderからBloggerの閲覧リストに追加した場合は、また別途Google Readerに追加される、という。。

管理

「管理」ボタンを押すと、下の画面が表示される(手順2の公開・匿名を変更するものと思う)

「2さんのブログ」の「2」は件数だろうか。

2008年10月9日

Predicate デリゲート

配列の中から、「ある条件に一致するものを探す」ような場面ではSystem.Array クラスのジェネリックメソッドが使える。例えば

  • Find:ある条件に一致する要素を探す
  • Exists:ある条件に一致する要素が存在するかどうかを調べる
  • FindIndex:ある条件に一致する要素のインデックスを取得

など。これらのメソッドの引数にPredicateデリゲートを渡す必要がある。このデリゲートには「ある条件に一致かどうか」を返す処理を実装する。

public void Execute()
{
    string[] animals ={ "cat", "dog", "pig", "bear" };

    Console.WriteLine(Array.Exists(animals, new Predicate(StartWithP)).ToString());
    Console.WriteLine(Array.Find(animals, new Predicate(StartWithP)));
    Console.WriteLine(Array.FindIndex(animals, new Predicate(StartWithP)).ToString());
}

//"p"で始まるかどうかを判定する
private bool StartWithP(string value)
{
    return (value.StartsWith("p"));
}

ただし、これだと「ある条件」が固定となってしまう。
条件を動的にするには以下のように変数を使用すればよいが、以下のようにExecuteメソッドの外に宣言しなければならない。

private string _condition;

public void Execute()
{
    string[] animals ={ "cat", "dog", "pig", "bear" };
    _condition = "p";

    Console.WriteLine(Array.Exists(animals, new Predicate(StartWith)).ToString());
    Console.WriteLine(Array.Find(animals, new Predicate(StartWith)));
    Console.WriteLine(Array.FindIndex(animals, new Predicate(StartWith)).ToString());
}

//指定の文字列で始まるかどうかを判定
private bool StartWith(string value)
{
    return (value.StartsWith(_condition));
}

ここはこの変数のスコープをExecuteメソッド内としたいところ。
なるほど、ここで匿名メソッドが使える。匿名メソッドではその外部のメソッド内のローカル変数にもアクセス可能であるため、条件を示す変数もExecuteメソッド内に宣言できる。

public void Execute()
{
    string[] animals ={ "cat", "dog", "pig", "bear" };
    string condition = "p";

    //匿名メソッドで指定文字列から始まるかを返すメソッドを定義
    Predicate d = delegate(string value) { return (value.StartsWith(condition)); };
    Console.WriteLine(Array.Exists(animals, d).ToString());
    Console.WriteLine(Array.Find(animals, d));
    Console.WriteLine(Array.FindIndex(animals, d).ToString());
}

これは便利だ