Java で順列リテラル?

このエントリは Java Advent Calendar -ja 2010 : ATND の 2 日目のものです。ネタです。


みなさん Java では true や false や null がキーワードではなく、リテラルだというのはご存じだと思います。
では、「え、そんなリテラルあるの?」というリテラルがあることはご存知でしょうか?
それは、「順列リテラル」です!

System.out.println(0x05P2); // 5! / (5-2)! = 20
System.out.println(0x01P0); // 1! / (1-1)! = 1

ideone による結果

左側が 16 進数じゃなければならないのと、結果が double になってしまうのに目をつぶれば、超便利です!
・・・ごめんなさい。以下ネタバレ

上のは、単に浮動小数点数リテラルをそれっぽくなるものを選んだに過ぎません。
浮動小数点数リテラルと言うと、通常は

  • 2.0
  • 10.
  • .5
  • 10e3

などを思い浮かべると思います。
この「10e3」は 10 進リテラルを使用するのですが、16 進リテラルを使用するものが上で紹介したリテラルの正体です。
e は 16 進数リテラルのアルファベットですので、区切りがわからなくなってしまうため、P(もしくは p) を採用したのでしょう。
P は exPonent の P でしょうか。X だったら 0X0X0 というリテラルが楽しめたのに残念です(嘘


・・・なんの役にも立たないエントリでごめんなさい><