2014年2月27日木曜日

連載:ちょっとディープなXPages LotusScript vs JavaScript 演算子

赤字で補足・修正しています。

みなさん!XPages開発していますか!?

前回JavaScriptは一旦やめて~みたいなこと行っておきながら、やっぱりJavaScriptです。

とはいえ、これまではJavaScriptのちょっと高度な使い方だったんですが、今回からはこれまでNotes/Domino開発を行ってきた人向けに、これまでとXPagesとの違いを比較しながら進めていきたいと思います。

これまでのNotes開発では、@式やLotusScriptでコーディングしてきました。XPagesになってほぼJavaScriptオンリーになって、戸惑う方も多いでしょう。フォームWebでもクライアントJavaScript書きますけど、ガッツリ書くことはあまりなかったでしょうし。

そこでまずは、LotsuScript VS JavaScript と題してこれらの比較を何回かに渡って説明していきたいと思います。

VS といっても優劣を比べるわけではないので、あしからず。

演算子

四則演算子

  LotsuScript JavaScript
加算 + +
減算 - -
乗算 * *
除算 / /
剰余 mod %
整数除算 \ (なし)

乗除について、何も変わらないですね。(文字連結については違いが有ります。後述しています。)

剰余については、"mod" が "%" になります。

整数除算については、JavaScriptにはありません。LotusScriptの整数除算は式を処理する前に両方の数値と、結果が少数切り捨てで整数に丸められるので、JavaScriptではMath.floor()関数を使用して変換する必要があります。


//整数除算の例

var a = 2.5,

    b = 9.2,

    c = Math.floor(Math.floor(b) / Math.floor(a));

print(c); // 4

インクリメント・デクリメント演算子

これは数値に1を加算または除算するためのものです。これはLotusScriptには無いですね。

  LotsuScript JavaScript
1を加算 (なし) a++
++a
1を減算 (なし) a--
--a

++や--が前につくのと後に着く物がありますが、どちらもaに1を加減するのには変わりないですが、計算されるタイミングが異なるので、注意が必要です。

演算子が前についた時は、その行を処理する前に加減され、演算子が後につくとその行が処理された後に加減されます。


var a = 0;

var b = ++a;

print(a); // 1

print(b); // 1

a = 0;

var c = a++;

print(a); // 1

print(c); // 0 <--注意!

べき乗

LotusScriptには、"^"があるんですが、JavaScriptにはありません。JavaScriptでは累乗を Math.pow() の関数があるので、それを利用します。

  LotsuScript JavaScript
べき乗 ^ (なし。ビルドイン関数"Math.pow(基数, 指数)"を使う。)

文字列結合

  LotsuScript JavaScript
文字列結合 & +

LotusScriptでは、"&"を使って結合しますが、JavaScriptでは数値の加算と同じ"+"を使用します。

演算子の左右の方が、数値,文字のように異なっている場合は、文字に変換されるので注意が必要です。


var a = 1,

    b = "1",

    c = a + b,

    d = b + a;

print(c); // "11"

print(d); // "11"

// 演算子の右左に関係なく文字に変換される

比較演算子

  LotsuScript JavaScript
等価 = ==, === (厳密)
不等価 <> !=, !== (厳密)
未満・より大きい <
>
<
>
以下・以上 <=,=<
>=,=>
<=
>=

JavaScriptでは、等価・不等価は"==","===","!=","!=="を使用します。うっかり"="を使用すると「代入」の意味になり、比較結果として"true"になってしまいますので、注意が必要です。

また、"=="と"===", "!="と"!=="の違いは、左右の値の方が違う場合、"==","!="は自動的に数値に変換して比較しますが、"===","!=="は型変換せずに比較します。


print( 1 == "1"); // true

print( 1 === "1"); // false

print( 1 != "1"); // false

print( 1 !== "1"); // true

「以上」「以下」はJavaScript LotusScript では"<=","=<"(">=","=>")どちらでもOKでしたが、JavaScriptでは"<="(">=")しか使用できません。

代入演算子の短縮表記

これもJavaScriptにしか無いものですね。変数自身に値を代入することができます。

数値のみではなく、文字列結合にも使えます。


var a = 1;

a += 2; // a = a + 2 と等価

print(a); // 3

a -= 4; // a = a - 3 と等価

print(a); // -1

a *= 3; // a = a * 3 と等価

print(a); // -3

a /= -3; // a = a / -3 と等価

print(a); // 1

var b = "hoge";

b += "hoga"; // b = b + "hoga" と等価

print(b); // hogehoga

条件演算子

これもJavaScriptにしか無いものです。

if の条件文と同様な意味がありますが、値を返す式になります。

(条件式) ? (trueの場合の値) : (falseの場合の値) という形になります。


var a = 1,

    b;

b = a === 1 ? "hoge" : "hoga";

print(b); // "hoge"

論理演算子

  LotsuScript JavaScript
論理And And &&
論理OR Or ||
否定 Not !

JavaScriptで"&&","||"を"&","|"としてしまうと、ビット演算子になるので注意です。

最後に

JavaScriptの演算子はまだ他にありますが、今回はよく使う演算子のみに絞って紹介しました。

次回は、文字列に関する関数についてLotusScriptと比較をしてみます。

海老原 賢次(EBIHARA Kenji)

リコーITソリューションズ株式会社(RICOH IT SOLUTIONS CO.,LTD.)

鹿児島ソリューション部(Kagoshima Department)

 

0 件のコメント:

コメントを投稿