Foundation > Rogue Wave Script 言語リファレンス > ステートメント
 
ステートメント
本セクションは、次のような構成になっています。
*条件ステートメント (if)
*ループ (while、for、for..in、break、continue)
*変数の宣言 (var)
*関数定義 (function、return)
*デフォルト値 (with)
条件ステートメント
条件 (if) ステートメントには、以下の構文があります。
Rogue Wave Script 条件ステートメント構文
構文
効果
if (expression)
  statement1
[ else statement2 ]
を評価します。true の場合、ステートメント1 を実行し、そうでない場合は ステートメント2 が提供されたときに ステートメント2 を実行します。
が非ブール型値を返す場合、この値はconverted to a booleanされます。
例:
  if (a == b) writeln("They are equal")
    else writeln("They are not equal")
  
  if (s.indexOf("a") < 0) {
   write("The string ", s)
   writeln(" doesn't contains the letter a")
  }
ループ
ループ・ステートメントには以下の構文があります。
Rogue Wave Script ループ・ステートメント構文 
構文
効果
while ()
  ステートメント
が true である限り、ステートメントを繰り返し実行します。 ステートメントの各実行の前にテストが行われます。
が非ブール型値を返す場合、この値はconverted to a booleanされます。
例:
  while (a*a < b) a = a+1
  
  while (s.length) {
  r = s.charAt(0)+r
  s = s.substring(1)
  }
for ( [ 初期化 ];
      
[ 条件 ] ;
      
[ 更新 ] )
  ステートメント
条件更新は式、初期化は式または以下の形式です。
var 変数 =
存在する場合に、初期化 を一度評価します。 値は無視されます。 次の形式がある場合:
   var 変数 =
変数がローカル変数として宣言され、変数ステートメント内で初期化されます。
次に、条件が true である限り、ステートメントを繰り返し実行します。 条件が省略されている場合、true とみなされて無限ループになります。 条件が非ブール型値を返す場合、この値はconverted to a booleanされます。
存在する場合、ステートメントの後、条件の前にループを通過するたびに更新が評価されます。 値は無視されます。
例:
  for (var i=0; i < a.length; i++) {
    sum = sum+a[i]
    prod = prod*a[i]
  }
for ([ var ] 変数 in )
ステートメント
の値のプロパティーで反復します。 各プロパティーについて、変数は、このプロパティーを表す文字列に設定され、ステートメントが一度実行されます。
キーワードがある場合、変数は、var statementのようにローカル変数として宣言されます。
たとえば、次の関数では任意の値を取り、すべてのプロパティーとそれらの値を表示します。
  function printProperties(v) {
    for (var p in v)
      writeln(p, " -> ", v[p])
  }
for..in ステートメントによって列挙されるプロパティーには、値がfunction valueの通常のプロパティーであるメソッド・プロパティーが含まれます。 たとえば、呼び出し printProperties("foo") では以下を表示します。
  length -> 3
  toString -> [primitive method toString]
  substring -> [primitive method substring]
  charAt -> [primitive method charAt]
    etc.
arraysの数値プロパティーだけは、for..in ループによって列挙されません。
break
現在の whilefor または for..in ループを終了し、そのループの直後にステートメントの実行を続けます。 このステートメントはループの外では使用できません。
例:
  while (i < a.length) {
    if (a[i] == "foo") {
      foundFoo = true
      break
    }
    i = i+1
  }
  // Execution continues here
continue
現在の whilefor または for..in ループを停止し、次の反復を使ってループの実行を続けます。 このステートメントはループの外では使用できません。
例:
  for (var i=0; i < a.length; i++) {
    if (a[i] < 0) continue
    writeln("A positive number: ", a[i])
  }
変数の宣言
変数の宣言には以下の構文があります。
Rogue Wave Script 変数宣言構文 
構文
効果
var decl1, ..., decln
decli には次の形式があります。
変数 [ = ]
変数をローカル変数として宣言します。 が与えられている場合、その式は評価され、値が変数に初期値として代入されます。 そうでない場合、変数はundefined値に設定されます。
例:
  var x
  var name = "Joe"
  var average = (a+b)/2, sum, message="Hello"
関数定義内の var
関数定義内で var を使う場合、宣言された変数は関数に対してローカルで、それらの変数は同じ名前を持つグローバル変数を隠します。実際に、それらの変数は関数引数と同じステータスを持ちます。
たとえば、次のプログラムにおいて、変数 sum および res は、引数 a および b と同様に、average 関数に対してローカルになります。したがって、average が呼び出されると、同じ名前を持つグローバル変数がある場合、そのグローバル変数は関数が終了するまで一時的に隠されます。
  function average(a, b) {
    var sum = a+b
    var res = sum/2
    return res
  }
