powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Scala
94 сообщений из 94, показаны все 4 страниц
Scala
    #39446913
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вчера не мог уснуть и решил почитать про эту Scala.
Просмотрел несколько разных статей на тему "Почему скала в овер100500 раз удобнее чем ява" и, честно говоря, так и не понял.
- Ну можно какие-то моменты более кратко выразить в коде, но это какой-то сомнительный плюс.
- Функциональное программирование - действительно ли оно нужно?..
- Как понял там постоянные проблемы с обратной совместимостью (старые либы не работают на новых версиях скалы, иногда... можно прикрутить либы написанные на яве, но там, говорят, пляски с бубнами)

Подытожив все прочитанное вчера (а мыслей было на много больше чем я тут написал, что-то уж из головы все вылетело) - пришел к выводу, что это скорее инструмент фанатиков, помешанных на "идеальном коде", которые больше времени теоретизируют.

Что скажете?
...
Рейтинг: 0 / 0
Scala
    #39446926
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Толсто
...
Рейтинг: 0 / 0
Scala
    #39446939
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettВот вчера не мог уснуть и решил почитать про эту Scala.
Просмотрел несколько разных статей на тему "Почему скала в овер100500 раз удобнее чем ява" и, честно говоря, так и не понял.
- Ну можно какие-то моменты более кратко выразить в коде, но это какой-то сомнительный плюс.
- Функциональное программирование - действительно ли оно нужно?..
- Как понял там постоянные проблемы с обратной совместимостью (старые либы не работают на новых версиях скалы, иногда... можно прикрутить либы написанные на яве, но там, говорят, пляски с бубнами)

Подытожив все прочитанное вчера (а мыслей было на много больше чем я тут написал, что-то уж из головы все вылетело) - пришел к выводу, что это скорее инструмент фанатиков, помешанных на "идеальном коде", которые больше времени теоретизируют.

Что скажете?

Бери kotlin. Лучше совместимость с java, проще синтаксис, быстрее компиляция.

А плюсы... Вот что я вижу в kotlin (в принципе в scala так же):
- ООП проще потому, что не надо писать лишних букв- оно само. При этом чем стандартнее код- тем он короче;
- ФП проще потому, что синтаксис лучше подходит (val x: Int = 3 гораздо лучше ложится в лямбды чем final int x = 3);
- для скриптом не надо тащить groovy- всё четь
- можно компилировать в javascript легко
- можно компилировать в native (пока бэта, но уже немного работает)- хорошо для утилит, для скриптов (чтобы sh не писать).

В целом- приятно.

А нужность ФП- есть некоторые (!) вещи, которые порще выражать в виде функциональщины.
...
Рейтинг: 0 / 0
Scala
    #39446951
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФП реально нужно. Благодаря лямбдам решение многих моих насущных задач упростилось в разы.
А про скалу поздно уже обмусоливать. Сейчас не найду, но видел год-два назад несколько толковых статей по этому вопросу.
Основные плюсы и минусы давно известны. Помимо указаных сложностей с совместимостью есть проблема долгой компиляции и IDE поддержка хромает. Для бизнеса актуальна и проблема кадров. Порог входа в язык ещё выше. А рынок и так голодает от недостатка квалифицированных разрабов.
Но учить скалу есть смысл в любом случае для расширения кругозора.
...
Рейтинг: 0 / 0
Scala
    #39447019
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettВот вчера не мог уснуть и решил почитать про эту Scala.

Что скажете?

Читать не надо, надо писать. ;-)
Попробуйте что-нибудь сделать на Scala тогда ваше мнение о нем сложится более точнее.

А так вроде бы Scala была модна в BigData, но как сейчас не знаю.
...
Рейтинг: 0 / 0
Scala
    #39447021
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett- Функциональное программирование - действительно ли оно нужно?Конечно! И самое главное - после появления "лямбЪдЪ" в Java 8 популярность Scala резко снизилась.
IMHO
...
Рейтинг: 0 / 0
Scala
    #39447050
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettПросмотрел несколько разных статей на тему "Почему скала в овер100500 раз удобнее чем ява" и, честно говоря, так и не понял.

Чего непонятного. У любой дряни есть свои фанаты. Их аргументы только для них и имеют смысл.

пришел к выводу, что это скорее инструмент фанатиков, помешанных на "идеальном коде", которые больше времени теоретизируют.

Действительно, Scala изобрёл не программист, а некий швейцарский профессор. Если бы он угадал, что нужно программистам, то язык мог бы стать популярным, но он не угадал. Это обычная проблема при изобретении языков.


Alexey Tomin.
Бери kotlin. Лучше совместимость с java, проще синтаксис, быстрее компиляция.

Возьмём Kotlin. Этот язык - маргинальный даже по сравнению со Scala, поэтому лучше подходит для фанатствования.
...
Рейтинг: 0 / 0
Scala
    #39447159
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У scala мощней система типов, больше уровень абстракции. Можно писать более короткие программы, но и порог вхождения больше.
...
Рейтинг: 0 / 0
Scala
    #39447175
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MHettПросмотрел несколько разных статей на тему "Почему скала в овер100500 раз удобнее чем ява" и, честно говоря, так и не понял.

Чего непонятного. У любой дряни есть свои фанаты. Их аргументы только для них и имеют смысл.

пришел к выводу, что это скорее инструмент фанатиков, помешанных на "идеальном коде", которые больше времени теоретизируют.

Действительно, Scala изобрёл не программист, а некий швейцарский профессор. Если бы он угадал, что нужно программистам, то язык мог бы стать популярным, но он не угадал. Это обычная проблема при изобретении языков.


Можно было написать проще - не осилил.

Порог входа действительно выше и именно поэтому scala врядли станет промышленным стандартом, но в области BigData и Machine Learning это мейнстрим в данный момент и не просто так. В принципе соглашусь с Blazkowicz , все грамотно расписано. Учить надо для самообразования, еще и Clojure заодно:) Да, сначала будет трудноЮ будет ломать, но в итоге ваш уровень как программиста вырастет на порядок.
...
Рейтинг: 0 / 0
Scala
    #39447318
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всегда полезно хотя бы ознакомится. Но особого распространения Scala не получит. Функциональные языки всегда страдали от того, что на них слишком много мозговой энергии надо тратить. Большинство задач прекрасно можно решить обычными средствами. Лямбды прекрасно добавляются к обычным, императивным языкам.
Зато у людей возникает резонный вопрос - на фига ли так мучится, если задача этого не требует.
...
Рейтинг: 0 / 0
Scala
    #39447324
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеВсегда полезно хотя бы ознакомится. Но особого распространения Scala не получит. Функциональные языки всегда страдали от того, что на них слишком много мозговой энергии надо тратить. Большинство задач прекрасно можно решить обычными средствами. Лямбды прекрасно добавляются к обычным, императивным языкам.
Зато у людей возникает резонный вопрос - на фига ли так мучится, если задача этого не требует.
Scala же, вроде, не чисто функциональная? Там не нужно мучатся.
...
Рейтинг: 0 / 0
Scala
    #39447332
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczScala же, вроде, не чисто функциональная? Там не нужно мучатся.
чтобы ТС после и про функциональные не спрашивал).
Ответы не изменятся).
...
Рейтинг: 0 / 0
Scala
    #39447344
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЩичеВсегда полезно хотя бы ознакомится. Но особого распространения Scala не получит. Функциональные языки всегда страдали от того, что на них слишком много мозговой энергии надо тратить. Большинство задач прекрасно можно решить обычными средствами. Лямбды прекрасно добавляются к обычным, императивным языкам.
Зато у людей возникает резонный вопрос - на фига ли так мучится, если задача этого не требует.
Scala же, вроде, не чисто функциональная? Там не нужно мучатся.

