This post is my live blog from KCDC. For more, see the 2021 KCDC live blog TOC
Speaker: Chandra Guntur
Twitter: @cguntur
————————-
Background
- This is part two of a talk. Part 1 covered algebraic types (ex: enums). Don’t need to have seen it for this talk
- Pattern matching came froM SNOBOL (string oriented and symbolic language) in 1960s
- This presentation is in https://github.com/c-guntur/algebraic-in-java
Switch case pattern matching
- case can be type of object. ex: case Integer i -> “int”
- Must put “case null” in order to avoid a null pointer
- Guarded expressions: case Integer i && i < 50
- Can use same pattern variable name across case statements
- Flow scoping
If statement pattern matching
Deconstructing is from JDK 18 preview – https://openjdk.java.net/jeps/405 (preview features can change)
- if (o instanceof Point p)
- if (o instanceof Point(int x, int y) – deconstruct value. Implicitly type safe because null won’t reach branch (null instanceof X is always false)
- if (r instanceOf Rect(Point(var x, var y), var lr) – nested deconstruction
- If have varargs, can match by coordinates/number of elements. Ex Point() matches no params, Point(var a) matches one, Point(var a, …) matches one or more
- For array, if (o instanceof String[] { String s1, … } – one or more elements in array
Pattern matching isn’t new
- Always had instanceof
- Visitor pattern
- Regular expressions
My take
I’m excited Java is going to be adding a lot of this. The format of presenting from inside IntelliJ is interesting. The presentation was short though. Only half an hour. I liked the answer to my question about scope – pretend there is an else block!