関数で条件分岐を実装する

関数で条件分岐を実装する

本日は「関数で判定・分岐を実装する方法」について解説します。

デジタル化に欠かせないクラウド自働化において、関数はとても強力なツールです。Integromatのビルトイン関数でロジックを実装すると、実装がコンパクトになるだけでなく、コスト削減にもつながります。

ビルトイン関数は、ExcelやGoogleシートの関数と同じ要領で使えます。よって、PythonやJavaScriptなど、スクリプト言語の経験がなくても問題ありません。

補足:スクリプト言語などの実装経験があると、IntegromatやAirtableの関数が、とても気持ち悪く感じます。ExcelやGoogleシートの関数に慣れている方のほうが、すんなり入っていける気がします。

関数の種類

ロジックをビルトイン関数で実装するために、以下のような関数が用意されています。

  • 一般関数
  • 文字関数
  • 日付関数
  • 数学関数
  • 配列関数

その他、Integromatの実行に関する関数もありますが、ロジックの実装という観点では、上記の関数だけでも相当のことが「プログラミングなしで」実装可能です。

イメージとしては、Excel関数をフローやプロセスとして動かすような実装です。マクロ実行よりもシンプルです。Googleシートをスクリプトで強化するよりもカンタンです。

判定と分岐

ビルトイン関数でロジックを実装するには、判定と分岐を使います。つまり、ある条件を判定して、その結果で分岐させ、結果に応じて異なった処理を継続します。

具体的には、以下のような条件で分岐を実装することが考えられます。

  • タスク実行期限が今日の場合
  • 配列の中身が空だった場合
  • 文章にある文字が含まれる場合

このようなロジックを関数で実装するには、一般関数の「if()」や「ifempty()」もしくは「switch()」などを分岐目的で使います。条件の判定には、日付、文字、数学、配列などを使います。

文字の判定

ここからは、ある文字列にキーワードが含まれていたら… というロジックを関数で実装する例をご紹介します。

判定用の文字列を定義する

上の画像は、検証用のトリガー「Basic trigger」を使って、stringという変数に「日本語が含まれていればオッケーじゃん?」という文字を設定するサンプルです。

この文字を条件判定し、処理を分岐させます。判定の条件は「日本語というキーワードが含まれているかどうか」とします。

if-function.png

今回の場合は、文字の判定です。そこで、関数「if()」に文字関数の「contains()」を組み合わせます。この関数は「キーワードが含まれていたら真、含まれていなかったら偽」を返します。

より見やすく書くと、以下のようになります。

Screenshot 2021-06-18 at 2.14.03 PM.png

一般的なプログラム的に表現すると、以下のようなイメージです。

Screenshot 2021-06-18 at 2.12.50 PM.png

このように、変数を定義するモジュールで条件判定や分岐、配列操作や日付の判定が可能になります。ポイントは、分岐させる一般関数に条件判定用の関数を組み合わせることです。

関数の応用

最後に「関数の使いどころについて」です。今回の文字判定ロジックを例に取ります。

同じ処理をモジュールで実装する場合、ルーターで分岐させ、フィルターで条件を指定します。もしくは、ビルトインのスイッチでケースを複数指定します。どちらも「if, elif, else」と同じ役割を果たします。

モジュール型のメリットは「パッと見、わかりやすい」ことです。デメリットは「シナリオが巨大かつ複雑になる」ことです。後者は運用面でインパクトが大きいです。

関数型のメリットは「シナリオが、ギュッと圧縮される」ことです。デメリットは「ロジックの実装が分散する」ことです。後者は設計センスが問われるポイントです。

(Pythonでいう、関数の引数に関数を渡すようなイメージです)

今回のように、モジュール内で関数による条件分岐を実装すると、オペレーションと呼ばれるモジュールの実行回数は削減され、シナリオ全体の構成がコンパクトになります。

使いどころとしては「分岐後の処理が同じである場合」などです。

具体的には、条件によってメッセージは変えるけれども、Slackに通知する振る舞いは同じ、といったケースです。例えば、以下2つのメッセージがあったとします。

  • データは正常に処理されました
  • データに不備があるので確認してください

データを判定して、出力メッセージだけ変える場合、関数で判定し、分岐してしまったほうが実装がシンプルかつコンパクトになります。

同じ要領で、ルーター分岐をスイッチに置き換えることができます。スイッチ内部でも関数は使えますので、入れ子の条件分岐、ネストされた処理なども可能です。

Screenshot 2021-06-18 at 1.50.48 PM.png

とはいえ、いずれの場合も設計・実装共にシンプルかつコンパクトにしておくことが、運用や拡張の点でも推奨されます。

ノーコードで自動化を!

Integromat日本コミュニティへの参加はこちらから