条件

条件分岐 の jq

7個の演習

条件分岐について

if式

jqの条件式はif A then B else C endです。

if-then-elseも、jqのほかの組み込みと同じように、ひとつのフィルターです。入力を受け取り、出力を生成します。

式Aが「真」とみなされる値を生成すると、ifフィルターはBを評価します。そうでなければCを評価します。ifフィルターへの入力は、BまたはCに渡されます。

42 | if . < 50 then "small" else "big" end      # => "small"
5 | if . % 2 == 0 then . / 2 else . * 4 end     # => 20
Note

else節は省略できます。次の2つの文は同じ意味です。

if A then B else . end
if A then B end

入れ子のif文

elifを使うと、条件をさらに追加できます。

42 | if . < 33 then "small"
     elif . < 66 then "medium"
     else "big"
     end
# => "medium"

elif節は必要なだけいくつでも使えます。

真とみなされる値

jqで「false」となる値は、falseとnullだけです。それ以外はすべて「true」になります。数値のゼロや、空の文字列・配列・オブジェクトでさえも「true」です。

真偽値演算子

真偽値演算子のandとorを使うと、複雑なクエリを組み立てられます。

42 | if . < 33 or . > 66 then "big or small"
     else "medium"
     end

否定するには、notを使います。これは演算子ではなくフィルターです。

42 | if (. < 33 or . > 66 | not) then "medium"
     else "big or small"
     end

代替演算子

代替演算子を使うと、式がfalseまたはnullだった場合の「デフォルト」の値を指定できます。

A // B

# This is identical to
if A then A else B end

実際に確かめてみましょう。

[3, 5, 18] | add / 2       # => 13
[]         | add / 2       # => error: null (null) and number (2) cannot be divided
[]         | add // 0 / 2  # => 0

ほかにもあるのでしょうか?

ほかの言語から来たプログラマーは、cond、case、switch、when、unless、三項演算子など、より多彩な条件分岐の命令を期待するかもしれません。上に挙げた演算子が、jqにあるすべてです。

GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

条件分岐を学習する

練習はロックされています

条件分岐を練習するには、あと6個の演習のロックを解除してください