Re[3]: Про Kotlin
От: Kolesiki  
Дата: 15.12.21 14:22
Оценка: -1
Здравствуйте, AntoxaM, Вы писали:

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


S>>>Вопрос такой. Насколько эта функциональщина реально помогает? Помогает ли сократить сроки разработки, помогает ли повысить качество?


K>>Вообще никак не помогает. ФП ортогонален нормальному человеческому мышлению (императивному), а значит лишь повышает сложность кода и уж тем более сопровождаемость.

K>>Ключ качественно кода (для проф.инженера) далеко не скорость разработки, а понимаемость и сопровождаемость. "Лучше день потерять, потом за 5 минут долететь". Любая долгоживущая система нуждается в улучшениях, поэтому простой императивный код будет куда полезнее для бизнеса, чем хитровы;;;;;нные вложения на ФП.

AM>гм, т.е. LINQ, лямбды не используешь, продолжаешь for фигачить?


Да причём тут это?? Нашёл ещё аналогию... А если индеец воткнул себе в жопу перья — он теперь страус штоле?? Вот ты такую же чушь сказал.

Есть исторически сложившиеся элементы языка. Та же "лямбда" не более "функциональна", чем.... обычный указатель на функцию(!!!). Кой, напомню, прекрасно живёт в Си и почему-то ни один ФП язык не считается "наследником Си"

ФП — это вообще не про ваши местечковые ЛИНК или лямбды. ФП — это прежде всего ПАРАДИГМА, способ организации программы. Грубо говоря, человеку дали ведро функций и сказали — делай что хочешь, у нас больше ничего нет. Вкладывай, подставляй, комбинируй, но чтобы на выходе было "4". Есессно, от таких "парадигм" у нормального человека крыша едет!

А то, что в какой-нть C# добавили возможность "передать функцию", ну так это считай "добавили возможностей из Си"! что тут "функционального"-то? Просто ещё один вид параметров, как int или string.

Ох уж эти амбассадоры ФП-психушки... не понимают сути своей же парадигмы, но везде отчаянно аргументируют "а вы фсе используете наше ФП!". Может, у вас ещё "детство отняли"?
Re[3]: Про Kotlin
От: Kolesiki  
Дата: 15.12.21 14:25
Оценка: -3
Здравствуйте, netch80, Вы писали:

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


K>> ФП ортогонален нормальному человеческому мышлению (императивному),


N>Человеческое мышление не является в чистом виде ни императивным, ни функциональным. Ближе всего к нему событийно-управляемое построение с короткими зависимостями, но сами зависимости скорее строятся функционально (что от чего зависит), чем императивно (когда уже разложена последовательность выполнения). Императивность возникает только там, где это разложение уже сделано в явном виде.


N>Привычка (заметной) части программистов к императивному подходу не означает, что так делают все.



Господи, ну и чушь ты лепишь! Хорошо, отойдём от ИТ. Зайди на кухню, открой ЛЮБОЙ РЕЦЕПТ и скажи — в каком виде записан рецепт — в ФП или императивно? А это, на минуточку, практика ВСЕХ 7 МИЛЛИАРДОВ ЛЮДЕЙ. Хорошо ты так обделался, да?
ФП никогда не был И НЕ БУДЕТ методом построения программ, ибо мозг — это вам не стек и не машина Тьюринга. Мозг прочёл по ИМПЕРАТИВНОЙ инструкции "выполнить пункт 3" — он его выполнит и перейдёт к пункту 4. Вот это и есть МАКСИМАЛЬНО удобное для мозга построение программ — императивно.
Re[4]: Про Kotlin
От: scf  
Дата: 15.12.21 14:27
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

K>Есть исторически сложившиеся элементы языка. Та же "лямбда" не более "функциональна", чем.... обычный указатель на функцию(!!!). Кой, напомню, прекрасно живёт в Си и почему-то ни один ФП язык не считается "наследником Си"


Ну неправда же. У лямбды есть bound context, позволяющий ссылаться на внешний скоуп. И, что самое важное, у лямбды есть синтаксический сахар, позволяющий объявить "указатель на функцию" прямо в том месте, где она используется, а не в соседней функции.
"код, идентичный ФП" можно отлично написать без лямбд, на тех же указателях на функции и анонимных классах, но это же будет не то. Синтаксический оверхед ломает всю идею.
Re[4]: Про Kotlin
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.12.21 15:59
Оценка:
Здравствуйте, Kolesiki, Вы писали:


K>А то, что в какой-нть C# добавили возможность "передать функцию", ну так это считай "добавили возможностей из Си"! что тут "функционального"-то? Просто ещё один вид параметров, как int или string.


Добавили по сути кодогенерацию. То yield, лямбды, async await порождают анонимные классы. А взято из ФП это или нет мне наплевать, однако это колоссально упрощает программирование.
Суть то в упрощении как написании так и чтении
и солнце б утром не вставало, когда бы не было меня
Re[5]: Про Kotlin
От: alex_public  
Дата: 15.12.21 19:03
Оценка:
Здравствуйте, scf, Вы писали:

