フロー制御ステートメント

Origin Cは、 if, if-else, switch, for, while, do-while, goto, break, continue を含むANSI Cのすべてのフロー制御をサポートしています。さらに、Origin CはC#のforeachサポートし、オブジェクトのコレクションをループすることができます。

if ステートメント

if ステートメントは、条件分岐に使われ、条件がTrueの場合にステートメントブロックを実行します。 if-else ステートメントは、if ステートメントに似ていますが、if-else ステートメントは、条件の結果がFalseの場合に代替えのステートメントブロックを実行します。

以下は、異なる入力タイプを使った、Origin Cのif ステートメントのサンプルです。

bool bb = true;    // ブール型	
if( bb ) 
{
	out_str("bb is true");
}

int nn = 5;
if( nn )           // 整数型, 0 = false, 非ゼロ = true
{
	out_str("nn not 0");
}

double* pData = NULL;
if( NULL == pData ) // ポインタが NULLの場合チェック
{
	out_str("Pointer pData is NULL");
}

次は、Origin Cのシンプルな if-else ブロックです。ifブロックとelseブロックが中括弧{}で囲まれています。

if( bRet )
{
	out_str("Valid input");      // bRetがtrueのとき
}
else
{
	out_str("INVALID input");    // bRet がfalseのとき
}

ifステートメントが1つのステートメントしか持たない場合、中括弧は任意です。 これは、上記のコードが中括弧無しで書けるということを意味します。

if( bRet )
	out_str("Valid input");      // bRetがtrueのとき
else
	out_str("INVALID input");    // bRetがfalseのとき

switchステートメント

switch ステートメントは、相互に排他的な選択肢によって、異なるステートメントブロックを実行する必要があるときに使われます。

ケースは、昇順の整数で、switch ステートメントに整数の引数で与えられる数値で開始します。 break コマンドは、どのケースでもswitchブロックを抜けます。

switch( nType ) // 条件として整数型の値
{   
case 1:
case 2:
    out_str("Case 1 or 2");
    break;
    
case 3:
    out_str("Case 3");
    // breakキーワードがないとcase 4を実行
    
case 4:
	out_str("Case 4");
	break;
    
default:
    out_str("Other cases");
    break;
}

for ステートメント

for ステートメントは、指定した回数または各要素がインデックスで参照しているデータの配列によって、1つ以上のステートメントを実行するのに使われます。

char str[] = "This is a string";
for( int index = 0; index < strlen(str); index++ )
{
	printf("char at %2d is %c\n", index, str[index]);
}

while ステートメント

Whiledo-whileステートメントは、条件が合致するまでステートメントブロックを実行します。 while ステートメントは、ループの最初に条件を検査し、do-while ステートメントは、ループの最後に条件を検査します。

int count = 0;
while( count < 10 ) // 条件がTrueの場合にステートメントを実行
{
    out_int("count = ", count);
    count++;
}
int count = 0;
do
{
	out_int("count = ", count);
	count++;
} while( count < 10 ); // 条件がTrueの場合にステートメントを実行

ジャンプステートメント

ジャンプステートメントは、関数の範囲内で、無条件に別のステートメントにジャンプ するのに使います。 break, continue, goto ステートメントがジャンプステートメントです。 次のサンプルはこれらのジャンプステートメントを示します。

break

for( int index = 0; index < 10; index++ )
{
	if( pow(index, 2) > 10 )
		break; // ループの終了
	
	out_int("index = ", index);
}

continue

printf("The odd numbers from 1 to 10 are:");
for( int index = 1; index <= 10; index++ )
{
	if( mod(index, 2) == 0 )
		continue; // 次のインデックス
	
	printf("%d\n", index);
}

goto

    out_str("Begin");
    goto Mark1;
		
    out_str("Skipped statement");
	
Mark1:
    out_str("First statement after Mark1");

foreach ステートメント

foreach ステートメントは、オブジェクトのコレクションをループするのに使われます。 次のコードは、プロジェクト内のすべてのページをループし、その名前とタイプを出力します。

foreach(PageBase pg in Project.Pages)
{
    printf("%s is of type %d\n", pg.GetName(), pg.GetType());
}

Origin Cのクラスに基づくすべてのCollectionのリストについては、コレクションのセクションを参照してください。