Buzzurlの中の人日記

最近Hadoopを使うために5~6年ぶりにJavaをいじっています。

そんで、ちょっとばかり耐えがたいわけです。

例えばありがちな例題を挙げると、

["google", "検索エンジン","開発"]のようなタグ(文字列)のリスト(でも配列でもなんでもいい)を受け取って

[
 {tag=>"google", enc=>"google"},
 {tag=>"検索エンジン", enc=>"%E6%A4%9C%E7%B4%A2%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3"},
 {tag=>"開発", enc=>"%E9%96%8B%E7%99%BA"}
]

のようなハッシュテーブルのリストに変換しなさい。

ただしパーセントエンコーディングを行う関数(でもメソッドでもなんでもいい) uri_encodingは与えられているものとする。

こんなこと、Webアプリケーションではよくやるじゃないですか。

んで、実際Perlなんかでは結構簡単に書けて

my @tags;
#@tags : ("google", "検索エンジン","開発") はモデルとかから取得

my @ret = map{ { tag=>$_,enc=>uri_encoding($_) } } @tags;

まあこんな感じじゃないですか。

これをJavaで書くとこんなんなります。

List<String> tags;
//tags の中身はモデルとかから取得

List<Map<String,String>> result = new LinkedList<Map<String,String>>();
Iterator<String> i = tags.iterator();
while(i.hasNext()){
    String tag = i.next();
    Map<String,String> m = new HashMap<String,String>();
    m.put("tag", tag);
    m.put("enc", uri_encode(tag));
    result.add(m);
}

こんなにも・・!!こんなにも苦しいのならば型などいらぬ!!

とか暗黒面に落ちそうになってしまいました。


これ以外にもWebアプリケーションなんかだとクエリーが全部文字列で来るけど、妥当性検証のためにintに変換してintと比較とかするのもJavaだとクソ面倒です。(例えば今表示している0件目ページの次の100件を表示するためにoffset=100とかをGETパラメタで受け取るとかそういう場合。こういうのはフレームワークが吸収してくれるんでしょうか?)


そんで、Javaのリハビリとしてバリアント型を作ってみました。

どうせWebアプリケーションのコントローラとかHadoopでやるようなテキスト処理だと、使う型はせいぜい文字列、整数、日付、リスト、ハッシュおよびそれらの組み合わせと相互変換なわけです。

こういう簡単なことは簡単に書けるように、これらを全部つっこめるvarクラスを作って、例えばさっきの問題ならこんな風に書けるようにするのがゴールです。(lambdaはファンクタのための抽象クラス、$はhashとかmapとかの関数的なクラスメソッドを入れておくためのクラス。)

var tags = $.list("Google", "検索エンジン", "開発");
lambda tag2hash = new lambda(){var f(var tag){
  return $.hash( "tag", tag, "enc", uri_encode(tag) );
}};
var result = $.map(tag2hash, tags);

んで、書いたのがコレ(var.java)

1ファイルにまとめるために無理やりpublicじゃない内部クラスを大量に使ってますが気にしないでください。

varクラス(クラス名が大文字で始まらないけど勘弁してねw)にmainついてますが、もうJavaソースには見えませんw

JavaでhackするというよりJavaをFxxkしてる気分になりました。

public class var {
    public static void main(String[] args){
        lambda square = new lambda(){var f(var v){
            return new $(v.i() * v.i());
        }};
        lambda say = new lambda(){var f(var v){
            System.out.println(v.display());
            return var.NIL;
        }};

        //文字列
        var name = new $("James");
        say.apply(name);

        //文字列と数値の混合リスト
        var ls = $.list(1, "2", 3, 4, 5);
        //リストの各要素を2乗したリストを返す(数値は自動変換)
        say.apply($.map(square, ls));
        //cdr(笑)
        say.apply(ls.cdr());

        //入れ子のハッシュテーブル
        var hash = $.hash(
          "John", $.hash("sex", "male", "age", 20),
          "Eva",  $.hash("sex", "female", "age", "unknown"),
          "Abe",  $.hash("sex", "unknown", "age", "25")
          );
        say.apply(hash.get("John").get("sex"));
        say.apply(hash.get("Nobita").get("sex"));
        say.apply(hash.keys());
        say.apply(hash);
    }
}

このmainを実行するとこんな感じ。