K>>Есть исторически сложившиеся элементы языка. Та же "лямбда" не более "функциональна", чем.... обычный указатель на функцию(!!!). Кой, напомню, прекрасно живёт в Си и почему-то ни один ФП язык не считается "наследником Си"


scf>Ну неправда же. У лямбды есть bound context, позволяющий ссылаться на внешний скоуп. И, что самое важное, у лямбды есть синтаксический сахар, позволяющий объявить "указатель на функцию" прямо в том месте, где она используется, а не в соседней функции.

scf>"код, идентичный ФП" можно отлично написать без лямбд, на тех же указателях на функции и анонимных классах, но это же будет не то. Синтаксический оверхед ломает всю идею.

Не стоит путать лямбда-функции и замыкания. Да, во многих языках это почти синонимы, но это в них просто так сложилось. А так, замыкания вполне себе существуют и не для анонимных функций (например для классических вложенных функций). Да и анонимные функций без замыканий тоже вполне себе могут существовать.
Re[4]: Про Kotlin
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 16.12.21 07:36
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

K>И я не увидел тут опровержения — ты что, думаешь в стиле ЛИСПа что ли?? Возьми рецепт любой кухарки — там ИМПЕРАТИВНО излагают пункт за пунктом что надо делать.


Нет, конечно.
Рецепт начинается с: например: возьмите ингредиенты: яйца, сахар, манка, мука, соль, сахар, кефир (указаны количества каждого). Это _функциональная_ зависимость: прежде чем собирать это, компоненты должны появиться, и кухарка решает задачу _зависимости_ — как именно реализовать — может, надо зайти в соседний подъезд в магазин, а, может, ещё съездить купить кур для яиц, посадить буряк для сахара и накопать шахту для соли. Это на входе.

Вот наугад ткнул в рецепты, попал в https://academy.oetker.ru/pirogi/vozdushnaya-sharlotka-s-yablokami/ (не реклама, почти первое из гуглоподсказки)

1. Для приготовления шарлотки нам понадобятся четыре некрупных яблока, лучше отдавать предпочтение кислым сортам. Очищаем яблоки от плодоножек и семечек, нарезаем тонкими дольками.
2. Для приготовления теста просеиваем муку с разрыхлителем. Оставляем на время.


Любой кухарке известно, что чищенные и резаные яблоки сохнут. Значит, пункт 2 в норме должен быть выполнен до пункта 1, если хочется свежайших яблок. Связи между пунктами нет, могут быть выполнены в любом порядке. На самом деле пункт 1 нужен только перед пунктом 5.
(Или же завернуть плотно в кулёчек и отложить. Это не сказано, надо догадаться.)

3. Охлажденные куриные яйца разбиваем в высокую посуду и взбиваем с помощью миксера, постепенно увеличивая скорость. Добавляем сахарный песок. Продолжаем взбивать, пока масса не посветлеет и не увеличится в объеме.
4. Ставим скорость миксера на минимум и постепенно добавляем просеянную муку с разрыхлителем. Тесто должно получиться густым, как сметана, и быть однородным.


3 и 4 не делятся, ok. 4 зависит от 2.

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


Снова внешние зависимости от компонентов, ok. Уже нужны яблочные дольки (пункт 1). На самом деле тесто ещё не нужно! Или его может готовить кто-то параллельно.

Дальше, да, пункты строго последовательно зависят друг от друга и записаны по порядку.

Так вот — резюмирую — тут много чисто функциональных зависимостей, которые 1) могут выполняться параллельно (резать и замешивать могут разные люди; готовить форму, разогревать духовку и т.д. — тоже), 2) могут переставляться, 3) не все прописаны (компоненты, плита/духовка, предварительный прогрев и всё такое).

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

K> Это и есть самый естественный путь в ИТ. Что за кретины набежали со своими минусами — ума не приложу — видимо, ФП им напрочь мозг выел. Заодно и совесть.


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

Минусы таки правильны.
The God is real, unless declared integer.
Отредактировано 16.12.2021 7:40 netch80 . Предыдущая версия .
Re[4]: Про Kotlin
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 16.12.21 07:46
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Господи, ну и чушь ты лепишь! Хорошо, отойдём от ИТ. Зайди на кухню, открой ЛЮБОЙ РЕЦЕПТ и скажи — в каком виде записан рецепт — в ФП или императивно?


См. только что отправленный комментарий. Если ты видишь формально последовательную запись и веришь этому, ты никогда не имел реальной практики готовки больше 2-3 случаев. Максимум что было — помогать жене/маме.
Ну или всё забыл, тоже может быть.

K> А это, на минуточку, практика ВСЕХ 7 МИЛЛИАРДОВ ЛЮДЕЙ.


Откуда ты знаешь, как пишутся рецепты в, например, Иране или в долине Балием? У аборигенов Рюкю?
У тебя есть точные данные расписывать за 7 миллиардов людей?

K> Хорошо ты так обделался, да?


Ты.

K>ФП никогда не был И НЕ БУДЕТ методом построения программ, ибо мозг — это вам не стек и не машина Тьюринга. Мозг прочёл по ИМПЕРАТИВНОЙ инструкции "выполнить пункт 3" — он его выполнит и перейдёт к пункту 4. Вот это и есть МАКСИМАЛЬНО удобное для мозга построение программ — императивно.


