Я был призван на холивар по pattern-matching-у с:
Во-первых, чисто для полноты картины хотел бы упомянуть Scala
Там шаблон-переменная от рантайм-константы синтаксически отличается одним из 3-мя способов:
1) По регистру первой буквы: шаблон начинается с маленькой буквы, константы с большой. По-моему элементарное лексическое правило, не запутаешься
Поэтому, например, в стандартной библиотеке Scala математические константы определены с большой буквы
import math.{Pi, E}
...
number match {
case Pi => ...
...
2) Используя bactick-экранирование
val pi = Pi
E match {
case `pi` => // not this
case _ => // this
}
3) Если константа является полем, можно указать путь
number match {
case this.pi => ....
}
Выглядит довольно просто
Во-вторых, лично я, если честно, в принципе не вижу в этом никакой проблемы
А вот в том, что в Kotlin-е нет pattern-matching-а, вижу с:
Тут дело даже не во вкусах или парадигме
Конструкция сопоставления с образцом
1) Очень выразительна и легко читаема
2) Компилируется значительно эффективнее, чем аналогичные if-else разборы
3) Повышает безопасность программ благодаря exhaustiveness checking
4) К счастью, или сожалению, но для тех же скалистов, например, сопоставление с образцом стало настолько привычной и необходимой операцией, что в язык без этого они не пойдут. И многие новички могут предпочесть Скалу Котлину из подобных соображений. Поймите меня неправильно, я ни в коем случае не разжигаю холивар между сообществами, но с моей точки зрения, не включая в язык подобные инструменты, Вы сознательно ограниваете серьезную часть аудитории, причем какую — в Скалу идут самые дотошные и принципиальные разработчики. С одной стороны, там поэтому жесть как токсично, но с другой, сторонних библиотек несметное множество и их уровень высочайший. И вот по моему мнению это серьезный пункт, угрожающий мечте об одном универсальном языке программирования. Люди по-прежнему будут идти в Скалу, считая ее обладающей более мощными средствами, а Котлин рискует так и остаться языком для Андроида, ака Swift сейчас для IOS.
5) А есть альтернативы? У паттерн-матчинга изъянов множество, но они все известны. И в выборе между ним, и вообще без него, большинство все-таки предпочитает первое (ну судить хоть по тенденции последних лет — Java, C#, C++, Swift все в том или ином объеме движутся в эту сторону).