Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton
fixxer
пропущено...


В скале так точно. Но даже в джаве последние три года встречаю, в основном, реактивные стримы и Completable Future.

Если посмотреть более шИроко. То ФП давно уже вокруг вас. ФП - это не только программирование.
Это декларативное описание грамматик и смыслов. Формы Бекуса Науэра BNF/EBNF. Xml-schema/DTD.
Просто спеки для всяких DSL. И попытки втащить в языки программирования иммутабельность структур
данных - это всё части ФП.


Именно, так никто ж и не спорит. А что нового было изобретено за последние n лет в ООП?
2 окт 19, 13:13    [21984809]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
chpasha
Member

Откуда:
Сообщений: 8441
забыл ник
Тебе 10 лет назад показать код на стримах - ты бы ворочал носом и говорил какое говно, у меня есть циклы
так и сейчас говорят ;)
2 окт 19, 13:29    [21984835]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
chpasha
забыл ник
Тебе 10 лет назад показать код на стримах - ты бы ворочал носом и говорил какое говно, у меня есть циклы
так и сейчас говорят ;)

сейчас на циклах имхо и есть говно. :)
2 окт 19, 13:44    [21984864]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
chpasha
Member

Откуда:
Сообщений: 8441
andreykaT
сейчас на циклах имхо и есть говно. :)

этой фразой ты только что удвоил кол-во страниц в этом топике на 2 ;)
2 окт 19, 13:48    [21984874]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
забыл ник
andreykaT
так вот он я красавец. у меня есть юзкейс.ран(транзактор), а есть скажем юзкейс.ватеварелз(неТранзактар)
и я такой модный программист - просто удаляю эту строку и подменяю другой. оно дальше допустим, работает но уже без транзакции.


Не поянл, какую строку удаляешь и почему оно перестанет работать? Любая операция с базой имеет тип ConnectionIO - единственный способ вытянуть оттуда реальное значение - это предоставить транзактор. Если ты не предоставишь - у тебя будет просто объект типа ConnectionIO и ты его не сможешь никак заюзать.

я к тому что ты можешь что то переписать или переопределить чтоб это стало опциональным требованием.
а так имхо это вообще шаг назад. ты и в джаве мог написать метод типа файндолл или что угодно еще где обязательно надо передать объект типа какой нить транзакшн менеджер. и типа опа видишь теперь точно не забудешь. ога.
и вот чтоб от этого бойлерплейта уйти придумали декларативный (декоративный? :)) способ с аннотацией. а то что сверху имхо это какой-то прошлый век. добро пожаловать в средневековье.
2 окт 19, 13:49    [21984876]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
chpasha
забыл ник
Тебе 10 лет назад показать код на стримах - ты бы ворочал носом и говорил какое говно, у меня есть циклы
так и сейчас говорят ;)

Так и html предлагают из резалтсета формировать ^)

Я кстати java-стримы тоже не люблю, как и опшионал там особо не юзаю. Потому что они перетянули лишь видимую часть, а не глубинную идею. Красота стримов и опшионалов раскрываются, когда у тебя есть монады и for-comprehension, спроси у андрейки
2 окт 19, 14:23    [21984933]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
andreykaT
я к тому что ты можешь что то переписать или переопределить чтоб это стало опциональным требованием.

Ну можешь да, software меняется, это естественно, так в чем собственно вопрос?
andreykaT
а так имхо это вообще шаг назад. ты и в джаве мог написать метод типа файндолл или что угодно еще где обязательно надо передать объект типа какой нить транзакшн менеджер. и типа опа видишь теперь точно не забудешь. ога.

Так и надо делать. А потом появляется куча джунов, которые ни черта не понимают как это работает и ответы на стекфоверфлоу становятся похожи на - ну попробуй добавить аннотацию @Whatever. супер. Правда тут четко надо различать bl-compexity и infrastrcture-complexity. Управление транзакциями - это часть бизнес-логики, хочешь ты этого или нет. Делая ее неявной ты ступаешь на очень скользкую дорожку.

andreykaT
и вот чтоб от этого бойлерплейта уйти придумали декларативный (декоративный? :)) способ с аннотацией. а то что сверху имхо это какой-то прошлый век. добро пожаловать в средневековье.