В случае кулинарии — работает максимум первые пару раз. Потом начинается редактирование в формат графа зависимостей. Да, многие это делают неосознанно и не могут сформулировать — для них естественно, что раз купил какой-нибудь латук-айсберг вчера, решив приготовить праздничный салат, то он уже есть.
Профессиональные повара держат в голове десятки и сотни зависимостей и способны без напряга сознания рассчитать любой график работ.
The God is real, unless declared integer.
Re[4]: Про Kotlin
От: AntoxaM  
Дата: 16.12.21 07:51
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

AM>>гм, т.е. LINQ, лямбды не используешь, продолжаешь for фигачить?


K>Да причём тут это?? Нашёл ещё аналогию... А если индеец воткнул себе в жопу перья — он теперь страус штоле?? Вот ты такую же чушь сказал.


K>Есть исторически сложившиеся элементы языка. Та же "лямбда" не более "функциональна", чем.... обычный указатель на функцию(!!!). Кой, напомню, прекрасно живёт в Си и почему-то ни один ФП язык не считается "наследником Си"


Возможность написать функцию по месту, и сразу передать куда надо, контроль типов этой функции, возможность обратиться к внешнему скоупу, да ещё всё это кратко и понятно — это всё элементы пришедшие из ФП.
В С от этого — только указатель передать. Да и не удивлюсь, если это в лиспе каком-нить подсмотрели.

LINQ-to-Object — так вообще в чистую работа с коллекциями как в ФП языках.

K>ФП — это вообще не про ваши местечковые ЛИНК или лямбды. ФП — это прежде всего ПАРАДИГМА, способ организации программы. Грубо говоря, человеку дали ведро функций и сказали — делай что хочешь, у нас больше ничего нет. Вкладывай, подставляй, комбинируй, но чтобы на выходе было "4". Есессно, от таких "парадигм" у нормального человека крыша едет!


ниасилил?

K>А то, что в какой-нть C# добавили возможность "передать функцию", ну так это считай "добавили возможностей из Си"! что тут "функционального"-то? Просто ещё один вид параметров, как int или string.

Этот всего лишь "ещё один вид параметров" позволяет делать композицию из функций и позволяет писать в ФП стиле

K>Ох уж эти амбассадоры ФП-психушки... не понимают сути своей же парадигмы, но везде отчаянно аргументируют "а вы фсе используете наше ФП!". Может, у вас ещё "детство отняли"?


сколько экспрессии, прям переживаю
Re: Про Kotlin
От: elmal  
Дата: 16.12.21 12:51
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Из всей функциональщины, пожалуй, лишь Kotlin более менее распространен в реальной разработке.

Кстати говоря. Котлин более менее распространен в реальной разработке в значительной мере потому, что он содержит некоторые фичи, которые позволяют некоторые вещи, которые принято делать в функциональном стиле выполнять в императивном. Это касается в первую очередь асинхронщины. То есть поведение по умолчанию от толпы обезьян которые не ленятся — это callback hell. Кто поумнее и поопытнее — заюзают функциональные реактивные библиотеки, и будут всякими монадами отлавливать ошибки исполнения. А Котлин как раз позволяет писать асинхронщину максимально близко к императивному стилю, в некоторых случаях это оказывается очень удобно.
Re[8]: Про Kotlin
От: ути-пути Россия  
Дата: 16.12.21 14:18
Оценка: +1
Здравствуйте, vaa, Вы писали:

vaa>возможно, но мне каскады скобок нравятся тем что вносят ясность и однозначность

vaa>в порядок вызова
vaa>
vaa>((*) ((+) 1 1) 2);;
vaa>


Тогда уж я бы это на forth переписал, где как пишешь, так и вызывается.
1 1 + 2 *

И никакого шума от скобок.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[9]: Про Kotlin
От: Sinclair Россия https://github.com/evilguest/
Дата: 16.12.21 14:21
Оценка:
Здравствуйте, ути-пути, Вы писали:

УП>И никакого шума от скобок.

Ну так и FPN тоже нормально разбирается безо всякого шума: * + 1 1 2
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Про Kotlin
От: ути-пути Россия  
Дата: 16.12.21 14:33
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну так и FPN тоже нормально разбирается безо всякого шума: * + 1 1 2


Но не в том порядке, как пишется, обратная польская запись и стек выглядят понятнее, если уж уходить от привычной математической записи.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[10]: Про Kotlin
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 18.12.21 06:45
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

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


УП>>И никакого шума от скобок.

S>Ну так и FPN тоже нормально разбирается безо всякого шума: * + 1 1 2

Они обе отвратительно разбираются, когда уровней в дереве операций более трёх.
The God is real, unless declared integer.
Re: Про Kotlin
От: Ночной Смотрящий Россия  
Дата: 19.12.21 07:21
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Из всей функциональщины, пожалуй, лишь Kotlin более менее распространен в реальной разработке.


Kotlin это не функциональщина, это гибридный язык. Примерно как C#.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.