Наверное он имел в виду, что Scala - не процедурный ЯП.
...
Рейтинг: 0 / 0
Scala
    #39447348
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЩичеВсегда полезно хотя бы ознакомится. Но особого распространения Scala не получит. Функциональные языки всегда страдали от того, что на них слишком много мозговой энергии надо тратить. Большинство задач прекрасно можно решить обычными средствами. Лямбды прекрасно добавляются к обычным, императивным языкам.
Зато у людей возникает резонный вопрос - на фига ли так мучится, если задача этого не требует.
Вопрос привычки опять же. Чтобы въехать надо минимум полгода плотно сесть за туториалы и кодить проект, не каждый конечно себе это может позволить. До того как я узнал скалу, я не предполагал что if\else statements могут так раздражать, как и мутабельные переменные.
...
Рейтинг: 0 / 0
Scala
    #39447353
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, но мякотка как раз в функциональном стиле. И кроме того, если вы уж решили на ней работать, то на собеседовании спросят, а потом и применять надо будет.
...
Рейтинг: 0 / 0
Scala
    #39447355
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник Вопрос привычки опять же. Чтобы въехать надо минимум полгода плотно сесть за туториалы и кодить проект, не каждый конечно себе это может позволить. До того как я узнал скалу, я не предполагал что if\else statements могут так раздражать, как и мутабельные переменные.

В том и дело. Сначала надо капитально заняться, а потом и выяснится - надо реально это или нет. Не в абстрактном вакууме, а конкретно тебе.
...
Рейтинг: 0 / 0
Scala
    #39448065
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разговор слепых с глухими. Одни говорят что функциональность вообще не нужна, другие что нужна но сложна. Есть еще вариант - то что функциональность сложна в скале вовсе не значит что функциональность сложна в принципе. Скала неудачный язык и функциональность там сделана неудобно, да и все остальное тоже.
...
Рейтинг: 0 / 0
Scala
    #39448068
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
list.map((x) => x^2)

Или иммутабельность

map = map.put('key', 'value')



Где вы тут сложность увидели?
...
Рейтинг: 0 / 0
Scala
    #39448070
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если кому невтерпеж то на coursera опять цикл по скале из 5 курсов от него самого, проффэсора
с 8 мая
...
Рейтинг: 0 / 0
Scala
    #39448072
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скала умудрилась сделать простые и компактные функциональные вещи сложными и неудобными. Скала вобщем-то была-бы неплохим языком если-бы оттуда выкинуть большую часть того что там есть. А так - какая-то жуткая мешанина из надерганных и перекрученных концепций которая в итоге оказалась даже еще хуже чем жава.
...
Рейтинг: 0 / 0
Scala
    #39448075
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только и слышишь - функтор, монада. Ладно-бы толк был, а то скалисты обычно там где можно 3 строчки написать городят полстраницы. И потом даже когда отказываются в итоге от скалы и переходят на жава - перетягивают туда свои привычнки и начинаю городитеь еще большее месиво чем обычная жава лапша.
...
Рейтинг: 0 / 0
Scala
    #39448152
it_andrei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В скале нет ничего сложного, если сразу не лезть в дебри.

Можно начать программировать в стиле java, даже точки с запятой можно оставить в конце выражений.
И постепенно осваиваться.
Для понимания функционального подхода в скале советую изучить хаскель, хотя какие-то приёмы конечно можно понять и без этого.
Хаскель - чистый функциональный язык, без всякого ООП и прочих "фабрик фабрик". Синтаксис простой, за счёт чего легко понимается вся идея функционального программирования.

На счёт монад.
Для начала, вам не обязательно знать, что List, Option, Either - монады. Достаточно знать какие методы для них существуют, а для этого необходимо запустить REPL (интерактивный интерпретатор).
Для хаскеля рекомендую "Learn You a Haskell for Great Good!", для скалы ресурсов много, можно начать с документации на официальном сайте.


P.S. Меня больше раздражают не монада и функтор, а то, что зайти на форум можно только залогинившись на главной странице.
...
Рейтинг: 0 / 0
Scala
    #39448267
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
llemingесли кому невтерпеж то на coursera опять цикл по скале из 5 курсов от него самого, проффэсора
с 8 мая
Для общего развития не повредит, конечно.Только курсов на самом деле 4. 5 - это типа курсовая/диплом.

Одерски по скале ведет там только 2 курса из 4. Остальные (параллельное программирование и апач спарк) к скале имеют весьма опосредованное отношение.
...
Рейтинг: 0 / 0
Scala
    #39449069
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,
в общем, у меня возникли те же чувства, что и у вас. Некоторые кроме чувств приводят весомые аргументы: http://www.mapdb.org/blog/scala_has_weakly_typed_syntax/
Но понимать тексты на Scala весьма выгодно в плане зарплаты.
...
Рейтинг: 0 / 0
Scala
    #39449135
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqв общем, у меня возникли те же чувства, что и у вас
не прошло и 2-3 года, как сабж из восторженного чувства превратился в никому ненужный хлам ( утрирую ).
Всё быстро в мире IT )).
...
Рейтинг: 0 / 0
Scala
    #39449278
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfqHett,
в общем, у меня возникли те же чувства, что и у вас. Некоторые кроме чувств приводят весомые аргументы: http://www.mapdb.org/blog/scala_has_weakly_typed_syntax/
Но понимать тексты на Scala весьма выгодно в плане зарплаты.

Лол, автор путает by-name параметры и лямбды, о чем тут можно говорить... А аргументы в стиле

Код: java
1.
2.
map
  put(3,"two") 



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

Да, scala сложна, но не настолько как рисуют оналитеги типо этого. Она нашла свою нишу в bigdata, где по факту не нужна никакая магия, а просто функциональные коллекции, которые на голову выше чем в java.
...
Рейтинг: 0 / 0
Scala
    #39449485
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Можно начать программировать в стиле java, даже точки с запятой можно оставить в конце выражений.
> И постепенно осваиваться.

Я думаю это один из самых больших недостатков Скалы. Правильный подход - ломать практики Java поскольку они плохо ложаться на функциональное и "легковесное" программирование. А Скала позволяет писать Жава код, Куча скалистов - это бывшие жависты, продолжающие писать свою Жава лапшу. В итоге - все библиотеки и экосистема языка забита низкокачественными проектами в стиле Жава.
...
Рейтинг: 0 / 0
Scala
    #39449833
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прежде всего, зачем вам читать эту простыню: я прогал 8 лет на джаве, я сижу 3 года на скале и возвращаться не собираюсь. Это как возвращаться на паскаль с С++.

говоря субъективно, на scala надо писать, т.к. я не знаю ни одного человека, который вернулся бы обратно на java после хотя бы полугода разработки.

говоря объективно:

- scala как процедурно-объектный язык мощнее джавы по дизайну. В ней удобнее использовать лямбды, она обладает намного более мощным аналогом switch (pattern matching), её коллекции изначально заточены под операции, которые в джаве доступны только через стримы или внешнюю либу типа гуавы, в ней более гибкие упрощающие инкапсуляцию области видимости и т.д. и т.п.

- scala/sbt как среда сборки пропагандирует современный подход к разработке с автоматической рекомипляцией/быстрым рестартом приложения. Идеологию Play framework следовало бы почитать всем разработчикам для JVM.

- scala как технология представляет собой идеологию и набор библиотек для разработки эффективного асинхронного кода. Scala future, Akka, Finagle.

- scala как функциональный язык позволяет перетянуть больше парадигм ФП в промышленное применение. В основном это касается стандартных монад (Option, Future, Either) и их композиции. Продвинутые темы, такие как монадные трансформеры, свободные монады, абстрактные типы и типонезависимый код всё еще на стадии эксперимента - нет 100% уверенности, что это упрощает разработку, а не наоборот

И минусы:

- нормальных учебников для новичков просто нет. Все книжки, которые я видел, быстро закапываются в сложности, что отпугивает многих.

- scala компилируется значительно медленнее, чем java. В ФП-проектах время компиляции становится сравнимым с С++.

- 100% надежной поддержки в IDE пока нет. Ситуация похожа на С++ в начале века - простой код обрабатывался IDE хорошо, но шаблоны посложнее сводили с ума анализатор.

- минус, он же плюс: отладчик в скале малополезен. Из-за обилия лямбд проще переписать код так, чтобы в нем гарантированно не было ошибок, чем ставить точки останова.
...
Рейтинг: 0 / 0
Scala
    #39449842
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettПодытожив все прочитанное вчера (а мыслей было на много больше чем я тут написал, что-то уж из головы все вылетело) - пришел к выводу, что это скорее инструмент фанатиков, помешанных на "идеальном коде", которые больше времени теоретизируют.

