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
q))

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

 


 

Thanks, that helps! 

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

$[1;2;’err]

?[1;2;’err]

Thanks, I tried both of them and seeing the difference between them

q)$[1;2;'err]
2
q)?[1;2;'err]
'err
[0] ?[1;2;'err]