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
بند else اختیاری است؛ دو دستور زیر معادل هم هستند.
if A then B else . end
if A then B end
میتوان شرطهای بیشتری را با elif اضافه کرد.
42 | if . < 33 then "small"
elif . < 66 then "medium"
else "big"
end
# => "medium"
هر تعداد بند elif را که لازم دارید به کار ببرید.
تنها مقادیر «غلط» در jq اینها هستند: false و null.
همهی مقادیر دیگر «درست» هستند، حتی عدد صفر و رشتهی خالی، آرایهی خالی و شیء خالی.
از عملگرهای منطقی 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
عملگر جایگزین به شما امکان میدهد اگر یک عبارت غلط یا 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 ارائه میدهد هستند.