Что скажете?
Кину 5 копеек.

Языки программирования создают не боги и не небожители. А обычные инженеры (зачастую). Языки
становятся на долгие десятилетия стандартом общения между программистом и имплементацией.
Как следствие. Ошибки или недостатки которые заложил создатель мы тащим долгие годы.
Почему Джеймс Гослинг не заложил в java парадигму беззнаковой арифметики. Ведь процессоры
прекрасно это поддерживали? Почему в первых версиях не было типа enum, не было generics,
и не было семантики строкового аргумента внутри switch? Почему API сразу не поддержал
out.printf, а потребовалось несколько лет чтобы осознать что это реально практично и полезно?
Почему строки нужно сравнивать только через equals() а не через более короткий binary operator?
Почему нельзя перегрузить + для сложения матриц и векторов? В какой-такой концепции ООП
записано что этого делать нельзя? И такой поток "почему" у меня - бесконечен.

И с другой стороны. Мартин Одерский. Профессор. Да еще и специализируется на ЯЗЫКАХ.
Этот человек знает всё о всех парадигмах. Он не стал размениваться на мелочи.
Он заложил в Scala ВСЕ-ВСЕ языковые парадигмы которые только существуют.
Серъезно! Там только чорта в ступе не хватает. И если вы однажды (с похмелья)
вдруг решили создать свой язык или DSL или скриптик .. то замрите (!) на минуточку
и вспомните что в Scala это уже есть! Натурально. Фундаментальные стратегии
работы с коллекциями такие как map, flatMap, fold воплощены в scala в то время
как в Java к ним только-только подходят и то без понимания сути а инструментально,
как побочка от работы со Streams. В Scala можно постулировать не то что жалкое
целое число или комплексное или вектор. Можно объявить "группы", "кольца"
и прочие материи высокого порядка математики и далее унаследовать от них
поведение. В Scala решена проблема ромбовидного наследования. Решена бротва!
Вы всё спорите в топиках ООП? Так знайте! Она - формализована в Scala и результат
детерминирован. Никакого UB! Scala - статически типизирована на уровне компиллятора.
А это значит что мы получаем формальное доказательство правоты нашего
алгоритма после компилляции целого леса шаблонов и функций. И это значит
что никаких ошибок рантайма при кастинге не будет! Это - закон! А что
может быть лучше для программиста чем закон который гарантирует
что код - верный.

И еще раз. В Scala есть всё! Если чего-то нет - то читайте внимательно.

Я сейчас не говорю о практике или о статистике использования этого ЯП.
Это отдельный вопрос. Но теоретический батл Java уже давно проиграла.
Что может инженеришко Гослинг противопоставить профессору языковых
наук Одерскому!? Это вам не хер собачий! Это академичский подход.
Это - наука! А не дурацкие фреймворки с бинами. Мдя....

Я не имею ентерпрайзных проектов на Scala. И его пока не знаю
так хорошо чтобы трабл-шутить ошибки. Но у меня достаточно
сильно развито природное инженерное любопытство которое будет
и будет двигать меня в сторону этого сложного и интересного языка.

Вот такие вот 5 копеек. Спасибо за внимание.
...
Рейтинг: 0 / 0
Scala
    #39449849
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonHettПодытожив все прочитанное вчера (а мыслей было на много больше чем я тут написал, что-то уж из головы все вылетело) - пришел к выводу, что это скорее инструмент фанатиков, помешанных на "идеальном коде", которые больше времени теоретизируют.

Что скажете?
Кину 5 копеек.

Языки программирования создают не боги и не небожители. А обычные инженеры (зачастую). Языки
становятся на долгие десятилетия стандартом общения между программистом и имплементацией.
Как следствие. Ошибки или недостатки которые заложил создатель мы тащим долгие годы.
Почему Джеймс Гослинг не заложил в java парадигму беззнаковой арифметики. Ведь процессоры
прекрасно это поддерживали? Почему в первых версиях не было типа enum, не было generics,
и не было семантики строкового аргумента внутри switch? Почему API сразу не поддержал
out.printf, а потребовалось несколько лет чтобы осознать что это реально практично и полезно?
Почему строки нужно сравнивать только через equals() а не через более короткий binary operator?
Почему нельзя перегрузить + для сложения матриц и векторов? В какой-такой концепции ООП
записано что этого делать нельзя? И такой поток "почему" у меня - бесконечен.

И с другой стороны. Мартин Одерский. Профессор. Да еще и специализируется на ЯЗЫКАХ.
Этот человек знает всё о всех парадигмах. Он не стал размениваться на мелочи.
Он заложил в Scala ВСЕ-ВСЕ языковые парадигмы которые только существуют.
Серъезно! Там только чорта в ступе не хватает. И если вы однажды (с похмелья)
вдруг решили создать свой язык или DSL или скриптик .. то замрите (!) на минуточку
и вспомните что в Scala это уже есть! Натурально. Фундаментальные стратегии
работы с коллекциями такие как map, flatMap, fold воплощены в scala в то время
как в Java к ним только-только подходят и то без понимания сути а инструментально,
как побочка от работы со Streams. В Scala можно постулировать не то что жалкое
целое число или комплексное или вектор. Можно объявить "группы", "кольца"
и прочие материи высокого порядка математики и далее унаследовать от них
поведение. В Scala решена проблема ромбовидного наследования. Решена бротва!
Вы всё спорите в топиках ООП? Так знайте! Она - формализована в Scala и результат
детерминирован. Никакого UB! Scala - статически типизирована на уровне компиллятора.
А это значит что мы получаем формальное доказательство правоты нашего
алгоритма после компилляции целого леса шаблонов и функций. И это значит
что никаких ошибок рантайма при кастинге не будет! Это - закон! А что
может быть лучше для программиста чем закон который гарантирует
что код - верный.

И еще раз. В Scala есть всё! Если чего-то нет - то читайте внимательно.

Я сейчас не говорю о практике или о статистике использования этого ЯП.
Это отдельный вопрос. Но теоретический батл Java уже давно проиграла.
Что может инженеришко Гослинг противопоставить профессору языковых
наук Одерскому!? Это вам не хер собачий! Это академичский подход.
Это - наука! А не дурацкие фреймворки с бинами. Мдя....

Я не имею ентерпрайзных проектов на Scala. И его пока не знаю
так хорошо чтобы трабл-шутить ошибки. Но у меня достаточно
сильно развито природное инженерное любопытство которое будет
и будет двигать меня в сторону этого сложного и интересного языка.

Вот такие вот 5 копеек. Спасибо за внимание.


Взвился бывший алкоголик,
Матершинник и крамольник,
Надо выпить треугольник,
На троих его даёшь.
Разошёлся, так и сыпет,
Треугольник будет выпит,
Будь он параллелепипед,
Будь он круг, едрёна вошь.
...
Рейтинг: 0 / 0
Scala
    #39449867
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfИ минусы:

- нормальных учебников для новичков просто нет. Все книжки, которые я видел, быстро закапываются в сложности, что отпугивает многих.

- scala компилируется значительно медленнее, чем java. В ФП-проектах время компиляции становится сравнимым с С++.

- 100% надежной поддержки в IDE пока нет. Ситуация похожа на С++ в начале века - простой код обрабатывался IDE хорошо, но шаблоны посложнее сводили с ума анализатор.

- минус, он же плюс: отладчик в скале малополезен. Из-за обилия лямбд проще переписать код так, чтобы в нем гарантированно не было ошибок, чем ставить точки останова.
это очень весомые минусы для промышленной разработки. IMHO
...
Рейтинг: 0 / 0
Scala
    #39449883
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это правда. Под Scala пока нет вменяемого учебника. Тоесть нет дидактического материала
подобного тому что пишет Шилдт, Хорстман.

Нет наработанных практик code-review.
...
Рейтинг: 0 / 0
Scala
    #39449891
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonТоесть нет дидактического материала
подобного тому что пишет Шилдт, Хорстман.
.

