ここではパーレン(Round Bracket)に関する話題を扱います。

パーレンとは?

パーレンとはいわゆる丸括弧のことです。

YoYoGames のドキュメントだと Expressions に演算子関連の扱いが載っていますが、同文章の Summary (まとめ) ではパーレンの利用(中置記法における括弧利用のこと※)がコードの互換性を維持するために重要だと述べられています。

※ 中置記法(ちゅうちきほう) = infix notation
計算における変数や数字の中間に演算子を置く記法のこと。
例: 一と一を足す1 + 1
演算の順序を指定する、計算順序を明確に指定するために括弧を用いる。
1+2^3/4*5+6*7*8*9=3035
1+((2^3)/4)*5+(6*7)*(8*9)=3035

ここから引用 参考 (YoYoGames):Expressions

When doing multiple operations in a single expression, it is very important that you use brackets () to separate out the order of operation, as different platforms may perform them differently if nor explicitly stated in this way.

ここまで引用

単純に Brackets とのみ書かれていますが、正確には Round Brackets であり、日本ではパーレンもしくは丸括弧とか呼ばれています。

GML で利用されるブラケットは主に三種類。

括弧 日本語 名称(英語など)
( ) 丸括弧 or パーレン Round brackets or Parentheses
{ } 波括弧 or ブレース or カーリー Braces or Curly brackets
[ ] 角括弧 or ブラケット Square brackets or Closed brackets


「丸括弧」は複数の計算や比較演算をまとめて一つの式として表現するために利用します。GML では汎用的な計算で計算順序を示すためにも利用されますが、if ステートメントや 関数 でも丸括弧が利用されます。


    var a,b; a=false; b=true;
    var c,d,e; c=100; d=200; e=(c+d)/300;
    if (!a & b & e) show_message_async("Wow!");

丸括弧を使って計算の優先順序を明確にしなくとも問題ない場合の方が多いのですが、GM:Studio はあくまでも一つのソースコードで複数のターゲットへ出力できることが売りの開発ソフトなので、コードの互換性については慎重に評価したほうが安全です。

これは例えば Windows PC 用のコンパイラでは問題無く動いていた処理が、 何か別の出力用モジュールを使ってビルドしたらコンパイラの差が計算の優先順位評価に現れてしまい、計算結果が一致しなくなってしまう可能性について述べられています。

    a = b == c || d;

上記コードは一見すると少し複雑ですが、変数 a へ値を代入するためのステートメントです。

    b == c

ここで bc が等価と表現されているので、実際に等しい場合はブール型(true==1)が a に入る。

    || d

これは || が論理演算子の論理和(OR)なので、式としては bc が等価だったら等価を示すブール値を、等価でないなら d をブール値として a に代入するの意味

この式の安全性を高める書き方は丸括弧を使うのですが、使い方で安全性評価が違ってきます。

    a = (b == c || d); // 良
    a = ((b == c) || d); // とても良い

どのコンパイラでも一番安全なのが丸括弧を二重で使う方法。

等価と論理和の部分は一般的に等価が先に評価されるのですが、これは処理系によって評価する順序が違うので、安全性を高めるためにはまず式全体を丸括弧で括る。次に等価の部分を丸括弧で括る。

これが一番安全となります。

関連:型の不一致


次のページへ

Leave a Reply

Your email address will not be published. Required fields are marked *