Все ошибаются, раньше я тоже думал что это круто. Любая runtime-аннотация это нетипизированная хрень, которую ни продеюажишь ни пофиксишь, зачем тебе java тогда вообще? Не для сильной типизации ли? А от бойлерплейта уйти можно многими способами, ты сам прекрасно знаешь насколько мощные implicits в scala. Вот тебе кусок логики, полностью обернутый в IO, но ты об этом врядли догадаешься просто посмотрев на код. (Тем не менее код абсолютно без сайд-эффектов)

override def run(cache:TRef[Cache], network:NetworkService): ZIO[AppEnv, Throwable, List[Profile]] =  for {
        _ <- logger.infoIO(s"Start loop execution")
        userList <- network.loadUserList
        countOfPages <- Parser.countPages(userList)
        pages <- fetchPages(countOfPages)
        userNames <- mapToUserNames(pages)
        inactiveUsers <- getInactiveUsers
        profiles <- fetchAllProfiles(userNames, inactiveUsers, cache)
        _ <- logger.infoIO(s"Elapsed time: $sec s")
      } yield profiles
2 окт 19, 14:51    [21984967]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
mayton
Member

Откуда: loopback
Сообщений: 42386
забыл ник
chpasha
пропущено...
так и сейчас говорят ;)

Так и html предлагают из резалтсета формировать ^)

Я кстати java-стримы тоже не люблю, как и опшионал там особо не юзаю. Потому что они перетянули лишь видимую часть, а не глубинную идею. Красота стримов и опшионалов раскрываются, когда у тебя есть монады и for-comprehension, спроси у андрейки

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

И кто педалит вообще идею о том что библитечная фича лучше языковой? Убил-бы.
2 окт 19, 14:57    [21984979]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton
Стримы это вообще - последнее дело. Вот когда в айти входит очередной джун-вайтишник - то на собесе
оказывается что он стримы знает а на циклах блджад ничего написать не может. Более того не понял
идею зачем они вообще нужны.


Ну и зачем они нужны?
Хотя слабо представляю как можно "знать" стримы и не знать циклы.
Циклы - такой же анахронизм как и удаление памяти в C++ приложениях. И да, большинство джава джунов сильно удивятся вопросу про освобождение памяти.

Что такое цикл? Это последовательность
1) берем размер коллекции // это будет повторяться во всех циклах в любом приложении
2) создаем счетчик от 0 до размера // это будет повторяться во всех циклах в любом приложении
3) берем элемент по текущему инджексу // это будет повторяться во всех циклах в любом приложении
4) исполняем кастомную логику
5) инкрементируем текущий индекс и проверяем закончили ли // это будет повторяться во всех циклах в любом приложении
6) если не закончили идем на пункт 1// это будет повторяться во всех циклах в любом приложении

А что мы делаем если // это будет повторяться во всех циклах в любом приложении ??
Правильно - наворачиваем абстракцию, и передаем в нее параметром кастомную логику - someAbstraction(doWithElement)
2 окт 19, 15:19    [21985017]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton

И кто педалит вообще идею о том что библитечная фича лучше языковой? Убил-бы.


Зависит от.
2 окт 19, 15:20    [21985023]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
mayton
Member

Откуда: loopback
Сообщений: 42386
забыл ник
Ну и зачем они нужны?
Хотя слабо представляю как можно "знать" стримы и не знать циклы.
Циклы - такой же анахронизм как и удаление памяти в C++ приложениях. И да, большинство джава джунов сильно удивятся вопросу про освобождение памяти.


Основная идея описана здесь https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
Обратите также внимание на свойства non-interfering и stateless.

От себя скажу что стримы в Java может быть и являются чем-то новым для Java-кодеров. Но для ФП
это старый боян которому уже более полу-века. Отголоски ленивой обработки списков а особо важно
что иммутабельных - это основа программирования вообще любой ФП парадигмы На ней строятся и
циклы и логика и структуры данных.

В Java streams введены в угоду какой-то части пользователей которые видели Scala и задались вопросом
- а почему собсно у нас нет такой языковой возможности? Языковую им не дали. Но дали библиотеку.
И дали синтаксис анонимных функций для удобства.
2 окт 19, 15:27    [21985043]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton
забыл ник
Ну и зачем они нужны?
Хотя слабо представляю как можно "знать" стримы и не знать циклы.
Циклы - такой же анахронизм как и удаление памяти в C++ приложениях. И да, большинство джава джунов сильно удивятся вопросу про освобождение памяти.