Кей Хорстман "Скала для нетерпеливых"
...
Рейтинг: 0 / 0
Scala
    #39449899
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЭто правда. Под Scala пока нет вменяемого учебника. Тоесть нет дидактического материала
подобного тому что пишет Шилдт, Хорстман.

Нет наработанных практик code-review.

Т.е. нету закостенелой единственно верной непогрешимой точки зрения, известной как "лучшие практики".
...
Рейтинг: 0 / 0
Scala
    #39449915
Фотография ponuch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переход на версию 2.12 сломал нафиг проект, написанный под 2.11.7
...
Рейтинг: 0 / 0
Scala
    #39449979
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ponuchпереход на версию 2.12 сломал нафиг проект, написанный под 2.11.7

Интересно, вы разобрались, что конкретно поломалось?
Бинарную совместимость на уровне библиотек никто не обещал, например...
...
Рейтинг: 0 / 0
Scala
    #39449985
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВУ scala мощней система типов, больше уровень абстракции. Можно писать более короткие программы, но и порог вхождения больше.Отлично, немного экстраполируем -> нужен бесконечно сложный абстрактный язык, но и программы на нем писать будет не надо!

Ява взлетела по двум причинам (причем взлетела именно в той области что есть):
- достаточно простой и детерминированный в написании и поддержке (когда определились со стеком)
- достаточно кроссплатформенный (а времена ее создания были как раз самые неопределенные)

Переплюнуть Кобол №2 будет сложно. Хоть скале, хоть чему.
...
Рейтинг: 0 / 0
Scala
    #39449986
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80maytonТоесть нет дидактического материала
подобного тому что пишет Шилдт, Хорстман.
.

Кей Хорстман "Скала для нетерпеливых"
Дада. Это моя настольная книга. Но она не годится в качестве учебника тоже.
...
Рейтинг: 0 / 0
Scala
    #39450113
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimonz80maytonТоесть нет дидактического материала
подобного тому что пишет Шилдт, Хорстман.
.

Кей Хорстман "Скала для нетерпеливых"
Скорее нет книги аналогичной Эффективная Java от Блоха. С best practice и стандартизированными подходами к решению задач.
...
Рейтинг: 0 / 0
Scala
    #39450568
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭтот человек знает всё о всех парадигмах. Он не стал размениваться на мелочи.
Он заложил в Scala ВСЕ-ВСЕ языковые парадигмы которые только существуют.
Серъезно! Там только чорта в ступе не хватает.

И это весьма плохо. Поскольку вынуждает тратить на освоение языка куда больше сил и времени нежели реально надо. Мастодонты реализующие все и вся регулярно появляются и проваливаются. Например, был такой язык PL/I. Вчистую проигравший С и Pascal. Почему? Было очень мало программистов освоивших его полностью.
Аналогичная ситуация с противостоянием С++ и Delphi в коммерческом секторе, С vs C++ в написании драйверов. Ну неохота тратить время на тысячи бесполезных тонкостей. В последнем случае формально используются компилятор С++, но реально пишут используя лишь некоторые расширения к С.
Называть Гослинга инженеришкой глупо. Гослинг сознательно урезал язык и большое ему за это спасибо. Хотя, если бы Java была бы разжиревшим слоном, то она бы не пришла к языку № 1 в мире. Он взял концепции оправдавшие себя и выкинул все что без особой надобности.
Ну что ж, академические языки потому и не находят применения в коммерческом секторе, что их мощь чаще вынуждает тратить силы впустую.
...
Рейтинг: 0 / 0
Scala
    #39450631
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quot Hett]Вот вчера не мог уснуть и решил почитать про эту Scala.
Просмотрел несколько разных статей на тему "Почему скала в овер100500 раз удобнее чем ява" и, честно говоря, так и не понял.


Ну как бы Java обскакать по удобству очень несложно, язык крайне неудобный.

Одна невстроенность в язык BigDecimal уже много стоит. Это для языка, который используется для бизнес-приложений!


- Ну можно какие-то моменты более кратко выразить в коде, но это какой-то сомнительный плюс.


это уже немало! Если тебе это не важно, почему на ассемблере не пишешь?

- Функциональное программирование - действительно ли оно нужно?..

почему бы и нет? например, оно позволяет автоматически распараллеливать выполнение программы.

Подытожив все прочитанное вчера (а мыслей было на много больше чем я тут написал, что-то уж из головы все вылетело) - пришел к выводу, что это скорее инструмент фанатиков, помешанных на "идеальном коде", которые больше времени теоретизируют.

Что скажете?

ты непрофессионал.
...
Рейтинг: 0 / 0
Scala
    #39450638
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Blazkowicz]ФП реально нужно. Благодаря лямбдам решение многих моих насущных задач упростилось в разы.

Ну, лямбды - это еще далеко не все ФП...

. Для бизнеса актуальна и проблема кадров. Порог входа в язык ещё выше. А рынок и так голодает от недостатка квалифицированных разрабов.

"еще выше"?
Выше чего, нулевого порога в Java?
Он просто какой-то есть, ТС тому свидетель...
...
Рейтинг: 0 / 0
Scala
    #39450645
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЕвгенийВУ scala мощней система типов, больше уровень абстракции. Можно писать более короткие программы, но и порог вхождения больше.Отлично, немного экстраполируем -> нужен бесконечно сложный абстрактный язык, но и программы на нем писать будет не надо!
В конечном итоге да! Но сумма интеллекта величина постоянная, а количество населения постоянно растет.
Был например derive , написанный на диалекте lisp, который помещался на дискетку 1,2 дюйма и который позволял работать со всей известной мне математикой! MathCad и Maple сильно отставали по возможностям.
SiemarglЯва взлетела по двум причинам (причем взлетела именно в той области что есть):
- достаточно простой и детерминированный в написании и поддержке (когда определились со стеком)
- достаточно кроссплатформенный (а времена ее создания были как раз самые неопределенные)

Переплюнуть Кобол №2 будет сложно. Хоть скале, хоть чему.
Ява еще долго будет в тренде, ибо формоклепательство и тривиальная кодописанина пользуется спросом.
Такие языки, как scala предназначены для решения серьезных задач.
...
Рейтинг: 0 / 0
Scala
    #39450650
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivэто уже немало! Если тебе это не важно, почему на ассемблере не пишешь?
Краткость - не всегда сестра таланта.

MasterZivпочему бы и нет? например, оно позволяет автоматически распараллеливать выполнение программы.
Мой вопрос скорее подразумевал парадигму ФП в чистом виде, коим обсуждаемый язык преподносится.

MasterZivты непрофессионал.
Даже и не собирался себе этот титул присуждать.
...
Рейтинг: 0 / 0
Scala
    #39450653
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettМой вопрос скорее подразумевал парадигму ФП в чистом виде, коим обсуждаемый язык преподносится.
И чтобы не цеплялись к словам, поправлюсь, имел в виду чистым от процедурного стиля.
...
Рейтинг: 0 / 0
Scala
    #39450678
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivпочему бы и нет? например, оно позволяет автоматически распараллеливать выполнение программы.

Сомнительное утверждение.
...
Рейтинг: 0 / 0
Scala
    #39451919
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://ru.coursera.org/learn/progfun1

есть такой курс - его нужно пройти и решить для себя нужна ли скала или нет
...
Рейтинг: 0 / 0
Scala
    #39452084
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВMasterZivпочему бы и нет? например, оно позволяет автоматически распараллеливать выполнение программы.

