![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 16.05.2024
Сообщений: 199
|
![]()
Сейчас модно использовать функциональное программирование, почти все языки его поддерживают.
Вот, например, как выглядит программа на Java для токенизации текста, если в качестве разделителя используется ";;" : Код:
... берём сканер текста ( Scanner ) ... в качестве разделителя используем ";;" ( useDelimiter( ";;" ) ) ... разбиваем на токены ( tokens() ) ... из полученных результатов формируем список ( collect toList ). Утверждается, что функциональный код надёжнее, так как не использует индексы, итераторы, указатели. Может быть это и верно, но есть некоторые проблемы с функциональным программированием: 1. Мышление должно быть другим, не как при структурно-императивном программировании. Функциональные алгоритмы - как математика, то есть какие-то абстракции, отображения, суперпозиции, обобщения, рекурсии, суперкомбинаторы, монады. А это вообще противоестесственно для человека. Для человека более понятно когда наглядно (структурное представление), человек думает в виде последовательности манипуляций простыми конкретными понятиями (то есть императивы). 2. Синтаксис функционального программирования непонимаемый. Посмотрите на код на Python, легко понять что он делает? Код:
3. Когда функциональное программирование применяют для обработки коллекций и потоков данных - это ещё куда ни шло, когда алгоритм функциональный - тут большие проблемы возникают. Дело в том, что в функциональном программировании широко используется рекурсия, а она никогда легко не реализуется на ЭВМ, приходится всякие оптимизации делать, которые ухудшают понимание и сводят на нет преимущества применения функционального программирования. 4. Опытным путём установлено, что в функциональных программах 95 % ошибок отлавливаются быстро, при компиляции или при тестировании, однако 5 % ошибок не отыскиваются никогда. Они проявляются редко и спорадически, и обычно незаметно для пользователя. В то время как если применять структурно-императивное программирование, то реально возможно путём тщательного тестирования отловить 100 % ошибок. |
![]() |
![]() |
![]() |
#2 | ||
Старожил
Регистрация: 23.10.2010
Сообщений: 2,371
|
![]()
DeepFlake
Цитата:
Интересно, какими методами это было установлено? 2. Что понимается под фразой "путём тщательного тестирования"? Возможно, что 5% не обнаруживаются по той причине, что не было выполнено одно из условий этого самого "тщательного тестирования". ![]() 3. Цитата:
Построить новый список из четных элементов numbers_in. Каждый элемент нового списка поделён целочисленно на два. 4. Но, да! Сталкивался с кодом на Pascal. В этом коде алгоритм задачи был реализован приличным набором функций, которые вызывают друг друга. В основной программе одна строка - вызов стартовой функции. Пришлось долго разбираться. Получил интересующую меня часть и остальное забросил. ![]()
Как-то так, ...
|
||
![]() |
![]() |
![]() |
#3 |
фрилансер, препод.
Участник клуба
Регистрация: 11.10.2019
Сообщений: 1,042
|
![]()
если по быстродействию и затратам памяти не ударяет - на здоровье. Но обычно ударяет
![]() |
![]() |
![]() |
![]() |
#4 | |||
Форумчанин
Регистрация: 16.05.2024
Сообщений: 199
|
![]() Цитата:
http://www.inr.ac.ru/~blackbox/Obero...v/ftkachov.htm слайд 2. Цитата:
Цитата:
|
|||
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,371
|
![]()
Спасибо за развёрнутый ответ.
DeepFlake Цитата:
Программисты общаются с техникой, а люди - с "людями". ![]() Но вот стоит посмотреть на иероглифы и ... Как тут быть человеку, который незнаком с иероглифическим языком? ![]() Нет, нет, отвечать не надо. Это просто шутка. ![]() PS: Понимание языка происходит постепенно, в процессе его изучения. Думаю, что не сложно придумать фразу на любом языке, которую не сразу поймут носители этого языка. А что уж делать, когда надо перевести на другой язык, например, «Драть как сидорову козу».
Как-то так, ...
|
|
![]() |
![]() |
![]() |
#6 | |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,845
|
![]() Цитата:
Я с Python-ом можно сказать совершенно не знаком, ну попадается код периодически, естественно, но это очень поверхностное знакомство. Однако не зная даже толком синтаксиса языка, сразу понял, что делает данный код. Вполне наглядно. На C++ есть куда более крутые примеры кода, в которых даже опытный программист с трудом разберется ![]() E-Mail: arigato.freelance@gmail.com
|
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Что же такое функциональное программирование, какие языки фунционального программирования, или почему википедия на русском врёт и дезинформирует программистов | 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 |