ついカッとなってJavaでワンライナーを書いた

Javaも1行にまとめることできるはずだよなと思って、できるはずでしょと言われて、お昼休みに試してみたらできた。
できるのは当たり前なんだけど、実際に試してみたことはなかった。
実際にできることを確認したので、ついカッとなってコンパイルと実行も繋げて、ワンライナーにしてみた。

echo "public class OneLiner{public static void main(String[] args){System.out.println(\"One Liner\");}}">OneLiner.java;javac OneLiner.java;java OneLiner

できた!
でもこれはJavaではなくてシェルスクリプトだなぁ。まあいいや。
勢いに乗ってDOSでもやってみる。

echo public class OneLiner{public static void main(String[] args){System.out.println("One Liner");}}>OneLiner.java&&javac OneLiner.java&&java OneLiner

できた!
でもシェルの「;」って、DOSでどうやるんだろう。「&&」でも全然構わないのだが。
処理結果に関わらず、処理終了後に次のコマンドを実行するには?
調べたけどよく分からない。


さらに調子にのってFizzBuzzだ!

echo "public class FizzBuzz {public static void main(String args[]){String x3=\"Fizz\",x5=\"Buzz\";for(int i=1; i<=100; i++){if(i%3 == 0 && i%5 == 0)System.out.println(x3 + x5);else if(i%5 == 0)System.out.println(x5);else if(i%3 == 0)System.out.println(x3);else System.out.println(i);}}}">FizzBuzz.java;javac FizzBuzz.java;java FizzBuzz

満足した。

PerlRubyだとワンライナーでできるらしい。


『どうしてプログラムが書けないのか』に出てくる200人中1人理論は、実によく出来た中毒性のある文章だ。 - techlog

過去の自分を超えた。これはJavaの新たな地平を開いたな。
ppencodeほどインパクトはないが・・・。


短くするだけなら、変数名変えたり、Static Initializer使えばもっと短くなる。
シェルはいまひとつよくわかっていないので、もっとスマートな方法があるかもしれない。
まあそもそもがかなりの力技だが・・・。


うーん、くだらないってわかっていてるのに、なんか楽しい。