I think the thing you're missing is that in some languages we're allowed to use these constructs
as expressions. Not that they take expressions which is common in modern non-toy languages, but that they themselves
are expressions.
It might be you've just always used languages where you can do this, or that you assumed you can but actually you never tried in a language you use.
In C for example we can't write this:
int x = if (1 == 2) { 3 } else { 4 }; // Not valid C syntax
C provides a special operator, the only one in the language which has three operands and thus it's often just called "the ternary operator" although other ternary operators can technically exist, to achieve the same thing:
int x = (1 == 2) ? 3 : 4; // Valid C syntax using ternary operator
But, how about this?
int x = switch 3 { case 1: 4; case 2: 8; default: 0; }; // Can't do this either
There's no way to express that in C or C++ today. The closest is the "Immediately Invoked Lambda" from C++ which is illustrated nearby in this thread. Barry Revzin apparently proposed a way to do this in C++ 26 because C++ wants to have pattern matching and pattern matching kinda sucks without this feature.