Основная идея описана здесь https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
Обратите также внимание на свойства non-interfering и stateless.

От себя скажу что стримы в Java может быть и являются чем-то новым для Java-кодеров. Но для ФП
это старый боян которому уже более полу-века. Отголоски ленивой обработки списков а особо важно
что иммутабельных - это основа программирования вообще любой ФП парадигмы На ней строятся и
циклы и логика и структуры данных.

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


АА, ты про это?
Ну да, я ж и говорю что в java стримы - это ни то ни се.. так, верхи идеи.
В scala они и stateless и inferrable, это подразумевается само собой..
2 окт 19, 15:31    [21985048]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
Перепутал inferrable и non-interfering
2 окт 19, 15:37    [21985053]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
забыл ник
chpasha
пропущено...
так и сейчас говорят ;)

Так и html предлагают из резалтсета формировать ^)

Я кстати java-стримы тоже не люблю, как и опшионал там особо не юзаю. Потому что они перетянули лишь видимую часть, а не глубинную идею. Красота стримов и опшионалов раскрываются, когда у тебя есть монады и for-comprehension, спроси у андрейки

еще надо отметить что в скале фор это не тот фор что в жаве. вернее, можно использовать как ТОТ но используют для другого. т.е. в скале фор используется прям повсеместно )) с оговоркой не для итераций и каких то сайдеффектных действий а с целью уплощения вложенностей при работе с монадами.
да. прям ненарадуюсь. но я вот не уверен что это прям ФП, мне почему то кажется что фп это всего лишь некоторый ряд ограничений. а повсеместное втыкание монад и прочего - это стиль и подход. ФП - парадайм. мы не можем переопределять мы не можем писать сайдэффекты мы всегда возвращаем значение операции. вроде всё. а как ты это сделаешь - ну дело твое. просто классическая джава не очень к этому склоняет.
а так скала мне прям очень нравится но я чем больше ею пользуюсь тем больше понимаю что в ней СТОЛЬКО всего что изучать не переизучать.

типа вот была джава. сидели программисты и думали вон она скучная хотим такую же но 100500 свистелок-перделок, чтоб не разобраться - и в комплекте. а.. окей - на те скалу ))) развлекайся бро.
2 окт 19, 16:34    [21985131]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
chpasha
Member

Откуда:
Сообщений: 8441
andreykaT
сидели программисты и думали вон она скучная хотим такую же но 100500 свистелок-перделок, чтоб не разобраться - и в комплекте. а.. окей - на те скалу ))) развлекайся бро

напоминает анекдот про студента перед сдачей диплома и фею Картинка с другого сайта.
2 окт 19, 16:37    [21985134]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
забыл ник
andreykaT
я к тому что ты можешь что то переписать или переопределить чтоб это стало опциональным требованием.

Ну можешь да, software меняется, это естественно, так в чем собственно вопрос?
andreykaT
а так имхо это вообще шаг назад. ты и в джаве мог написать метод типа файндолл или что угодно еще где обязательно надо передать объект типа какой нить транзакшн менеджер. и типа опа видишь теперь точно не забудешь. ога.

Так и надо делать. А потом появляется куча джунов, которые ни черта не понимают как это работает и ответы на стекфоверфлоу становятся похожи на - ну попробуй добавить аннотацию @Whatever. супер. Правда тут четко надо различать bl-compexity и infrastrcture-complexity. Управление транзакциями - это часть бизнес-логики, хочешь ты этого или нет. Делая ее неявной ты ступаешь на очень скользкую дорожку.

andreykaT
и вот чтоб от этого бойлерплейта уйти придумали декларативный (декоративный? :)) способ с аннотацией. а то что сверху имхо это какой-то прошлый век. добро пожаловать в средневековье.

