皆もすなるQiitaといふものを、儂もしてみむとてするなり。
と言う訳で、こん**は!はなっち!です。
複数の条件評価
先日、「UiPath:比較(.CompareTo()メソッド)の話」を上梓した訳ですか、要件に因っては複数の条件で評価する仕様が出てきますね。例えば、「本日が、1Qだったら...」「本日が、下半期だったら...」と言う具合。
その手順としては、1)1Qの自至を求め、2)本日がその間にあるかを評価する と言う具合ですね。
1Qの自 <= 本日 <= 1Qの至
これを、UiPathの「条件分岐」アクティビティで実現するには、
こんな感じ。実際には1Qの自とか、至は変数にしているでしょうけど。。。
「条件分岐」アクティビティのConditionの記載は、以下の通り。
Not 本日.CompareTo(New DateTime(2020,4,1)).Equals(-1) And
Not 本日.CompareTo(New DateTime(2020,6,30)).Equals(1)
さて、先の「本日がその間にあるかを評価する」条件式は、
1Qの自 <= 本日 <= 1Qの至
だったのですが、UiPathの「条件分岐」アクティビティでは、
1Qの自 <= 本日 And 本日 <= 1Qの至
のように、「1Qの自 <= 本日」と「本日 <= 1Qの至」をAnd演算子で結んでいます。
ご存知のように、
And演算子は、「And」で結んだ左側の条件と右側の条件が双方Trueなら、評価結果はTrueとなり、
Or演算子は、「Or」で結んだ左側の条件と右側の条件がどちらかがTrueなら、評価結果はTrueとなります。
評価のタイミング
And演算子で話を進めます。
例えば、以下のようなロジックがあった場合、どんな動きになるでしょうか?
変数:文字列型に"KOZAKI"が設定されているので、Falseとなって、Else側ロジックを処理すると思われるでしょうが、実際には異常終了します。
これは、「And」で結んだ右側の条件で参照している変数:DataTable型がNullであった為ですね。
こんな場合でも、「And」で結んだ左側の条件の評価がFalseなので、Else側ロジックを処理してもいいではないか!と思うのが人の常と言うものです。
実は、UiPathと言うか、.Netにはそんな人の常を知ってか知らずか、AndAlso演算子と言うのがあります。(参照:AndAlso 演算子 (Visual Basic))
やってみましょう!
先ほどのロジックと同様に、変数:文字列型に"KOZAKI"が設定だけ行い、「条件分岐」アクティビティのCondition中の「And」を「AndAlso」に書き換えます。
このロジックで実行すると、
となり、「And」で結んだ左側の条件の評価がFalseなのでそのままElse側ロジックを処理していきました。ちょっとElse側ロジックで表示するメッセージが変な気もしますが、気にしない気にしない!
AndAlso演算子があるのなら...
AndAlso演算子があるのなら、Or演算子にも似たものがあるのでは?と思われた方!ご安心ください!あります!OeElse演算子と言うのがちゃんとあります。(参照:OrElse 演算子 (Visual Basic))
詳しくは、[UiPath][.NET]And/OrとAndAlso/OrElseの違い
(@cheez_RPAさん著)をご覧ください!
って、既にQiitaされていたんかぁ~~い!
おわりに
いかがでした?
And演算子は双方同じタイミングで評価し、AndAlso演算子は左から順に評価していく事がお分かりいただけたでしょうか?
実際のUiPathでのワークフロー作成では、DataTable型がNullである状態を見越して使うなんて事はありません。各条件で、Falseとなる確率が高い順に左からAndAlso演算子で記述していきますね。そうすると評価に掛かるコストが若干減るわけですが、まぁ、そこまで厳密に考慮する位だったら、他の要因の安定稼動要素をチェック検証していった方がいいですね。とは言え、こういう演算子があるという事を覚えていても損は無いはず!
是非UiPathでのロボ開発の一助になればと思っています。
ありがとうございました!