Would the kotlin equivalent just be:
val dateRegex = Regex("""(\d{4})-(\d{2})-(\d{2})""")
val (year, _, _) = dateRegex.matchEntire("2004-01-20")!!.destructured
println("$year was a good year for PLs.")
?
The Scala snippet works for all inputs, it's something you would see on a real codebase. It also scopes the regex captures within the match expression. The code also scales better for more complex cases where a string is tested against multiple regexes, or against specific captured values.
I assume this Kotlin snippet would, at minimum, need to do null-checking on "matchEntire" before it finds its way to a production codebase.
This is my problem with Scala. Too many fancy things hidden behind text with no meaning. Why the hell is this ‘r’ instead of something with a name that has meaning like toRegex?
It's a convenience method for a specific case where the result is already obvious, because it's called on a string literal that already looks like a regex. Any competent Scala dev reviewer would reject code that uses the "r" method on a variable.
If you want a more verbose option, you can import the Regex type and write:
val date = Regex(raw"(\d{4})-(\d{2})-(\d{2})")
And of course, explicit type declarations can further document the code.