値型


いくつかの型は、値の型です。値型は次のような特徴を持っています。

  • 値型は不変です。それらは変化が起きるような内部の状態を持ちません。(例えば、String内の文字を変更できないように)
  • 必須のカーディナリティを持ちます。(従ってjava.lang.Objectのサブクラスです。)
  • null以外のデフォルト値を持ちます。

現在、値型はString, Integer, Number, Boolean, Durationだけです。 これらの型は言語として組み込まれています。

  • 組み込まれたリテラルの書式を持っています。
  • Durationを除き、組み込まれた処理としてその型の値を返します。

String, Integer, Number, Boolean, Duration は、この章で論じられます。


String

Stringは文字列を表します。String型のデフォルト値は空の文字列("")です。

Stringリテラル構文

StringLiteral:
            OneStringLiteral
            StringLiteral OneStringLiteral

    OneStringLiteral:
            " DoubleQuoteStringCharactersopt "
            ' SingleQuoteStringCharactersopt '

    DoubleQuoteStringCharacters:
            DoubleQuoteStringCharacter
            DoubleQuoteStringCharacters DoubleQuoteStringCharacter

    DoubleQuoteStringCharacter:
            InputCharacter but not ", {, } or \
            \ InputCharacter

    SingleQuoteStringCharacters:
            SingleQuoteStringCharacter
            SingleQuoteStringCharacters SingleQuoteStringCharacter

    SingleQuoteStringCharacter:
            InputCharacter but not ', {, } or \
            \ InputCharacter

リテラルはシングルまたはダブルクォートで囲まれます。 ダブルクォートの後に文字列が続いて、ダブルクォートで終わります。 ここで配列はカーディナリティを参照しません。(訳注:意味が、、)

例:

"brown cow"

またはシングルクォートの後に文字列が続いて、シングルクォートで終わります。

例:

'This is so %#@*^ exciting!'

