Comments 17
На данный момент на последний вопрос ответило 25 человек. Это, конечно, сложно назвать репрезентативной выборкой, но то, что количество людей, писавших до Scala на Python и Haskell в сумме больше, чем на Java — для меня сюрприз. Возможно, Одерски не так уж неправ, вводя этот новый синтаксис.
Поддержка Скалы в IDE и редакторах и так отстаёт от других языков из-за сложняков вроде имплицитов, так теперь ещё и авто-форматирование кода пропадает.
«Опциональность» тут вообще выглядит как издевательство. Забыл открывающую фигурную скобку и всё, твой код уже интерпретируется иначе.
Что же касается популярности языка, то синтаксис тут вторичен. Ставка на то чтобы быть better Java сыграла злую шутку. Скала и её сообщество дали миру много замечательных вещей таких как Spark или Kafka. Но потом Скалу отбросили до вторичной роли «языка реализации» и Java опять вышла на передний план.
Пробовал, вроде работало, но мне не понравилось. Среде разработки окончательно сносило крышу. Довольно часто код не становился короче
lst.map(a => a + 1)
lst.map{a =>
a + 1
}vs
lst.map:
a =>
a+1И ещё такие конструкции становится неудобно собирать в цепочку или вкладывать друг в друга.
В итоге я без скобок только небольшое количество конструкций использую:
1) объявления классов и методов (читаемость повышается, закрывающая скобка не нужна)
2) конструкции типа x match:
3) иногда в циклах for, но обычно со скобками лучше
Кстати, на превью пример справа, со старым синтаксисом, выглядит проще, чем пример слева. Замена фигурных скобок на скобки "something ... end something" не выглядит упрощающим чтение улучшением. Теперь нужно сосредотачиваться на этих end, читать их (а вдруг там не end?), тогда как скобки обычно просто воспринимаются в фоне.
Что действительно улучшает читаемость — это отсутствие круглых скобок вокруг условий. Но такой синтаксис совместим и с фигурными скобками, как это сделано в Rust.
Теперь нужно сосредотачиваться на этих end, читать их (а вдруг там не end?), тогда как скобки обычно просто воспринимаются в фоне.
Справедливости ради, по гайдлайну этот пример на картинке нужно переписать как-то так:
package newsyntax:
abstract class C():
def this(x: Int) =
this()
if x > 0 then
var y = x
while y > 0 do
println(y)
y -= 1
else
x match
case 0 => println("0")
case _ =>
end C
end newsyntaxЭто и компактнее и, имхо, читабельнее. На картинке сделано с кучей end просто для понимания соответствия старого кода и нового.
У нас в компании попеременно написано 70/30 -> Java/Scala и убрать фигурные скобки, ну крайне сомнительная идея, как по мне.
Хотя в некоторых случаях будет выглядеть интересно и лаконично.
Scala 3: новый, но необязательный синтаксис