先行評価(eager evaluation)と短絡評価(short-circuit evaluation)に使いたいので。短絡評価 であれば if - then - else - を代替できる。
確認方法
Power Query
// fxTrace
(message as text, value as function) as any =>
Diagnostics.Trace(
TraceLevel.Information, message, value, true
)
Power Query
// SourceList
{
fxTrace("#1 - false", ()=> 1 = 0),
fxTrace("#2 - true", ()=> 1 > 0),
fxTrace("#3 - false", ()=> 0 = 1)
}
評価結果
すべての list アイテムを評価する
List.AllTrue は妥当だが List.AnyTrue が意外に感じる。先行評価(eager evaluation)用途の関数なのだろう。
List.AllTrue
Power Query
// AllTrue
List.AllTrue(SourceList)
Message |
---|
#1 - false |
#2 - true |
#3 - false |
List.AnyTrue
Power Query
List.AnyTrue(SourceList)
Message |
---|
#1 - false |
#2 - true |
#3 - false |
可能な限りすべての list アイテムを評価しない
短絡評価(short-circuit evaluation)を期待する使用をしたい。
List.Contains
Power Query
List.Contains(SourceList, true)
Message |
---|
#1 - false |
#2 - true |
List.ContainsAll
Power Query
List.ContainsAll(SourceList, {true})
Message |
---|
#1 - false |
#2 - true |
Power Query
List.ContainsAll(SourceList, {true, 0})
Message |
---|
#1 - false |
#2 - true |
#3 - false |
Power Query
List.ContainsAll(SourceList, {true, false})
Message |
---|
#1 - false |
#2 - true |
List.ContainsAny
Power Query
List.ContainsAny(SourceList, {true})
Message |
---|
#1 - false |
#2 - true |
Power Query
List.ContainsAny(SourceList, {true, false})
Message |
---|
#1 - false |
#2 - true |
Power Query
List.ContainsAny(SourceList, {true, 0})
Message |
---|
#1 - false |
#2 - true |
その他