Сомнительное утверждение.
Erlang
https://ru.wikipedia.org/wiki/Erlang#.D0.9F.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B5_.D0.B2.D1.8B.D1.87.D0.B8.D1.81.D0.BB.D0.B5.D0.BD.D0.B8.D1.8F
...
Рейтинг: 0 / 0
Scala
    #39452642
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часто вижу люди упоминают что язык Х не такой мощный как Скала. Инересно увидеть пример кода на Скале демонстрирующий это, желательно короткий который демонстрирует это. Но реальный, не просто какой-то абстрактный функтор или монада, а привязанное к чему-то совершенно реальному и практичному, т.е. этот пример должен реально использоваться и использоватся часто и приностиь значительную пользу .
...
Рейтинг: 0 / 0
Scala
    #39452661
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  sealed trait Shape //sealed - все потомки должны быть объявлены в этом файле
  case class Dot(x: Int, y: Int) extends Shape //иммутабельный класс с конструктором, equals, hashcode и toString
  case class Circle(x: Int, y: Int, r: Int) extends Shape
  case class Square(x1: Int, y1: Int, x2: Int, y2: Int) extends Shape

  //вычисляем площадь фигуры
  def area(s: Shape): Double = s match {
    case Dot(x, y) => 0 // s instanceof Dot, x и y - это поля объекта Dot
    case Circle(x, y, r) => Math.PI * r * r
    case Square(x1, y1, x2, y2) => (x2 - x1) * (y2 - y1)
      //если мы забыли задать условие для какого-то типа, компилятор выдаст предупреждение
  }



А теперь прошу - то же самое на джаве.
...
Рейтинг: 0 / 0
Scala
    #39452678
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateЧасто вижу люди упоминают что язык Х не такой мощный как Скала. Инересно увидеть пример кода на Скале демонстрирующий это, желательно короткий который демонстрирует это. Но реальный, не просто какой-то абстрактный функтор или монада, а привязанное к чему-то совершенно реальному и практичному, т.е. этот пример должен реально использоваться и использоватся часто и приностиь значительную пользу .

в java8 такой фокус тоже сработает, но тем не менее, смотрите как изящно делаем HashMap
Код: sql
1.
2.
val profiles = profileService.findByParameters(Parameters(email = '%foo%'))
val profilesById = profiles.map(p => p.id -> p).toMap




или вот, наглядная обработка условий с match. код читаемый, легко правится

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@RequestMapping(value=Array("/profiles/id"))
@ResponseBody
def loadProfileById(id: Int) = {
   profileService.findById(id).profile match {
      case Some(profile) => 
          WebProfile.fromDto(profile).toJson()
      
      case None =>
          throw ObjectNotFoundException(s"Profile with id=$id not found")
   }
}
...
Рейтинг: 0 / 0
Scala
    #39452688
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Буквально из вчерашнего:
Код: java
1.
2.
3.
4.
case class JsResource(path: Path, dependencies: List[JsResource]) //файл и его зависимости, формируют дерево

//получить множество всех зависимостей из дерева 
def flatDependencies(root: JsResource): Set[Path] = root.dependencies.flatMap(flatDependencies).toSet + root.path
...
Рейтинг: 0 / 0
Scala
    #39452695
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче...Например, был такой язык PL/I. Вчистую проигравший С и Pascal...
Спорное утверждение

PL/I AFAIK был заточен на IBM 360 ее продолжение и клоны
C и Pascal'у проиграть не мог, когда я в начале 90-х сидел на ЕС ЭВМ там ни C, ни Pascal не было. Как можно проиграть тому, кого нет?

Ну и синтаксис был заточен под IBM 360. Последовательные файлы, индексно организованные и так далее. Фиг такой язык на другую ОС перенесешь. Где файл это файл и все ))) без всяких выпендрежей с прямым доступом к нужным цилиндрам диска )))

IMHO & AFAIK
...
Рейтинг: 0 / 0
Scala
    #39452711
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateЧасто вижу люди упоминают что язык Х не такой мощный как Скала. Инересно увидеть пример кода на Скале демонстрирующий это, желательно короткий который демонстрирует это. Но реальный, не просто какой-то абстрактный функтор или монада, а привязанное к чему-то совершенно реальному и практичному, т.е. этот пример должен реально использоваться и использоватся часто и приностиь значительную пользу .
Мы не сможем определиться с критериями "значительной пользы". У нас нет возможности обсуждать серъезные SR
в рамках sql.ru. Во первых никто их не будет читать и во вторых не секюрно и т.п.

Но меня-бы вполне устроили обычные кейсы рефакторинга, когда есть какой-то ящик с входом и выходом,
написанный на Java/C++/C#/Delphi. Желательно не более чем на 100 строк.

И мы (все) внимательно на него смотрим. Думаем. И применяем к нему рефакторинги которые
- сокращают его объем кода.
- делают его более maintainable
- делают его более Human-readable

Далее мы пытаемся реализовать этот черный ящик на Scala и смотрим какой профит мы с этого
получаем. Если ничего не получаем - то считаем что в данном кейсе язык X такой-же мощный
как Scala или Scala не дает никаких преимуществ.

P.S.

В топике по трассировкой луча я сделал наивную попытку просто перевести С++ в Scala но получил
(пока) ошибку рендеринга и к сожалению ее не исправил т.к не хватает времени разобраться.

В топике где Atum играл с Stream-s и решал искусственные задачки я предложил решить те-же
задачки на Scala но к сожалению не получил поддержки аудитории да и самому мне тогда не было
времени их решать.
...
Рейтинг: 0 / 0
Scala
    #39452820
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА теперь прошу - то же самое на джаве.А я не говорил что приведу ответ на Java :), ниже пример на TypeScript (я использовал интерфейсы, но с классами тоже можно, и да, он тоже сделает автокастинг и проверку корректных значений в свитче и если мы забудем ретурн сделать тоже подскажет).

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
interface Dot    { type: 'Dot', x: number, y: number }
interface Circle { type: 'Circle', x: number, y: number, r: number }
interface Square { type: 'Square', x1: number, y2: number, y1: number, y2: number }

type Shape = Dot | Circle | Square

let area = (s: Shape): number {
  switch (s.type) {
    case 'Dot'    : return 0
    case 'Circle' : return Math.PI * s.r * s.r
    case 'Square' : return (s.x2 - s.x1) * (s.y2 - s.y1)
  }
}
...
Рейтинг: 0 / 0
Scala
    #39452827
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторval profiles = profileService.findByParameters(Parameters(email = '%foo%'))
val profilesById = profiles.map(p => p.id -> p).toMap

Аналогично на тайпскрипте. Чуть длиннее, но в общем терпимо.

Код: javascript
1.
2.
3.
4.
5.
// let profiles: any = [{ email: 'some-email', id: 'aid' }] 
let profilesById = profiles
  .filter(({ email }) => email == 'some-email')
  .reduce((map, profile) => { map[profile.id] = profile; return map }, {})
// alert(JSON.stringify(profilesById))
...
Рейтинг: 0 / 0
Scala
    #39452829
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
def loadProfileById(id: Int) = {
   profileService.findById(id).profile match {
      case Some(profile) => 
          WebProfile.fromDto(profile).toJson()
      
      case None =>
          throw ObjectNotFoundException(s"Profile with id=$id not found")
   }
}




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

Код: javascript
1.
2.
3.
4.
5.
loadProfileById(id: number): Profile {
  let profile = Profiles.findById(id)
  if (!profile) throw new NotFound(`profile with ${id} not found!`)
  return profile
}



Но, можно сделать еще лучше, так как это делается например в Рельсах, нужно прокетировать апи сервиса так чтобы он сам все проверял. В коде ниже `one()` выкинет ошибку если найдено 0 или > 1.

Код: javascript
1.
2.
3.
loadProfileById(id: number): Profile {
  Profiles.where({ id }).one()
}
...
Рейтинг: 0 / 0
Scala
    #39452834
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторcase class JsResource(path: Path, dependencies: List[JsResource]) //файл и его зависимости, формируют дерево

//получить множество всех зависимостей из дерева
def flatDependencies(root: JsResource): Set[Path] = root.dependencies.flatMap(flatDependencies).toSet + root.path


Хммм, а из-за циркулярных зависимостей в бесконечный цикл не войдет?
...
Рейтинг: 0 / 0
Scala
    #39452840
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private,

тайпскрипт - вещь хорошая, но это надстройка над яваскриптом с необязательными типами. Так сказать, другая весовая категория, и до роли промышленного языка больших систем он еще не дорос.

Войдет, но, по условию задачи, это дерево, а не граф.
...
Рейтинг: 0 / 0
Scala
    #39452844
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия на тайпскрипт. Немного нечитабельно, основная проблема - отсутствие метода `flatten` в жаваскрипте...

