Pull to refresh

Comments 17

На данный момент на последний вопрос ответило 25 человек. Это, конечно, сложно назвать репрезентативной выборкой, но то, что количество людей, писавших до Scala на Python и Haskell в сумме больше, чем на Java — для меня сюрприз. Возможно, Одерски не так уж неправ, вводя этот новый синтаксис.

Мне кажется, что хаскелисты просто подписаны на тег Scala (или, скажем так, вероятность того, что хаскелист ткнет на эту статью больше, чем для джависта), поэтому так и получилось.


А вообще, разве не легче всё писать без скобок? Питон доказывает, что вполне себе хорошее решение

У Скалы и до этого были проблемы с синтаксисом (неоднозначная трактовка в зависимости от пробелов и пустых строк), а теперь ещё и спорный синтаксис с отступами будет.

Поддержка Скалы в IDE и редакторах и так отстаёт от других языков из-за сложняков вроде имплицитов, так теперь ещё и авто-форматирование кода пропадает.

«Опциональность» тут вообще выглядит как издевательство. Забыл открывающую фигурную скобку и всё, твой код уже интерпретируется иначе.

Что же касается популярности языка, то синтаксис тут вторичен. Ставка на то чтобы быть better Java сыграла злую шутку. Скала и её сообщество дали миру много замечательных вещей таких как Spark или Kafka. Но потом Скалу отбросили до вторичной роли «языка реализации» и Java опять вышла на передний план.
UFO just landed and posted this here
К сожалению примера, с которым столкнулся на практике, нет под рукой, но вот здесь есть похожий.
UFO just landed and posted this here

Вроде бы есть попытка пофиксить это. Но у меня не завелось. Возможно, в M2, на которой я тестил, этого еще не было.

Пробовал, вроде работало, но мне не понравилось. Среде разработки окончательно сносило крышу. Довольно часто код не становился короче


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 просто для понимания соответствия старого кода и нового.

UFO just landed and posted this here
А можно поинтересоваться о причинах такого перехода? Не ожидал, что такой кейс будет популярен…
UFO just landed and posted this here
Да, хорошо работать в одиночку и самому определять стек. Но ведь тогда и рефакторинг не должен быть слишком сложен? Просто интересно…
UFO just landed and posted this here
Может и есть в этом какой-то смысл, но не для тех, кто перешёл с Явы на Скалу.
У нас в компании попеременно написано 70/30 -> Java/Scala и убрать фигурные скобки, ну крайне сомнительная идея, как по мне.
Хотя в некоторых случаях будет выглядеть интересно и лаконично.
Sign up to leave a comment.

Articles