`match` is an expression, where as if-else construction is not. This
allows for combining it with a potential future feature of single line
functions and methods. For example (hypothetical syntax is used):

```
function getNumberKind(int $number) => match {
    $number > 0 => NumberKind::POSITIVE,
    $number == 0 => NumberKind::ZERO,
    $number < 0 => NumberKind::NEGATIVE,
}
```

See how natural it looks and reads.

Another improvement is that it reduces the amount of visual clutter
(`if` and `return` keywords).

Yet another distinction between “if” and “match” is their intent. `If`
is more appropriate for the procedural flow. However, when we operate
with pure functions, `match` is a good sign of such function. It shows
that different input values turn into different output values, instead
of different branches of procedural code being executed. Therefore, if
code is intended to be more FP-ish, IMO, `match` is preferred. For the
procedural code patterns, including early returns / throws, `if` is
clearly a better choice.

So, `match` is better suited for functional-ish parts of code, which
do not pose behavior, but only convert one value to another ones. In
the FP world, pattern matching is a widely used feature, allowing to
split computations of output value for different kinds of input value.
The closest thing available in PHP these days is `match (true)`. The
`(true)` part looks ugly and artificial, and removing it is a matter
of a cosmetic change.

Of course, it is possible to use `match` instead of `switch` or `if`s
for procedural code, and vice versa, which is still syntaxically
correct, but bad from an intent expression perspective. This is a
downside of `match` expression as a whole and, IMO, is irrelevant for
this small improvement.

So,
- `match` allows writing clearer code when used with FP-ish intent; it
is also an expression, therefore irreplaceable with if/switch in some
cases.
- pattern matching is a widely used feature in FP, and `match (true)`
is the current way to achieve the most similar thing in PHP.
- improving `match` will not hurt the language allowing to write the
same thing two ways – because it is already done by accepting `match`
RFC itself

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to