Код: javascript
1.
2.
3.
4.
5.
interface JsResource { path: string, dependencies: JsResource[] }
let flatDependencies = (root: JsResource): string[] => (     
  [].concat.apply([root.path], root.dependencies.map(flatDependencies))
)
alert(JSON.stringify(flatDependencies({ path: '/a', dependencies: [{ path: '/b', dependencies: []}]})))



С флаттен было-бы читабельней.

Код: javascript
1.
2.
3.
let flatDependencies = (root: JsResource): string[] => (
  [root.path].concat(root.dependencies.map(flatDependencies).flatten()
)
...
Рейтинг: 0 / 0
Scala
    #39452847
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И я забыл в Set обернуть... Последний пример подкачал..., уступает скале из-за отсутствия хорошей стандартной библиотеке в жаваскрипт.
...
Рейтинг: 0 / 0
Scala
    #39452866
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересная позиция конечно:) по типу суровых русских дровосеков с японской бензопилой

Ну например сделай на typescript такое -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
//Интерфейс объекта к которому можно прицепить слушателя
trait Observable {

  type Handle

  protected var callbacks = Map[Handle, this.type => Unit]()

  def observe(callback : this.type => Unit) : Handle = {
    val handle = createHandle(callback)
    callbacks += (handle -> callback)
    handle
  }

  def unobserve(handle : Handle) : Unit = {
    callbacks -= handle
  }

  protected def notifyListeners() : Unit =
    for(callback <- callbacks.values) callback(this)

  /**
   * Subclasses override this to provide their own callback disambiguation scheme.
   */
  protected def createHandle(callback : this.type => Unit) : Handle
}

trait DefaultHandles extends Observable {
  type Handle = (this.type => Unit)
  protected def createHandle(callback : this.type => Unit) : Handle = callback
}

class VariableStore[X](private var value : X) extends Observable with DefaultHandles {
  def get : X = value
  def set(newValue : X) : Unit = {
    value = newValue
    notifyListeners()
  }

  override def toString : String = "VariableStore(" + value + ")"
}



А теперь как им пользоваться -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
// Создаем два разных объекта одного типа
scala> val x = new VariableStore(5)   
x: VariableStore[Int] = VariableStore(5)
scala> val y = new VariableStore(2)
y: VariableStore[Int] = VariableStore(2)    

// Простой коллбэк, который печатает в стандартный вывод
scala> val callback = println(_ : Any)
callback: (Any) => Unit = <function1>

// Хендлы нужны для того чтобы потом можно было отписаться от нотификейшенов. Handle1 и handle2 - два разных хандлера
scala> val handle1 = x.observe(callback)
handle1: (x.type) => Unit = <function1>

scala> val handle2 = y.observe(callback)
handle2: (y.type) => Unit = <function1>

// Проверяем что обсерверы работают, когда выставляем значение - оно выводится на консоль
scala> y.set(3)
VariableStore(3)

scala> x.set(5)
VariableStore(5)

// И вот тут начинается магия - Мы пытаемся отписаться от нотификейшенов на объект y, используя handle от объекта x - компилятор дает нам жесткий отлуп. Да - да компилятор может отловить если метод вызван не то что на неправильном типе, а на неправильном ИНСТАНСЕ объекта одного и того же типа.
scala> y.unobserve(handle1)
<console>:10: error: type mismatch;
 found   : (x.type) => Unit
 required: (y.type) => Unit
       y.unobserve(handle1)

scala> x.unobserve(handle1)
//Ok, отписались
scala> x.set(6)
//на консоль ничего не выводится



Да, я не скажу что такое надо сплошь и рядом, и сама концепция path-dependent types трудна, но если использовать дозированно и к месту, то можно прилично помочь компилятору. Жду аналог на TS
...
Рейтинг: 0 / 0
Scala
    #39453141
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как раз наоборот. Я продемонстрировал что "Японская Бензопила" (обычный язык, тайпскрипт) неплохо справиляется с предложенными выше практическими и часто встречающимися задачами. А ты предложил перепелить рельс - привел пример абстрактного, редко используемого кода. Я же явно упоминул что желательно рассматривать """"ример должен реально использоваться и использоватся часто и приностиь значительную пользу""". Какой смысл рассматривать фичу языка которая используется редко и приносит незначительную пользу?
...
Рейтинг: 0 / 0
Scala
    #39453144
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По приведенному коду - нужно определится - либо он частно используется в проектах на скале и приносит значимю пользу (и желательно продемонстрировать реальным кодом - как именно он эту пользу приносит, как в примерах выше, там явно видно что это обычный рабочий код, рендеринг обьектов, работа с базой данных и т.п.). Либо отбросить его как несущественный.
...
Рейтинг: 0 / 0
Scala
    #39453579
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonHettПодытожив все прочитанное вчера (а мыслей было на много больше чем я тут написал, что-то уж из головы все вылетело) - пришел к выводу, что это скорее инструмент фанатиков, помешанных на "идеальном коде", которые больше времени теоретизируют.

Что скажете?

Кину 5 копеек.

Языки программирования создают не боги и не небожители. А обычные инженеры (зачастую). Языки
становятся на долгие десятилетия стандартом общения между программистом и имплементацией.
Как следствие. Ошибки или недостатки которые заложил создатель мы тащим долгие годы.
Почему Джеймс Гослинг не заложил в java парадигму беззнаковой арифметики. Ведь процессоры
прекрасно это поддерживали? Почему в первых версиях не было типа enum, не было generics,
и не было семантики строкового аргумента внутри switch? Почему API сразу не поддержал
out.printf, а потребовалось несколько лет чтобы осознать что это реально практично и полезно?
Почему строки нужно сравнивать только через equals() а не через более короткий binary operator?
Почему нельзя перегрузить + для сложения матриц и векторов? В какой-такой концепции ООП
записано что этого делать нельзя? И такой поток "почему" у меня - бесконечен.

И с другой стороны. Мартин Одерский. Профессор. Да еще и специализируется на ЯЗЫКАХ.
Этот человек знает всё о всех парадигмах. Он не стал размениваться на мелочи.
Он заложил в Scala ВСЕ-ВСЕ языковые парадигмы которые только существуют.
Серъезно! Там только чорта в ступе не хватает. И если вы однажды (с похмелья)
вдруг решили создать свой язык или DSL или скриптик .. то замрите (!) на минуточку
и вспомните что в Scala это уже есть! Натурально. Фундаментальные стратегии
работы с коллекциями такие как map, flatMap, fold воплощены в scala в то время
как в Java к ним только-только подходят и то без понимания сути а инструментально,
как побочка от работы со Streams. В Scala можно постулировать не то что жалкое
целое число или комплексное или вектор. Можно объявить "группы", "кольца"
и прочие материи высокого порядка математики и далее унаследовать от них
поведение. В Scala решена проблема ромбовидного наследования. Решена бротва!
Вы всё спорите в топиках ООП? Так знайте! Она - формализована в Scala и результат
детерминирован. Никакого UB! Scala - статически типизирована на уровне компиллятора.
А это значит что мы получаем формальное доказательство правоты нашего
алгоритма после компилляции целого леса шаблонов и функций. И это значит
что никаких ошибок рантайма при кастинге не будет! Это - закон! А что
может быть лучше для программиста чем закон который гарантирует
что код - верный.

И еще раз. В Scala есть всё! Если чего-то нет - то читайте внимательно.

Я сейчас не говорю о практике или о статистике использования этого ЯП.
Это отдельный вопрос. Но теоретический батл Java уже давно проиграла.
Что может инженеришко Гослинг противопоставить профессору языковых
наук Одерскому!? Это вам не хер собачий! Это академичский подход.
Это - наука! А не дурацкие фреймворки с бинами. Мдя....

Я не имею ентерпрайзных проектов на Scala. И его пока не знаю
так хорошо чтобы трабл-шутить ошибки. Но у меня достаточно
сильно развито природное инженерное любопытство которое будет
и будет двигать меня в сторону этого сложного и интересного языка.

Вот такие вот 5 копеек. Спасибо за внимание.