Все ошибаются, раньше я тоже думал что это круто. Любая runtime-аннотация это нетипизированная хрень, которую ни продеюажишь ни пофиксишь, зачем тебе java тогда вообще? Не для сильной типизации ли? А от бойлерплейта уйти можно многими способами, ты сам прекрасно знаешь насколько мощные implicits в scala. Вот тебе кусок логики, полностью обернутый в IO, но ты об этом врядли догадаешься просто посмотрев на код. (Тем не менее код абсолютно без сайд-эффектов)

override def run(cache:TRef[Cache], network:NetworkService): ZIO[AppEnv, Throwable, List[Profile]] =  for {
        _ <- logger.infoIO(s"Start loop execution")
        userList <- network.loadUserList
        countOfPages <- Parser.countPages(userList)
        pages <- fetchPages(countOfPages)
        userNames <- mapToUserNames(pages)
        inactiveUsers <- getInactiveUsers
        profiles <- fetchAllProfiles(userNames, inactiveUsers, cache)
        _ <- logger.infoIO(s"Elapsed time: $sec s")
      } yield profiles


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

насчет декораторов (мне кажется, это более верное название, практикуемое в ноде и несте) помню был движ несколько лет назад в сторону аспектно-ориентированного программирования. типа вот СОЛИД вот буква О вот АОП - это ж прям вот то что надо давайте расширять функционал без изменения базового кода. давайте вешать на него аспекты и аспекты на аспекты а потом еще аспекты. и опа. чо за фигня чо за макароны я вашу душу почему это тут происходит. )) вроде потом отъехали. и смотрю в новых фреймворках успешно идею похерили. а в старых рекомендуют юзать только для мониторинга и логирования. угу.

так и с имплиситами. пока это забавно. а дальше - time will say
2 окт 19, 16:39    [21985138]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
chpasha
andreykaT
сидели программисты и думали вон она скучная хотим такую же но 100500 свистелок-перделок, чтоб не разобраться - и в комплекте. а.. окей - на те скалу ))) развлекайся бро

напоминает анекдот про студента перед сдачей диплома и фею Картинка с другого сайта.

программист жава: господи, эх поеб-ться бы!
господь: на те скалу, еб-сь, сын мой.

ты про это?
2 окт 19, 16:41    [21985144]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
andreykaT

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

так и с имплиситами. пока это забавно. а дальше - time will say


В Scala3 попытаются решить эту проблему. На самом деле все дело в том что у имплиситов 4 варианта использования - и только один из них ведет к проблемам что ты описываешь. Они введут другое слово для этого, так будет понятнее.
2 окт 19, 16:56    [21985183]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
да? а как тебе переименование в импортах? :)
2 окт 19, 17:04    [21985201]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
mayton
Member

Откуда: loopback
Сообщений: 42386
andreykaT
да? а как тебе переименование в импортах? :)

Помню был проект где был class Document аж в трех разных пакетах.
Типа xml.Document, и еще два штуки подобных. Ох и треш и содомия была
когда все три надо было использовать в одном сорце.
2 окт 19, 17:07    [21985202]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
имплисит классы тоже тот еще кладезь. конечно не такой как переопределение или проброс значений, но там хоть ИДЕ справляется. фальшивые методы палочкой подрисовывает.
2 окт 19, 17:11    [21985205]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
chpasha
Member

Откуда:
Сообщений: 8441
andreykaT
программист жава: господи, эх поеб-ться бы!
господь: на те скалу, еб-сь, сын мой. Картинка с другого сайта.

ты про это? Картинка с другого сайта.

ага, в ночь перед релизом ;)
2 окт 19, 17:19    [21985213]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
andreykaT
да? а как тебе переименование в импортах? :)

Юзал один раз, но реально надо было - ситуация 1-1 как mayton описывает. Никто ж не заставляет тебя перемиеновывать, а раз в году сгодится
2 окт 19, 17:21    [21985220]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
mayton
Member

Откуда: loopback
Сообщений: 42386
Я не мог переименовать. Сторонние библиотеки. Со сложной лицензией.
2 окт 19, 17:33    [21985237]     Ответить | Цитировать Сообщить модератору
 Re: Как защитить код  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton
Я не мог переименовать. Сторонние библиотеки. Со сложной лицензией.


в скале можно сделать так
import xml.Document => XMLDocument

Main {
   val doc = Document()
   val xml = XMLDocument()
}


Мы про это
2 окт 19, 18:09    [21985265]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Java Ответить