値式


図 6.13. 値式

if式 | for式 | new式 | 変数宣言 | 割り当て式


if式

if式は選択的にコードを評価するのに使われます。

図 6.14. if式

'if' '(' 値式 ')' ['then'] 式 ['else' 式]
もしelse部があり、そしてそれらがVoid型でないなら、そのif式は値を持っています。 もし値式がtrueなら、その値は最初のの値になり、そうでなければ二つ目のの値になります。 if式のような型は、とても特有な型で、サブタイプとしての最初のの型と、 サブタイプとしての二つ目のの型も持っています。

var x = if (bip) "Fern" else 2.68;

ここでbipはBoolean変数でなければなりません。もしbipがtrueなら、xの値は"Fern"です。 もしbipがfalseならxの値は2.68です。xの型は、StringとNumberをサブタイプとして持つ、 これ以上具体性のない型としてのObjectです。

もしelse部がないか、またはそれらがVoid型であるなら、 そのif式はVoid型です。

例:

if (temp > 1000) {
   println("Reactor breach!")
}

ここでは、もしtempが1000より大きいときprintlnが実行されるでしょう。


for式

for式は一つ以上の配列を反復します。for式のボディと呼ばれます。 もしボディがVoid型なら、for式はVoidを持ち、そうでなければfor式の値はボディの値からなる配列になります。 図 6.15. for式

'for' '(' in句[,...] ')' 式

図 6.16 in句

書式引数 'in' 値式 { 'where' 値式 }

この例は配列の値を持つ単純なfor式です。

var squares : Integer[] = for (x in [1..10]) x*x;
配列の値は[ 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 ]です。 squaresの型は、説明に役立つように明示的に宣言されていることに注意してください。 型の推論は、その型がInteger[]であることを正しく決定します。

このfor式はVoid型です。そのブロックを単に反復するのに使われます。

for (counter in [1..3]) {
   println( "Help!" );
}
もし複数のin句があったら、一番右のin句が最も内側のループになり、 where句がtrueになるときだけボディが評価されます。
var words = for (length in [3..6], word in ['moose', 'wolf', 'turkey', 'bee'] where word.length() >= length) word;
wordsの値はこのようになります。
[ moose, wolf, turkey, bee, moose, wolf, turkey, moose, turkey, turkey ]
配列のフラット化のせいと、配列にnullを追加できないことから、これは等価です。
var words = for (length in [3..6]) for (word in ['moose', 'wolf', 'turkey', 'bee']) if (word.length() >= length) word else null;


new式

new式はJavaクラスのインスタンスを作るのに使われます。Javaのコンストラクタに引数を与えることができます。 JavaFXクラスのインスタンスを作るのにも使われますが、オブジェクトリテラルが その目的には一般に使われます。

図 6.17. new式

'new' 型名 { '(' 式リスト ')' }

例:

var stream = new java.io.FileInputStream("myBuddies.gif");


Home