Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2025, 15:53   #1
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 199
По умолчанию Часто ли вы используете функциональное программирование?

Сейчас модно использовать функциональное программирование, почти все языки его поддерживают.
Вот, например, как выглядит программа на Java для токенизации текста, если в качестве разделителя используется ";;" :
Код:
public class s
{
    public static
        void main( String[] args )
    {
        final var str1 = "abc;;ui56;;dfop98";
        System.out.println( "Splitting of \"" + str1 + "\":" );
        var list1 = (new java.util.Scanner( str1 ))
                        .useDelimiter( ";;" )
                        .tokens()
                        .collect( java.util.stream.Collectors.toList() );
        for (var si : list1 )
        {
            System.out.println( si );
        }
    }
}
Здесь алгоритм записан почти естесственным языком:
... берём сканер текста ( Scanner )
... в качестве разделителя используем ";;" ( useDelimiter( ";;" ) )
... разбиваем на токены ( tokens() )
... из полученных результатов формируем список ( collect toList ).

Утверждается, что функциональный код надёжнее, так как не использует индексы, итераторы, указатели. Может быть это и верно, но есть некоторые проблемы с функциональным программированием:

1. Мышление должно быть другим, не как при структурно-императивном программировании. Функциональные алгоритмы - как математика, то есть какие-то абстракции, отображения, суперпозиции, обобщения, рекурсии, суперкомбинаторы, монады. А это вообще противоестесственно для человека. Для человека более понятно когда наглядно (структурное представление), человек думает в виде последовательности манипуляций простыми конкретными понятиями (то есть императивы).

2. Синтаксис функционального программирования непонимаемый. Посмотрите на код на Python, легко понять что он делает?
Код:
numbers_out = [x // 2 for x in numbers_in if x % 2 == 0]
Не говоря уж про Haskell.

3. Когда функциональное программирование применяют для обработки коллекций и потоков данных - это ещё куда ни шло, когда алгоритм функциональный - тут большие проблемы возникают. Дело в том, что в функциональном программировании широко используется рекурсия, а она никогда легко не реализуется на ЭВМ, приходится всякие оптимизации делать, которые ухудшают понимание и сводят на нет преимущества применения функционального программирования.

4. Опытным путём установлено, что в функциональных программах 95 % ошибок отлавливаются быстро, при компиляции или при тестировании, однако 5 % ошибок не отыскиваются никогда. Они проявляются редко и спорадически, и обычно незаметно для пользователя.
В то время как если применять структурно-императивное программирование, то реально возможно путём тщательного тестирования отловить 100 % ошибок.
Изображения
Тип файла: jpg ex1.jpg (63.7 Кб, 1 просмотров)
DeepFlake вне форума Ответить с цитированием
Старый 18.05.2025, 00:33   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,371
По умолчанию

DeepFlake
Цитата:
4. Опытным путём установлено, что в функциональных программах 95 % ошибок отлавливаются быстро, при компиляции или при тестировании, однако 5 % ошибок не отыскиваются никогда. Они проявляются редко и спорадически, и обычно незаметно для пользователя.
В то время как если применять структурно-императивное программирование, то реально возможно путём тщательного тестирования отловить 100 % ошибок.
1. А можно получить ссылку на статью или другого вида литературу?
Интересно, какими методами это было установлено?

2. Что понимается под фразой "путём тщательного тестирования"?
Возможно, что 5% не обнаруживаются по той причине, что не было выполнено одно из условий этого самого "тщательного тестирования".

3.
Цитата:
Посмотрите на код на Python, легко понять что он делает?
Код:
numbers_out = [x // 2 for x in numbers_in if x % 2 == 0]
Куда уж проще?
Построить новый список из четных элементов numbers_in.
Каждый элемент нового списка поделён целочисленно на два.

4. Но, да!
Сталкивался с кодом на Pascal.
В этом коде алгоритм задачи был реализован приличным набором функций, которые вызывают друг друга. В основной программе одна строка - вызов стартовой функции.
Пришлось долго разбираться. Получил интересующую меня часть и остальное забросил.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 18.05.2025, 07:48   #3
Алексей1153
фрилансер, препод.
Участник клуба
 
Регистрация: 11.10.2019
Сообщений: 1,042
По умолчанию

если по быстродействию и затратам памяти не ударяет - на здоровье. Но обычно ударяет
Алексей1153 вне форума Ответить с цитированием
Старый 18.05.2025, 14:58   #4
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 199
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
DeepFlake
1. А можно получить ссылку на статью или другого вида литературу?
Интересно, какими методами это было установлено?
Знания передаются поколениями программистов из уст в уста, как раньше былины.
http://www.inr.ac.ru/~blackbox/Obero...v/ftkachov.htm
слайд 2.


Цитата:
2. Что понимается под фразой "путём тщательного тестирования"?
Возможно, что 5% не обнаруживаются по той причине, что не было выполнено одно из условий этого самого "тщательного тестирования".
Конечно, качество тестирование - это вопрос денег. Чем больше денег потратить, тем больше ошибок найдёшь. Но я здесь говорил про теоретическую возможность в отлове 100% ошибок. На практике, конечно, для этого слишком много денег надо.


Цитата:
3.
Куда уж проще?
Построить новый список из четных элементов numbers_in.
Каждый элемент нового списка поделён целочисленно на два.
С точки зрения преподавателя с многолетним стажем - да, понятно. А как насчёт человека, который с Python вообще не знаком? Язык должен быть понятным даже незнакомому с ним человеку, как языки Вирта всем понятны.
DeepFlake вне форума Ответить с цитированием
Старый 19.05.2025, 00:50   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,371
По умолчанию

Спасибо за развёрнутый ответ.

DeepFlake
Цитата:
Язык должен быть понятным даже незнакомому с ним человеку, как языки Вирта всем понятны.
Если рассуждать последовательно, то языки созданы для общения.
Программисты общаются с техникой, а люди - с "людями".
Но вот стоит посмотреть на иероглифы и ...
Как тут быть человеку, который незнаком с иероглифическим языком?

Нет, нет, отвечать не надо. Это просто шутка.

PS: Понимание языка происходит постепенно, в процессе его изучения.
Думаю, что не сложно придумать фразу на любом языке, которую не сразу поймут носители этого языка.
А что уж делать, когда надо перевести на другой язык, например, «Драть как сидорову козу».
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 19.05.2025, 11:00   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,845
По умолчанию

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
Но я здесь говорил про теоретическую возможность в отлове 100% ошибок.
Как говорили классики: "В любой программе есть ошибки. Ошибок не содержит лишь совершенно ненужная программа".

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
А как насчёт человека, который с Python вообще не знаком?
Я с Python-ом можно сказать совершенно не знаком, ну попадается код периодически, естественно, но это очень поверхностное знакомство. Однако не зная даже толком синтаксиса языка, сразу понял, что делает данный код. Вполне наглядно. На C++ есть куда более крутые примеры кода, в которых даже опытный программист с трудом разберется
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что же такое функциональное программирование, какие языки фунционального программирования, или почему википедия на русском врёт и дезинформирует программистов Alar Общие вопросы по программированию, компьютерный форум 33 06.08.2018 11:41
Функциональное движение BOBAH13 Общие вопросы по программированию, компьютерный форум 30 13.12.2011 09:49
часто ли вы в своих программах используете рекурсию veter_s_morya Свободное общение 32 07.11.2010 14:33
функциональное программирование - начало Индустриальный Общие вопросы C/C++ 1 13.02.2010 14:36
Как часто Вы используете логи? Levsha100 Свободное общение 33 18.11.2009 10:10