If conditions $ vs ?

https://learninghub.kx.com/forums/topic/if-conditions-vs

Sometimes i wonder how the $ differs with ? since most of the times both of them returning the same results. Not sure when to use $ and ?. Help me to understand this guys!

q)$[1b;true;false]
true q)?[1b;true;false] true
q)t:(name:enlist `hi)
q)t
name

hi
q)$[(count t)>0;values;novalues]
values q)?[(count t)>0;values;novalues] values

? can be used in vector-based condition . For example:

?[101b;a;b]
ab`a

$ is used in single condition :
$[1b;a;b]
`a

 


Apart from vector-based condition mentioned above, ? Will always run the fail condition unlike $.

$[1;2;err]
2

?[1;2;err]
'err
[0] ?[1;2;err]