[Resolved] Чем функциональный язык отличается от Объектно-ориентированного

Почему некоторые говорят что в Java нет функций, а другие говорят что есть? Прояснил все, что возможно по поводу функций, но не улавливаю, что является функцией например у С#

public void name(string text)
{
System.Console.WriteLine(text);
}

Что из этих строчек является функцией string text? Берет ли функция в программировании истоки из определения в математики?

В java есть похожая строчка:

public void name(string){
System.out.println(text);
}

разве это нельзя назвать функцией? Почему говорят что в java есть классы, а не функции? Буду благодарен за ответы.

public void name(string){
System.out.println(text);
}

Для меня это метод, для кого-то - функция. Насколько я понимаю, это просто разница в толковании.

В программировании обычно слово “функция” используют в качестве синонима слову “метод”.

Математическая функция же несколько отличается в плане жесткой связи input и output аргументов с отсутствием так называемых побочных эффектов.

В Java < 8 используется императивный стиль программирования. И если придраться к определению мат. функции, то можно сказать, что оно несколько несовместимо с концепцией вычислений, влияющих на внутреннее состояние объектов. Восьмерка же привнесла функциональный стиль, где базовой концепцией является возможность использования функций в качестве first-class citizens. Грубо говоря, способность параметризации поведения через lambda expressions, представленных в виде анонимных функций / возможность функциональной композиции без выше упомянутых side-effects.

Любой метод является функцией/процедурой, но не любая функция является методом.
Говорить что это полные синонимы не совсем корректно.
ЗЫ: как и в джаве, так и в си-диезах все функции являются методами.

На сколько помню, в паскалях\дельфях функции и процедуры отличались по смыслу :smile:

Вы наверное хотели сказать “по синтаксису”. Процедура частный случай функции.
Плюсы сказали “void foo()” и послали процедуры лесом, дабы не писать паскакальные function/procedure.

Функция и процедура почти одно и то же (на примере бейсика, вместо словообильного паскаля: процедура == функция без возвращаемого значения, вроде sub вместо function, если я ещё это помню).

Функция и метод - обычно одно и то же в понимании обывателей-кодописцев.
Но в некоторых языках есть функции без классов (метод без класса не создать).
Наоборот, в джаваскрипте функция по сути может заменить объект (я про классический джаваскрипт без классов).
И функции из функционального программирования LINQ (C#/F#/VB.NET), Java и целый список языков. Тот случай, когда x = x + 1 неверно. Кстати, туда, в делегат, очень часто передают метод (то аналог указателя на функцию).

Ответ топикстартеру: думаю, что по привычке. Скорее всего, привычка пришла от людей, которые пишут на C++, в которм есть и методы, и функции (совместимость с C).

Спасибо всем, очень много разных по сложности ответов, но в целом понятно.

P.S. мысль правда потерял от @ArtOfLife в цитате:

где базовой концепцией является возможность использования функций в качестве first-class citizens. Грубо говоря, способность параметризации поведения через lambda expressions, представленных в виде анонимных функций / возможность функциональной композиции без выше упомянутых side-effects.

но думаю на досуге почитаю про java 8 и разберусь =)

  • Начните с отличий между first-class / second-class citizens.
  • Далее найдите определение lamba expression.
  • Тут же почитайте о концепции behavior parameterization.
  • Ну и напоследок - что же подразумевается под side-effect в программировании.
  • А затем свяжите полученную информацию с парадигмой функционального программирования и попробуйте найти концептуальные отличия между Java <= 7 и Java 8.

В C# и Java не используются термины “функция” и “процедура”, здесь только методы. В других языках (хотя за все-все-все ЯПы отвечать сложно) процедура не возвращает значение, функция - возвращает.

От себя могу добавить…мне помогла книга
хорошая книжка
там хорошо разбрано применение лямбда выражений.