$ java variant/var
"James"
(1 4 9 16 25)
("2" 3 4 5)
"male"
nil
("John" "Abe" "Eva")
(("John" => (("age" => 20)("sex" => "male")))("Abe" => (("age" => "25")("sex" => "unknown")))("Eva" => (("age" => "unknown")("sex" => "female"))))
この記事にコメントする
お名前
タイトル
文字色
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
http://sangurasu.kir.jp/ch/merutomo_schoool/
おぉ
メル友 URL 2008/09/19(Fri) 編集
公式
とても役立ちました。
どきどき URL 2008/11/29(Sat) 編集
わかりやすい解説だと思いました。これからも頑張ってください。
URL 2008/12/11(Thu) 編集
質問
はじめまして、isiと申します。
突然コメントを書いてしまい申し訳ございません。
Buzzurlのブックマーク投稿APIの使い方がわからず、もしよろしければ教えていただけると大変嬉しいです。
https://buzzurl.jp/posts/add/v1

パラメータを下記のようにして、Basic認証でアクセスしていますがエラーとなってしまいます。
パラメータの記載方法が悪いのでしょうか。
突然質問してしまい失礼しました。もしご回答いただけると幸いです。

例1: https://buzzurl.jp/posts/add/v1?url=http%3A%2F%2Flabs.ecnavi.jp%2Fdeveloper%2Fbuzzurl%2Fapi%2F
例2: https://buzzurl.jp/posts/add/v1/?url=http%3A%2F%2Flabs.ecnavi.jp%2Fdeveloper%2Fbuzzurl%2Fapi%2F

