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: новый, но необязательный синтаксис