IMのドキュメント内にある様々な関数をまとめてみる その2

#IM開発備忘録

##IMのドキュメント内にある様々な関数をまとめてみる その2

###関数ボックスの文字列,条件式関数

Formaには関数ボックスなるものが存在し、その中にFormaがサポートする様々な関数が存在する。
それらを駆使することで、比較的簡単にクライアント処理などを作り出すことができる。
バグもほぼない（私は確認したことがない）ので安全かつ高速に使える

その内の文字列関数や条件式関数を以下にまとめる


####concat()

複数の文字列を結合して、１つの文字列として扱います。
「文字列」のフィールド識別ID「text1」に入力値「abc」が設定されているときに、固定の文字列「def」を結合する場合

```js
concat(text1, “def”)
```

画面アイテムには**「abcdef」**と表示されます。



####if(条件)

フィールド識別ID「score」の画面アイテムの入力値が、50以上の値の時は「入力値×3」、50未満の時は「入力値」を表示するという処理を行う場合

```js
if ( score >= “50”, score * 3, score )
```

score * 3　→条件を満たす場合の処理(例の場合は「入力値×3」)
score　→条件を満たさない場合の処理(例の場合は「入力値」)
scoreの入力値が51　→　画面アイテムには**「153」**と表示されます。
scoreの入力値が50　→　画面アイテムには**「150」**と表示されます。
scoreの入力値が49　→　画面アイテムには**「49」**と表示されます。


####and(論理積)

フィールド識別ID「score」の画面アイテムの入力値が、50～100以内の時は「入力値×3」、50～100以内ではない時は「入力値」を表示するという処理を行う場合

```js
if ( and(score <= “100”, score >= “50”), score * 3, score )
```

scoreの入力値が51　→　画面アイテムには**「153」**と表示されます。
scoreの入力値が50　→　画面アイテムには**「150」**と表示されます。
scoreの入力値が49　→　画面アイテムには**「49」**と表示されます。
scoreの入力値が101　→　画面アイテムには**「101」**と表示されます。
scoreの入力値が100　→　画面アイテムには**「300」**と表示されます。
scoreの入力値が99　→　画面アイテムには**「297」**と表示されます。


####or(論理和)

フィールド識別ID「score」の画面アイテムの入力値が、1未満、または100より大きい時は「入力値」、1～100の時は「入力値×3」を表示するという処理を行う場合

```js
if ( or(score < “1”, score > “100”), score, score * 3 )
```
scoreの入力値が0　→　画面アイテムには**「0」**と表示されます。
scoreの入力値が1　→　画面アイテムには**「3」**と表示されます。
scoreの入力値が2　→　画面アイテムには**「6」**と表示されます。
scoreの入力値が101　→　画面アイテムには**「101」**と表示されます。
scoreの入力値が100　→　画面アイテムには**「300」**と表示されます。
scoreの入力値が99　→　画面アイテムには**「297」**と表示されます。


####not(否定)

フィールド識別ID「category」の画面アイテムの入力値が、数値でない時は「入力値」、数値の時は「”aaa”」を表示するという処理を行う場合

```js
if ( not( isNumber( category )), category, “aaa” )
```
categoryの入力値が”shirt”　→　画面アイテムには**「shirt」**と表示されます。
categoryの入力値が123　→　画面アイテムには**「aaa」**と表示されます。


####isNumber(数値の判定)

フィールド識別ID「category」の画面アイテムの入力値が、数値の時は「入力値」、数値以外の時は
「”100A”」を表示するという処理を行う場合

```js
if ( isNumber( category ), category, “100A” )
```
categoryの入力値が123　→　画面アイテムには**「123」**と表示されます。
categoryの入力値が”shirt”　→　画面アイテムには**「100A」**と表示されます。

####sum(合計)

フィールド識別ID「num1」「num2」「num3」の３つの画面アイテムの入力値を合算する場合

```js
sum(num1, num2, num3)
```
num1に”1”、num2に”3”、num3に”5”を入力した場合→ 画面アイテムには「9」と表示されます。
以下の明細テーブルの列B(フィールド識別IDは「col_B」)を合計する場合

|列A|列B|
|:----|:-----|
|いちご|  	300|
|レモン|  	150|
|ぶどう | 	500|
|もも|     	250|

```js
sum( @col_B )
```
結果：**1200**


####avg(平均)

フィールド識別ID「num1」「num2」「num3」の３つの画面アイテムの入力値の平均を計算する場合

```js
avg(num1, num2, num3)
```

num1に”1”、num2に”3”、num3に”5”を入力した場合→ 画面アイテムには**「3」**と表示されます。

####max(最大値)

フィールド識別ID「num1」「num2」「num3」の３つの画面アイテムの入力値の最大値を求める場合

```js
max(num1, num2, num3)
```
num1に”1”、num2に”3”、num3に”5”を入力した場合→ 画面アイテムには**「5」**と表示されます。


####min(最小値)

フィールド識別ID「num1」「num2」「num3」の３つの画面アイテムの入力値の最小値を求める場合

```js
min(num1, num2, num3)
```
num1に”1”、num2に”3”、num3に”5”を入力した場合→ 画面アイテムには**「1」**と表示されます。


####round(四捨五入)

フィールド識別ID「num」の画面アイテムの入力値を四捨五入する場合

```js
round(num, 2)
```

numに”123.456”を入力した場合→ 画面アイテムには**「123.46」**(小数点以下第3位を四捨五入)と表示されます。

```js
round(num, -3)
```

numに”1234567”を入力した場合→ アイテムには**「1235000」**(100の位を四捨五入)と表示されます。


####roundup(切り上げ)

フィールド識別ID「num」の画面アイテムの入力値を切り上げする場合

```js

roundup(num, 2)
```

numに”123.456”を入力した場合→ 画面アイテムには**「123.46」**(小数点以下第3位を切り上げ)と表示されます。

```js

roundup(num, -3)
```

numに”1234567”を入力した場合→ 画面アイテムには**「1235000」**(100の位を切り上げ)と表示されます。


####rounddown(切り捨て)

フィールド識別ID「num」の画面アイテムの入力値を切り捨てする場合

```js
rounddown(num, 2)
```
numに”123.456”を入力した場合→ 画面アイテムには**「123.45」**(小数点以下第3位を切り捨て)と表示されます。

```js
rounddown(num, -3)
```

numに”1234567”を入力した場合→ 画面アイテムには**「1234000」**(100の位を切り捨て)と表示されます。



###他の記事

IMのドキュメント内にある様々なAPIをまとめてみる その１
https://qiita.com/ChrisKasahara/items/c3187249112e7114aa12

IMのドキュメント内にある様々なAPIをまとめてみる その２
https://qiita.com/ChrisKasahara/items/ac038ce0b704574ada16

IMのドキュメント内にある様々なAPIをまとめてみる その３
https://qiita.com/ChrisKasahara/items/b2b5724af834b85d6269