エラーメッセージ: {"status":"fail","reason":"invalid_method"}
isi 2009/01/26(Mon) 編集
無題
凄いですね~
熟女 URL 2009/02/16(Mon) 編集
無題
マジ?
出会い系サイト URL 2009/03/10(Tue) 編集
出会い系サイト
なるほど~
出会い系サイト URL 2009/03/10(Tue) 編集
メル友
そうですか
メル友 URL 2009/04/08(Wed) 編集
無題
ありがとうございます。とても役立ちました。
とも URL 2009/04/09(Thu) 編集
メル友
メル友
メル友 URL 2009/04/12(Sun) 編集
出会い
これからも頑張ってください。
出会い URL 2009/04/28(Tue) 編集
無題
なるほど・・・
出会い系サイト URL 2009/05/09(Sat) 編集
無題
家出少女とのリアルな出会い&体験
家出掲示板 URL 2009/05/19(Tue) 編集
無題
愛人の軌跡をすべてさらけだします
愛人募集 URL 2009/05/19(Tue) 編集
無題
出会いませんか?
セックス フレンド URL 2009/05/19(Tue) 編集
無題
人妻とエッチな出会い案内所
人妻 URL 2009/05/19(Tue) 編集
出会い系
すごいですね
出会い系 URL 2009/05/26(Tue) 編集
優良出会い系サイト一覧
本当に評価された優良な無料出会い系サイトを厳選!!
優良出会い系サイト一覧 URL 2009/05/27(Wed) 編集
無題
家出サイト
家出サイト URL 2009/06/17(Wed) 編集
メル友
メル友
メル友 URL 2009/07/08(Wed) 編集
無題
いいですね
家出サイト URL 2009/07/22(Wed) 編集
すごいです
参考になりました!
すごい URL 2009/08/03(Mon) 編集
出会い
出会いhttp://deai-board.com/ が見つかる
メル友http://www.loversagain.com/ 探しに
出会い URL 2009/08/06(Thu) 編集
無題
悪質な出会いを排除
悪質出会い URL 2009/08/07(Fri) 編集
無題
愛人の軌跡をすべてさらけだします
愛人募集 URL 2009/08/07(Fri) 編集
無題
出会いませんか?
出会い 掲示板 URL 2009/08/07(Fri) 編集
メル友募集
メル友募集中だよ~!
メル友 URL 2009/08/13(Thu) 編集
セフレ募集
セフレ募集~セフレ作りたい
セフレ URL 2009/08/17(Mon) 編集
無題
スタビ
スタビより出会える出会い系攻略サイト URL 2009/08/17(Mon) 編集
家出
家出少女と出会いを楽しもう
家出 URL 2009/08/18(Tue) 編集
無題
そうなんですね★
メル友簿募集 URL 2009/08/21(Fri) 編集
無題
家出少女を救う掲示板
家出掲示板 URL 2009/08/22(Sat) 編集
無題
神待ちの女の子が多数!
家出 神待ち URL 2009/08/22(Sat) 編集
セフレ
セフレ
セフレ URL 2009/09/15(Tue) 編集
メル友
メル友
メル友 URL 2009/09/15(Tue) 編集
熟女
熟女
熟女 URL 2009/09/15(Tue) 編集
援助交際
援助交際
援助交際 URL 2009/09/15(Tue) 編集
逆援助
逆援助
逆援助 URL 2009/09/15(Tue) 編集
エッチ
エッチ
エッチ URL 2009/09/15(Tue) 編集
出会い
出会い
出会い URL 2009/09/15(Tue) 編集
人妻と出会える出会い系
人妻と出会える出会い系
人妻と出会える出会い系 URL 2009/09/15(Tue) 編集
人妻最強伝説
人妻最強伝説
人妻最強伝説 URL 2009/09/15(Tue) 編集
無料のメル友募集サイト
無料のメル友募集サイト
無料のメル友募集サイト URL 2009/09/15(Tue) 編集
優良メル友-完全無料-
優良メル友-完全無料-
優良メル友-完全無料- URL 2009/09/15(Tue) 編集
恋人最強ランキング
恋人最強ランキング
恋人最強ランキング URL 2009/09/15(Tue) 編集
出会い系ロックオン
出会い系ロックオン
出会い系ロックオン URL 2009/09/15(Tue) 編集
うん
出会い系サイト
無料出会い系 URL 2009/09/17(Thu) 編集
無題
お好きな子からどうぞ
家出少女掲示板 URL 2009/09/25(Fri) 編集
無題
ホンモノはここ!
家出サイト URL 2009/09/25(Fri) 編集
無題
相性の良い相手が見つかります♪
セックスフレンド URL 2009/09/25(Fri) 編集
無題
勉強になりました☆
あい URL 2009/09/26(Sat) 編集
無題
出会い
出会い URL 2009/09/28(Mon) 編集
無題
セフレ
セフレ URL 2009/09/28(Mon) 編集
無題
お好きな子からどうぞ
家出少女掲示板 URL 2009/09/29(Tue) 編集
無題
ホンモノはここ!
家出サイト URL 2009/09/29(Tue) 編集
無題
相性の良い相手が見つかります♪
セックスフレンド URL 2009/09/29(Tue) 編集
無題
更新がんばってくださいね☆またきまぁっす♪
http://hs-juku.a-check.info/ URL 2009/10/20(Tue) 編集
無題
おもしろそうなのでたちよっちゃった☆コメしちゃいましたぁ^^
家出少女 掲示板 URL 2009/10/20(Tue) 編集
無題
神待ち家出掲示板サイト
神待ち URL 2009/11/27(Fri) 編集
無題
神待ち少女が泊め男を募集中家出掲示板
泊め男 URL 2010/03/29(Mon) 編集
無題
これは気になる。
エロチャットで毎日を過ごして URL 2010/05/12(Wed) 編集
無題
やっぱり気になる。
エロチャットに癒される URL 2010/05/12(Wed) 編集
この記事へのトラックバック
この記事にトラックバックする:
HOME [281] [280] [279] [278] [277] [276] HUNTER×HUNTER >>
プロフィール
HN:
ajiyoshi
性別:
男性
自己紹介:
プログラマです。
ソーシャルブックマークサービス「Buzzurl」の開発者です。

はてなブックマークカウンタ


旧*「ふっかつのじゅもんがちがいます」カウンタ
Buzzurl

powered by Buzzurl

Twitter

カレンダー
08 2010/09 10
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
最新コメント
[07/23 つらら]
[07/23 れいら]
[06/16 婚活]
[05/28 あっだ]
[05/28 もも]
最新トラックバック
バーコード
ブログ内検索
忍者ポイント
カウンター
アクセス解析
あわせて読みたい
あわせて読みたい
Powered by ニンジャブログ  Designed by ゆきぱんだ
Copyright c *「ふっかつのじゅもんがちがいます。」 All Rights Reserved
忍者ブログ / [PR]アイフォン 引越し