+1
...
Рейтинг: 0 / 0
Scala
    #39453580
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateЧасто вижу люди упоминают что язык Х не такой мощный как Скала. Инересно увидеть пример кода на Скале демонстрирующий это, желательно короткий который демонстрирует это. Но реальный, не просто какой-то абстрактный функтор или монада, а привязанное к чему-то совершенно реальному и практичному, т.е. этот пример должен реально использоваться и использоватся часто и приностиь значительную пользу .

Вся научная разработка компании huawei идет на scala
...
Рейтинг: 0 / 0
Scala
    #39453686
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Ну например сделай на typescript такое -


https://github.com/Reactive-Extensions/RxJS
...
Рейтинг: 0 / 0
Scala
    #39453774
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1privateЧасто вижу люди упоминают что язык Х не такой мощный как Скала. Инересно увидеть пример кода на Скале демонстрирующий это, желательно короткий который демонстрирует это. Но реальный, не просто какой-то абстрактный функтор или монада, а привязанное к чему-то совершенно реальному и практичному, т.е. этот пример должен реально использоваться и использоватся часто и приностиь значительную пользу .

Вся научная разработка компании huawei идет на scala
Из того что уже написано и работает на Scala - можно отметить фреймвоки Akka и Kafka.

Этот пример кода не очень короткий и я-бы даже сказал весьма длинный. Но можно брать
из него фрагменты и думать чё там и как. Я его код не смотрел но думаю что он - весьма
достоен своего выбора.
...
Рейтинг: 0 / 0
Scala
    #39454198
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВзабыл никНу например сделай на typescript такое -


https://github.com/Reactive-Extensions/RxJS

Это совсем не о том.. Observables - лишь пример. Идея в том, что многие потенциальные ошибки в скале можно отличить уже на этапе компиляции (а не в логах на продуктиве, как это обычно бывает)

Scala имеет более строгую типизацию, чем Java, C# или Typescript. Говорят, что есть ещё более строгие языки со странными названиями - Haskell, Idris, Agda... Но я вот с ними не сталкивался. Ну и работодатели, видимо, тоже.
...
Рейтинг: 0 / 0
Scala
    #39454443
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диез
Scala имеет более строгую типизацию, чем Java, C# или Typescript.
Scala имеет более мощную систему типов, чем Java, C#. Typescript - немного в стороне, хотя в C# есть dynamic...
То, что показано в примере - примеси, на C# легко реализуются с помощью интерфейсов и методов расширения, которые там появились 100500 лет назад.
В 7,0 появился pattern matching, но он сильно уступает scala и f#.
...
Рейтинг: 0 / 0
Scala
    #39454481
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, система типов Scala - это вещь хорошая, но не прикладная и уж точно не то, за все мы так любим этот язык для разработки.

Вот еще немного моего любимого:
Код: java
1.
2.
package com.company.mylib.impl
private[mylib] class SomeImpl {...} //доступен только из пакета mylib и подпакетов (mylib.impl)



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
sealed trait State
case object Stopped extends State
case class Starting(started: Runnable)
case object Started
case class Stopping(stopped: Runnable)
val state = new AtomicReference[State](Stopped)