関数本体の任意の場所で var を使って宣言された変数には、関数全体の範囲があります。 これは、C または C++ のローカル変数範囲とは異なります。
たとえば、以下の関数で、if ステートメントの最初の分岐で宣言された変数 res は、他の分岐および return ステートメントで使われます。
  function max(x, y) {
    if (x > y) {
      var res = x
    } else {
      res = y
    }
    return res
  }
関数定義外の var
 
var が関数定義の外、つまり関数定義と同じレベルで使われる場合、宣言された変数は現在のプログラム・ユニットに対してローカルになります。 プログラム・ユニットとは、全体とみなされるステートメントのグループです。ただし、プログラム・ユニットの正確な定義は、Rogue Wave Script が組み込まれているアプリケーションによって異なります。 通常、アプリケーションによってロードされたスクリプト・ファイルは、プログラム・ユニットとして扱われます。 この場合、ファイルのトップ・レベルで var を使って宣言された変数は、このファイルに対してローカルになり、それらの変数は同じ名前のグローバル変数をすべて隠します。
たとえば、ファイルに以下のプログラムが含まれる場合を考えてみましょう。
  var count = 0
  
  function NextNumber() {
    count = count+1
    return count
  }
このファイルがロードされると、関数 NextNumber はアプリケーション全体に対して表示可能になります。また、count はロードしたプログラム・ユニットに対してローカルになり、内部のみで表示可能になります。
同じ範囲で同じローカル変数を宣言するとエラーになります。 たとえば、以下のプログラムは、res が 2 回宣言されているため正しくありません。
  function max(x, y) {
    if (x > y) {
        var res = x
    } else {
        var res = y // Error
    }
    return res
  }
関数定義
関数定義には、以下の構文があります。
Rogue Wave Script 関数定義 
構文
効果
[ static ]
function 名前(v1,...,vn)
{
ステートメント }
特定のパラメーターおよび本体を持つ関数の名前を定義します。 関数定義はトップ・レベルのみで実行されるため、関数定義のネストはできません。
関数が呼び出されると、変数 v1、...、vn は対応する引数値に設定されます。 次に、ステートメントが実行されます。 return ステートメントに達すると、関数は特定の値を返します。または、ステートメントが実行された後に、関数は undefined 値を返します。
実際の引数の数とパラメーターの数は一致する必要はありません。 パラメーターよりも引数の方が少ない場合、残りのパラメーターは未定義値に設定されます。パラメーターよりも引数の方が多い場合、余った引数は無視されます。
パラメーターのメカニズムとは無関係に、引数キーワードを使って関数引数を読み出すことができます。
関数の名前の定義は、特定のfunction valueを変数の名前に割り当てるのと操作上同じです。したがって、関数の定義は以下に等しくなります。
     var 名前 = 特定の関数値
関数値は、変数から取得したり、他のタイプの値のように操作することができます。 たとえば、以下のプログラムでは関数 add を定義し、その値を変数 sum に代入します。これにより、addsum は同じ関数の類義語になります。
  function add(a, b) {
    return a+b
  }
  
  sum = add
static キーワードを使わない場合、定義した関数はグローバルで、アプリケーション全体からアクセスすることができます。 static キーワードを使う場合、var キーワードを使って 名前を宣言したときのように、関数は現在のプログラム・ユニットに対してローカルになります。
     var 名前 = 特定の関数値
return [ ]
現在の関数からの値を返します。 が省略されている場合は、undefined値を返します。 return ステートメントは、関数本体のみで使用できます。
デフォルト値
デフォルト値は、以下の構文で使用します。
Rogue Wave Script デフォルト値  
構文
効果
with ()
  ステートメント
を評価してから、デフォルト値として一時的に設定したの値を使ってステートメントを実行します。
ステートメントの識別子の名前の参照を評価する際、この識別子では最初にデフォルト値のプロパティーを検索します。デフォルト値にそのようなプロパティーがない場合、名前は通常の変数として扱われます。
たとえば、以下のプログラムでは、識別子 length が文字列 "abc"length プロパティーとしてみなされるため、"The length is 3 (長さは 3 です)" と表示されます。
  with ("abc") {
    writeln("The length is ", length)
  }
With ステートメントはネストできます。この場合、識別子の参照は、連続するデフォルト値で一番内側から一番外側の with ステートメントに向かって検索されます。

Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.