もし文字列が中括弧 ('{' または '}') を含んでいたら、それは文字列表現です。 いくつかの文字はバックスラッシュ文字('\')でエスケープされるでしょう。 これは中括弧、クォート、そしてバックスラッシュを含む場合に役立ちます。 シングルクォートは、ダブルクォートで囲まれた文字列に、エスケープされることなく含まれることに 注意してください。逆もまた同様です。

例:

"Then she said 'shazam', and abruptly left"

文字列はCRやLFを含んではいけません。二つの隣り合った文字列がコンパイル時に自動的に結合されます。 これは複数行の文字列を作成するときに便利です。このように。

def greeting = "Hello "
'there';
println( greeting );

印字結果:

Hello there

文字列リテラルのローカライゼーション

アプリケーションがユーザに何かテキストを表示するとき、あなたはそのテキストをユーザ自身の言語にしたいでしょう。"ローカライゼーション"は、実行時に選択された翻訳により、文字列リテラルを置き換えることができるメカニズムです。

もし二つのシャープ##が文字列リテラルの前に付けられていたら、 JavaFXが適切なローカライゼーションをクラスパス上のJavaFXプロパティファイルに見つけた場合には、 JavaFXは実行時にローカライズされた文字列リテラルに置き換えます。 JavaFXプロパティファイルはローカライズされた文字列を"key" = "value"のペアとして含んでいます。 ローカライズされた文字列は、元の文字列をキー(key)として検索されます。 もしローカライズされない文字列が見つかった場合、元の文字列リテラルがデフォルトとして使われます。 オプションとして、明確なキー(key)を大括弧([ ])で指定できます。

例:

def mon = ##"Monday";
def about = ##[ABOUT]"JavaFX is a cool scripting language!";
println( mon );
println( about );

このスクリプトがFoo.fxで、フランス語用のJavaFXプロパティファイルFoo_fr.fxpropertiesがあるとすると、 次のローカライゼーションを含みます。

"Monday" = "Lundi"
"ABOUT" = "JavaFX est un langage de script cool !"

フランス語での印字結果:

Lundi
JavaFX est un langage de script cool !

より細かい制御をするために階層化されたプロパティファイルを用意することもできます。 例えば、Foo_fr_FR.fxpropertiesにフランス独自のローカライズがなされたテキストを、 そして他のフランス語(独立国)でローカライズされたテキストをFoo_fr.fxpropertiesに保存します。 そうすればJavaFXは、フランスのフランス語のロケール(fr_FR)において、 適切にローカライズされたテキストを次の順序で検索します。

Foo_fr_FR.fxproperties
Foo_fr.fxproperties
(original string)

ロケールとJavaFXプロパティファイルについての詳細は、Javaプラットフォームの java.util.Localeとjava.util.ResourceBundleの両クラスを参照してください。

The encoding of a JavaFX properties file is UTF-8. Other encodings can be specified with the @charset directive. For example:

JavaFXプロパティファイルのエンコードはUTF-8です。他のエンコードは@carsetディレクティブで指定できます。

例:

@charset "ISO-8859-1";

これがJavaFXプロパティファイルの一行目に指定されていれば、ファイルはISO-8859-1で読み込まれます。 もし、文字列リテラルが文字列表現を含んでいるなら、 該当するプロパティは、中括弧({})と表現部分を除いた、文字列表現の書式文字列の部分だけを含むべきです。

def gCal = new GregorianCalendar(1995, Calendar.MAY, 23);
def bday = ##"The birthday of Duke is {%1$tB gCal} {%2$te gCal}, {%3$tY gCal}.";

"bday"のためのローカライズがされたテキストを含むJavaFXプロパティファイルは(例えばフランス語用では) このようになります。

"The birthday of Duke is %1$tB %2$te, %3$tY." = "L'anniversaire du duc est le %2$te %1$tB %3$tY."

これら書式文字列の部分([引数のインデクス]$で示される)は ローカライズされたテキストの中で変更することができます。

Stringの演算

String型の文字列表現についてはの章を参照してください。


Integer

    IntegerLiteral:
            DecimalIntegerLiteral
            HexIntegerLiteral       
            OctalIntegerLiteral

    DecimalIntegerLiteral:
            0
            NonZeroDigit Digitsopt

    Digits:
            Digit
            Digits Digit

    Digit:
            0
            NonZeroDigit

    NonZeroDigit: one of
            1 2 3 4 5 6 7 8 9


    HexIntegerLiteral:
            0 x HexDigits
            0 X HexDigits

    HexDigits:
            HexDigit
            HexDigit HexDigits

    HexDigit: one of
            0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F


    OctalIntegerLiteral:
            0 OctalDigits

    OctalDigits:
            OctalDigit
            OctalDigit OctalDigits

    OctalDigit: one of
            0 1 2 3 4 5 6 7

Integer型は -2147483648 から 2147483647 までの整数を、両端を含めて表します。 Integer型のデフォルト値はゼロ(0)です。

Integer リテラル構文

整数は十進、八進または十六進として表されます。 十進は、1から9までの数字の後に0から9までの数字が続きます。または単に0です。 八進は、0の数字の後に0から7までの数字が続きます。 十六進は、0の数字の後に'x'または'X'が続き、その後に0から9またはAからF(大文字または小文字)が続きます。 次はIntegerのリテラルとしてすべて正しいです。

145
0
012
0xFF

Integerの演算

算術演算子(+, -, *, /, and mod)はIntegerを演算しIntegerを返します。 論理演算子(==, <, >=, etc)はIntegerを演算します。 sizeof演算子はIntegerを返します。


Number

Number型は浮動小数点値を表します。

Integer リテラル構文

NumberLiteral:
      Digits . Digitsopt ExponentPartopt 
      . Digits ExponentPartopt 
      Digits ExponentPartopt 

ExponentPart:
        ExponentIndicator SignedInteger

ExponentIndicator: one of
        e E

SignedInteger:
        Signopt Digits

Sign: one of
        + -

次はNumberのリテラルとして正しいです。

12.3
0.629
3.9e4
1.7662E-34

Numberの演算

算術演算子(+, -, *, /, and mod)はNumberを演算しNumberを返します。 論理演算子(==, <, >=, etc)はNumberを演算します。


Boolean

Boolean型はtrueとfalseの値を表します。

Booleanリテラル構文

   BooleanLiteral: one of
            true false

二つだけのBooleanのリテラル:

true
false

Booleanの演算

not, and そして or演算子はBooleanを演算しBooleanを返します。 論理演算子(==, <, >=, etc)はBooleanを演算します。 if式とwhile式はその状態としてBooleanを利用します。


Duration

Duration型は時間の量を表します。

Durationリテラル構文

    DurationLiteral:
        IntegerLiteral TimeUnit
        NumberLiteral TimeUnit

    TimeUnit: one of
        ms  s  m  h

例:

10s
4ms
0.5h

10sは10秒、4msは4ミリ秒、010mは8分、そして0.5hは一時間の半分です。


Home