//потокобезопасно и достаточно сложно в реализации на Java
def start(started: Runnable): Unit = state.get() match {
  case st @ Stopped => if (!state.compareAndSet(st, Starting(started))) start(started) //если остановлено - запускаем
  case Starting(_) => //уже запускается, ничего не делаем
  case Started => started.run() //уже запущено - вызываем callback сразу
  //если сейчас останавливается - то запускаем после окончания остановки
  case st @ Stopping(cb) = if (!state.compareAndSet(st, Stopping(() => {cb.run() ; start(started)})) start(started)
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
//вернуть сумму трех Option-ов, если все они существуют
def sumAll(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = for {
   av <- a
   bv <- b
   cv <- c
} yield a + b + c

//вернуть сумму всех существующих Option-ов
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = 
  a.getOrElse(0) + b.getOrElse(0) + c.getOrElse(0)

//вернуть сумму всех существующих Option-ов (вариант 2)
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = {
  var sum = 0
  a.foreach { v => sum += v }
  b.foreach { sum += _ } //то же самое
  с.foreach { sum += _ } 
  sum
}

def max(a: Int, b: Int) = 
  if (a > b) 
    a //здесь могла бы быть ваша рекламафигурная скобка и кусок кода, return не нужен
  else 
    b
...
Рейтинг: 0 / 0
Scala
    #39454484
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf,

Поправка ко второму примеру:
Код: java
1.
2.
3.
4.
case object Stopped extends State
case class Starting(started: Runnable) extends State
case object Started extends State
case class Stopping(stopped: Runnable) extends State
...
Рейтинг: 0 / 0
Scala
    #39454518
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf,

И еще одна поправка ко второму примеру
Код: java
1.
2.
//вызовем callback когда запустится
case st @ Starting(cb) => if (!state.compareAndSet(st, Starting(() => {cb.run() ; started.run()})) start(started)
...
Рейтинг: 0 / 0
Scala
    #39454622
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВДиезScala имеет более строгую типизацию, чем Java, C# или Typescript.
Scala имеет более мощную систему типов, чем Java, C#. Typescript - немного в стороне, хотя в C# есть dynamic...

Не вижу противоречий. Если вы дадите формальное определение понятий "сила типизации" и "мощность системы типов" - можно будет подискутировать.

ЕвгенийВТо, что показано в примере - примеси, на C# легко реализуются с помощью интерфейсов и методов расширения, которые там появились 100500 лет назад.
В 7,0 появился pattern matching, но он сильно уступает scala и f#.

Примеси - это не так интересно. Автор поста специально сделал сделал акцент на концепции path-dependent types.
...
Рейтинг: 0 / 0
Scala
    #39454919
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВся научная разработка компании huawei идет на scala
Из того что уже написано и работает на Scala - можно отметить фреймвоки Akka и Kafka.

Все это классно, но можно привести много примеров где компания Х успешно использует технологию Y. Это хороший дополнительный бонус, но он не демонстрирует преимушества языка в наглядном виде.

авторИдея в том, что многие потенциальные ошибки в скале можно отличить уже на этапе компиляции

Опять абстрактные утверждения. Про тот код с обсервером - он относится не к категории "многие" а к "редкие". Сказать что скала позволяет отследить потенциальные ошибки в каких-то редких случаях - да, судя по тому примеру можно так сказать. Но вот что "многие ошибки" пока такого примера не было.

авторScala имеет более строгую типизацию

Опять абстрактные утверждения.

авторScala имеет более мощную систему типов, чем Java, C#. Typescript - немного в стороне, хотя в C# есть dynamic...

Опять абстрактные утверждения.
...
Рейтинг: 0 / 0
Scala
    #39454925
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
//вернуть сумму трех Option-ов, если все они существуют
def sumAll(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = for {
   av <- a
   bv <- b
   cv <- c
} yield a + b + c

//вернуть сумму всех существующих Option-ов
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = 
  a.getOrElse(0) + b.getOrElse(0) + c.getOrElse(0)

//вернуть сумму всех существующих Option-ов (вариант 2)
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = {
  var sum = 0
  a.foreach { v => sum += v }
  b.foreach { sum += _ } //то же самое
  с.foreach { sum += _ } 
  sum
}

def max(a: Int, b: Int) = 
  if (a > b) 
    a //здесь могла бы быть ваша рекламафигурная скобка и кусок кода, return не нужен
  else 
    b



Вроде так-же? (я пропустил типы, это обычный жаваскрипт, но в тайпскрипте будет также)

Код: javascript
1.
2.
3.
let sumAll = (a, b, c, cb) => if (a && b && c) cb(a + b + c)
let sumAny = (a, b, c) => (a || 0) + (b || 0) + (c || 0)
let max = (a, b) => a > b ? a : b
...
Рейтинг: 0 / 0
Scala
    #39454947
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: javascript
1.
let sumAll = (a, b, c, cb) => if (a != null && b != null && c != null) cb(a + b + c)
...
Рейтинг: 0 / 0
Scala
    #39455080
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private,

Про адекватность сравнения типизированного языка с нетипизированным я уже писал.
...
Рейтинг: 0 / 0
Scala
    #39455815
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SupplierStreram - хороший пример -

как написать такое без ФП я ХЗ ....


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
import static java.util.Arrays.asList;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Stream;

/**
 * конкатенация всех комбинаций 
 *  любой длинны !!! 
 *
 */
public class SupplierStreram {

    public static void main(String[] args) {

        List<List<String>> input = asList(
                asList("a", "b"),
                asList("x", "y"),
                asList("1", "2"));


        Supplier<Stream<String>> s
                = input.stream()

                .<Supplier<Stream<String>>>map(list -> list::stream)

                .reduce((sup1, sup2) -> () -> sup1.get()

                .flatMap(e1 -> sup2.get().map(e2 -> e1 + e2)))

                .orElse(() -> Stream.of(""));

        s.get().forEach(System.out::println);
        
    
    }
...
Рейтинг: 0 / 0
Scala
    #39455954
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,

то же на скале:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
object Main {
  def main(args: Array[String]): Unit = {
    val input = List(
      List("a", "b"),
      List("x", "y"),
      List("1", "2")
    )

    val result: List[String] = input.foldLeft(List("")) { (list1, list2) =>
      list1.flatMap { e1 =>
        list2.map(e2 => e1 + e2) //еще можно так: list2.map(_ + e2)
      }
    }

    result.foreach(println)

  }
}
...
Рейтинг: 0 / 0
Scala
    #39456217
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПро адекватность сравнения типизированного языка с нетипизированным я уже писал.

Типизированная версия будет та-же, вариант с ТайпСркиптом

Код: javascript
1.
2.
3.
4.
5.
6.
7.
let sumAll = (a: number | null, b: number | null, c: number | null): number | null => {
  return (a != null && b != null && c != null) ? a + b + c : null
}
let sumAny = (a: number | null, b: number | null, c: number | null) => {
  return (a || 0) + (b || 0) + (c || 0)
}
let max = (a: number, b: number) => a > b ? a : b



И оригинальный код на скале ниже - сложнее и запутаннее.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
def sumAll(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = for {
   av <- a
   bv <- b
   cv <- c
} yield a + b + c

//вернуть сумму всех существующих Option-ов
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = 
  a.getOrElse(0) + b.getOrElse(0) + c.getOrElse(0)

//вернуть сумму всех существующих Option-ов (вариант 2)
def sumAny(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int] = {
  var sum = 0
  a.foreach { v => sum += v }
  b.foreach { sum += _ } //то же самое
  с.foreach { sum += _ } 
  sum
}

def max(a: Int, b: Int) = 
  if (a > b) 
    a //здесь могла бы быть ваша рекламафигурная скобка и кусок кода, return не нужен
  else 
    b
...
Рейтинг: 0 / 0
Scala
    #39456222
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и вообще - в том коде изначально ошибка, это как-раз пример как не нужно делать. Что на скале что на других языках таких вещей следует избегать, а не показывать их как достоинства языка

Код: javascript
1.
2.
3.
(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int]

(a: number | null, b: number | null, c: number | null): number | null
...
Рейтинг: 0 / 0
Scala
    #39456487
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateНу и вообще - в том коде изначально ошибка, это как-раз пример как не нужно делать. Что на скале что на других языках таких вещей следует избегать, а не показывать их как достоинства языка

Код: javascript
1.
2.
3.
(a: Option[Int], b: Option[Int], c: Option[Int]): Option[Int]

(a: number | null, b: number | null, c: number | null): number | null



Любопытно, в чем ошибка и каких вещей избегать?
...
Рейтинг: 0 / 0
Scala
    #39456617
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно стараться избегать использования нулл или опшенал. Они должны как-то обрабатываться в другом месте а не перемешиваться с логикой алгоритма - суммирования в данном случае. Алгоритм должен работать с числами, а проблемы нулей/опшенелов решаться в другом месте.

Я знаю что есть мнение что хорошо универсально все обрабатывать - но я думаю это не правильно, простой алгоритм суммирования превращается в размазанную лапшу из опшенолов как в примере выше.
...
Рейтинг: 0 / 0
Scala
    #39459298
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateНужно стараться избегать использования нулл или опшенал. Они должны как-то обрабатываться в другом месте а не перемешиваться с логикой алгоритма - суммирования в данном случае. Алгоритм должен работать с числами, а проблемы нулей/опшенелов решаться в другом месте.

Я знаю что есть мнение что хорошо универсально все обрабатывать - но я думаю это не правильно, простой алгоритм суммирования превращается в размазанную лапшу из опшенолов как в примере выше.

+1
...
Рейтинг: 0 / 0
Scala
    #39459350
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private
Я знаю что есть мнение что хорошо универсально все обрабатывать - но я думаю это не правильно, простой алгоритм суммирования превращается в размазанную лапшу из опшенолов как в примере выше.
+1
Толи дело потрясающий C#!
Код: c#
1.
2.
3.
4.
 static int? MySumm(params int?[] arg)
        {
            return arg.Sum();
        }



P.S.
Не надо в ФП использовать циклы и переменные!
...
Рейтинг: 0 / 0
Scala
    #39459364
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
это если бизнес-логика только одна - математика.
...
Рейтинг: 0 / 0
Scala
    #39459382
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ЕвгенийВ,
это если бизнес-логика только одна - математика.
Да нифига подобного, просто надо мыслить по иному.
Вот например чистый web, правда не scala.
...
Рейтинг: 0 / 0
Scala
    #39459395
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ Вот например чистый web,
совмещение разметки с кодом?
...
Рейтинг: 0 / 0
Scala
    #39459472
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по этому топику, главным критерием функционального программирования для джавистов выступает поддержка языком лямбда функций.
...
Рейтинг: 0 / 0
Scala
    #39459537
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FishHookСудя по этому топику, главным критерием функционального программирования для джавистов выступает поддержка языком лямбда функций.
В Java не реализован например вывод типов и функции высших порядков сделаны через одно место, отсюда, от незнания и такие помыслы...
...
Рейтинг: 0 / 0
Scala
    #39459580
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ...
Не надо в ФП использовать циклы и переменные!
Из всех фП языков, сталкивался только с APL. Было это еще в старших классах школы

Там циклов не было, как понятия. Просто не было. Про переменные не помню ))) были или нет ))) вроде были.

Глубинной крутости лямбд не понимаю ((( На мой взгляд, синтаксический сахар над обычными callback'ами. При этом в Java про exception'ы полностью забыли. Что в ряде случаев, превращает код с лямбдами в нечто монстрообразное, когда приходится try...catch... куда надо и не надо впихивать. IMHO & AFAIK

Стримы выглядят вроде красиво, но опять таки, если не брать в голову вопросы производительности. А в этом случае, код со стримами значительно хуже читается. Глядя на код, нифига не понятно, к какой же реально последовательности действий он приводит. Начинаешь смотреть отладчиком и временами волосы на голове становятся дыбом.

Старый код на форах и интераторах, занимает не намного больше места (не намного сложнее пишется), но зато интерпретируется значительно более однозначно.

Все таки AFAIK в общем времени разработки, собственно набор кода - не больше 10% от времени. Т.ч. компактность кода выраженная в кол-ве символов, это конечно хорошо, но не в ущерб простоте восприятия.

Сталкивался с кодом на Cobol'е. Даже потребности взять книжку или скачать документацию из И-нет'а не появлялось. Просто смотришь на код и понимаешь, что же он делает. Глядя на код в данной теме, люди не знакомые с вопросом, фиг что поймут.
...
Рейтинг: 0 / 0
Scala
    #39459607
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВВ Java не реализован например вывод типов
авторJava EE — Java Enterprise Edition, представляет собой набор спецификаций для создания программного обеспечения уровня предприятия.
поэтому "строгая типизация".
Мало ли что там компилятор выдаст)). А у нас атомный реактор)).
...
Рейтинг: 0 / 0
Scala
    #39459760
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Глубинной крутости лямбд не понимаю ((( На мой взгляд, синтаксический сахар над обычными callback'ами.
За счет callback реализованы функции высших порядков.
Т. е. функция может быть аргументом и результатом другой функции.
...
Рейтинг: 0 / 0
94 сообщений из 94, показаны все 4 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Scala
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]