Re[7]: mapToInt
От: Yoriсk  
Дата: 05.01.15 17:57
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>mapToInt это следствие того, что в Java все типы делятся на примитивные и классы.


И поэтому деньги в int хранятся?

Q>>А `.mapToMyCustomType()` есть?

vsb>map(u -> u.getAnything()) есть.

У класса user есть поле типа Currency. Как это будет выглядеть в java?
Отредактировано 05.01.2015 17:57 Yoriсk . Предыдущая версия .
Re[8]: mapToInt
От: vsb Казахстан  
Дата: 05.01.15 19:11
Оценка:
Здравствуйте, Yoriсk, Вы писали:

vsb>>mapToInt это следствие того, что в Java все типы делятся на примитивные и классы.


Y>И поэтому деньги в int хранятся?


Да хоть в чём.

Q>>>А `.mapToMyCustomType()` есть?

vsb>>map(u -> u.getAnything()) есть.

Y>У класса user есть поле типа Currency. Как это будет выглядеть в java?


map(u -> u.getAnything()).collect(currencySum())


currencySum это т.н. collector, который пишется один раз и по-хорошему предоставляется разработчиком класса Currency. Пишется в 3 строчки. Можно без лишних функций через reduce, если это делается один раз и не хочется писать реюзабельный код:

        Currency sum = users.stream()
                .filter(u -> u.isActive())
                .map(u -> u.getMoney())
                .reduce(Currency.ZERO, (x, y) -> x.add(y));


Кстати это всё одной строчкой распараллеливается на много потоков, если у нас пользователей многие миллионы. И всё аккуратно посчитается, просуммируется, и вернёт один результат довольно эффективно. Насколько такое однострочное распараллеливание востребовано, я затрудняюсь сказать, я таким вряд ли буду часто пользоваться, но фича такая есть.
Отредактировано 05.01.2015 19:22 vsb . Предыдущая версия . Еще …
Отредактировано 05.01.2015 19:17 vsb . Предыдущая версия .
Отредактировано 05.01.2015 19:12 vsb . Предыдущая версия .
Re[3]: Extension methods
От: lazy-cjow-rhrr Россия lj://_lcr_
Дата: 05.01.15 20:34
Оценка: 1 (1)
vsb,

Q>>
Q>>var y = x.First()
Q>>    .Second()
Q>>    .Third()
Q>>    .Fourth();
Q>>

Q>>
Q>>var y = Fourth(Third(Second(First(x)))); // )))))))
Q>>


vsb>Ну сахар это, сахар. Кто так пишет, First, Second, Third. Вынеси в промежуточную переменную и разница вообще сотрётся. Искусственный пример, надуманный. Я пишу постоянно такие утилитные мелкие методы на джаве. Жить можно. Смотрится в C# лучше, я не спорю, но это небольшая разница.


vsb>
vsb>var f1 = First();
vsb>var f2 = Second(f1);
vsb>var f3 = Third(f2);
vsb>var f4 = Fourth(f3);
vsb>var f5 = Nth(x, 5);
vsb>



Преимуществ у цепочек несколько
1. это выражение, и может быть использоваться везде, где можно вставить выражение. И для Скалы, Немерле, F# и подобных это означает "везде".
2. чёткое и ясное изложение того, что собственно требуется, мысль записана в естественном порядке справа налево. Вспомогательные вещи типа скобок, объявлений типов, функций-хелперов и вспомогательных переменных (им ещё имена нужны!) — это шум, наложенный на основной сигнал.
3. удобство программирования в IDE: ставишь точку и выбираешь метод. Если у тебя есть массив, то ты должен знать, что его можно засунуть в ArrayUtil.removeDuplicates(...), а если ты этого не знаешь — ты пишешь велосипед или гуглишь. В случае метода-расширения ты ставишь точку и находишь нужный метод.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re: Нужен ли C#?
От: Aлeкceй  
Дата: 15.01.15 18:28
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Может ну её нафиг, эту Джаву, и нырнуть в C#? На макбук вроде венда ставится. Проблем то по сути не испытываю, но боязно в один момент остаться эдаким знатоком кобола. Языки новые мониторю, всё со своими проблемами. Не мотивирует переходить.


Ну это все-таки не совсем кобол. Платформа развивается (особенно вот в последние годы), даже пилят нормальные дженерики и примитивы убрать собираются. Но и самое главное, что новые проекты пока что пишутся, не как на джаваскрипт, конечно, но все же. В любом случае, на дотнет кор не скоро еще начнут с джавы переписывать, года так 2-3 пройдет, и вообще вопрос, будет ли кто-нибудь переписывать.
Re[2]: Нужен ли C#?
От: agat50  
Дата: 15.01.15 20:36
Оценка:
Здравствуйте, Aлeкceй, Вы писали:

A>Здравствуйте, vsb, Вы писали:


vsb>>Может ну её нафиг, эту Джаву, и нырнуть в C#? На макбук вроде венда ставится. Проблем то по сути не испытываю, но боязно в один момент остаться эдаким знатоком кобола. Языки новые мониторю, всё со своими проблемами. Не мотивирует переходить.


A>Ну это все-таки не совсем кобол. Платформа развивается (особенно вот в последние годы), даже пилят нормальные дженерики и примитивы убрать собираются. Но и самое главное, что новые проекты пока что пишутся, не как на джаваскрипт, конечно, но все же. В любом случае, на дотнет кор не скоро еще начнут с джавы переписывать, года так 2-3 пройдет, и вообще вопрос, будет ли кто-нибудь переписывать.


А зачем переписывать? Есть же ikvm. Я правда не знаю насколько он активно используется.
Re[4]: Оффтоп, наверное
От: Mamut Швеция http://dmitriid.com
Дата: 15.01.15 21:13
Оценка:
LCR>2. чёткое и ясное изложение того, что собственно требуется, мысль записана в естественном порядке справа налево.

Ээээ. Что? Я вот пишу слева направо

Более того, записи в стиле
f(g(x))

x = f()
y = g()

h(i(j(x, y)))

это же банальная математическая запись, которую еще в школе изучают



А в ФП стиле сделать цепочку раз плюнуть:
start() ->
  case chain([ fun some_fun/1
             , fun some_fun/2
             ....
             ]) of
    {error, _} = E -> E;
    {ok, Output}   -> Output
  end.
  
some_fun1(Input0) ->
  Input = modify_input(Input0),
  {ok, Input}.
  
some_fun2(Input0) ->
  try
    {ok, weird_stuff(Input0)}
  catch
    _:Reason -> {error, Reason}
  end.
 
%% сама цепочка
chain([], Output) -> {ok, Output};
chain([F|T], Input) ->
  case F(Input) of
    {ok, Output}   -> chain(T, Output);
    {error, _} = E -> E
  end.


dmitriid.comGitHubLinkedIn
Re[4]: Extension methods
От: BrainSlug Израиль  
Дата: 15.01.15 21:43
Оценка:
ну Mamut уже ответил, я только добавлю — имхо скобки vs точки, не суть важно(хотя точки и мне больше нравятся...... ), а вот возможное применение — это внесение всяких примесей через расширения+интерфейсы.
.
Отредактировано 15.01.2015 21:50 BrainSlug . Предыдущая версия . Еще …
Отредактировано 15.01.2015 21:50 BrainSlug . Предыдущая версия .
Re: Нужен ли C#?
От: VladCore  
Дата: 28.01.15 21:45
Оценка: 4 (1)
Здравствуйте, vsb, Вы писали:

vsb>Часто читаю мнение. Мол C# безнадёжно обогнал джаву. Сам C# знаю примерно понаслышке (VS запускал, код писал, но, грубо говоря, месяц против 6 лет на Java).


Дело не в языке. У MS тоже был джава. В первой версии дот нета. я там вот что написал от шока после перехода на джаву из дот нета Java большими круглыми глазами сквозь очки .NET

А обогнал ли дот нет даже нет повода сомневаться. Наш MS всегда опаздывает, но все себе забирает.
Re[4]: Нужен ли C#?
От: Grienders Земля  
Дата: 12.02.15 16:19
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Что касается немерла, то писать на нем проще чем на шарпе. К хаскелю он никаким боком. Хаскель это эталонный ФЯ. Немерл, гибрид. В нем нет разных извратов вроде экзистенциальных типов и т.п. Он сугубо практичен. В двух словах Немерл — это соеденение удобного практичного языка и мощной макро-системы. Из минусов — не очень качественная реализация.


Код .NET ведь открыли, Nemerle скоро должен начать захватывать мир, вроде как? Мне он нравился, но я потом с винды уже на linux и mac, а там .net нет (моно не считается).
Re[2]: Нужен ли C#?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.02.15 10:14
Оценка: +2 -1
Здравствуйте, andyag, Вы писали:

A>2. В Java прикольные инструменты типа Gradle — одновременно и "проект", и "зависимости", и билд скрипт и ещё куча всего. В .NET всё отдельно: проекты отдельно (их делает студия, руками не получится), зависимости — NuGet (можно наверное руками писать XML, но обычно — мышкой или в студийной консоли), билд-скрипты — MSBuild (ещё более другой XML).


Ты не в теме.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: Нужен ли C#?
От: andyag  
Дата: 21.02.15 10:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, andyag, Вы писали:


A>>2. В Java прикольные инструменты типа Gradle — одновременно и "проект", и "зависимости", и билд скрипт и ещё куча всего. В .NET всё отдельно: проекты отдельно (их делает студия, руками не получится), зависимости — NuGet (можно наверное руками писать XML, но обычно — мышкой или в студийной консоли), билд-скрипты — MSBuild (ещё более другой XML).


AVK>Ты не в теме.


Развейте мысль.
Re[4]: Нужен ли C#?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.02.15 22:36
Оценка:
Здравствуйте, andyag, Вы писали:

AVK>>Ты не в теме.

A>Развейте мысль.

.csproj это и файл проекта, и скрипт для msbuild, и ссылка на файл с описанием пакетов и еще много чего еще. И при этом для многих вещей есть design time support в студии.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[5]: Нужен ли C#?
От: andyag  
Дата: 22.02.15 09:06
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, andyag, Вы писали:


AVK>>>Ты не в теме.

A>>Развейте мысль.

AVK>.csproj это и файл проекта, и скрипт для msbuild, и ссылка на файл с описанием пакетов и еще много чего еще.


Мысль немного другая была. Типичный проект на дотнете состоит из:

1. Одного sln. Интеграция со студией — да, есть смысл править руками — нет.
2. Одного repositories.config. Интеграция со студией — да, есть смысл править руками — нет.
3. Кучи csproj. Интеграция со студией — да, есть смысл править руками — в очень-очень редких случаях.
4. Кучи packages.config. Интеграция со студией — да, есть смысл править руками — нет.
5. Одного (или нескольких) отдельных "Build.xml", где в зависимости от специфики проекта описывается процедура построения дистрибутива (если это десктопный софт), либо процедура деплоймента (если веб). Интеграция со студией — нет, пишется полностью руками — да.

В своём оригинальном сообщении я это месиво сравниваю с Gradle — в нём для солюшна такого же масштаба будет один общий build.gradle на все проекты, плюс по одному build.gradle на каждый проект отдельно. Эти файлы пишутся руками, IDE туда никакого мусора не кладёт. Адреса репозиториев, зависимости из этих репозиториев, процедуры сборки дистрибутива, запуска, прогона тестов — это всё описывается в единственном месте.

AVK>И при этом для многих вещей есть design time support в студии.


Ну я так и написал — "мышкой".
Re[2]: Нужен ли C#?
От: andyag  
Дата: 22.02.15 16:59
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>Здравствуйте, vsb, Вы писали:


vsb>>Часто читаю мнение. Мол C# безнадёжно обогнал джаву. Сам C# знаю примерно понаслышке (VS запускал, код писал, но, грубо говоря, месяц против 6 лет на Java).


VC> Java большими круглыми глазами сквозь очки .NET


Нет out-параметров, каждый решает проблему по своему. Проходит через пару недель реабилитации в форме активного портирования .NET паттернов в JAVA. Пиши в комментариях что делаешь ты вместо out.

Ответ очевиден: возвращать всё что нужно вернуть. Я параллельно пишу на дотнете и на джаве, не помню чтобы отсутствие out/ref хоть раз помешало.

Нет сборок.

Есть. Это файлы с расширением jar.

IDEA по умолчанию предлагает все зависимые библиотеки запаковать в один свой JAR.

Здесь есть отличия между миром .NET и миром Java: в мире дотнет вы полностью полагаетесь на студию — т.к. сборка в студии первична. В мире Java не так. В Java есть инструменты типа Gradle/Maven, которые собственно описывают все нюансы вашего проекта, а среды типа Idea смотрят на эти Gradle/Maven и глядя на них делают свой IDE-шный проект. Этот IDE-шный проект вторичен — его обычно даже в репозиторий с кодом не кладут.

У всех проблемы с деплойем приложений на Application Server – это, по моему, самая популярная проблема в JAVA.

Я не могу сказать, что Майрософтовский WebDeploy сильно адекватнее, чем деплоймент приложения на Tomcat например. Но это не очень важно: в мире Java сейчас тренд "bring your own servlet container" — деплоймент теперь делается на уровень ниже. Для Gradle даже есть плагин, который сразу строит образ Docker: собрал и деплой на любой линукс. Я тут немного в кучу собрал servlet container и application server, но, ИМХО, не принципиально: JEE — это далеко не вся Java.

Нет сборок – нет подписи сборок. Ты не можешь быть уверен какая именно версия попадет в продакшн. Пишите в коментариях если я не прав.

Всё сильно зависит от формата приложения и от процедуры деплоймента. Выше уже описал вариант с Docker. Там не то что "конкретно вот эту версию библиотеки" можно сделать, там конкретный билд JRE можно указать.

Нет привычного Windows окружения с хорошей интеграцией в .NET:

Службы Windows & IIS

Чтобы запустить .NET веб-приложение под Windows, нужно ставить IIS. Чтобы запустить Java веб-приложение, нужна только Java. Потому что Tomcat/Jetty доступны как библиотеки — их не обязательно качать, устанавливать, настраивать.
Есть инструменты для того, чтобы оформить свою Java-программу как Windows service. Популярны, всякие JIRA/YouTrack/TeamCity и ещё куча коробочных продуктов так и работают.

Простота обслуживания БД в SQL Server/Express.

Тут не понятно — какое отношение это имеет к Java или .NET? Если речь про IDE, то в Idea Ultimate есть возможность лазить на любые сервера БД прямо из среды. В студии не помню — кроме SQL Server куда-то лазить можно?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.