Почему некоторые говорят что в Java нет функций, а другие говорят что есть? Прояснил все, что возможно по поводу функций, но не улавливаю, что является функцией например у С#
public void name(string text)
{
System.Console.WriteLine(text);
}
Что из этих строчек является функцией string text? Берет ли функция в программировании истоки из определения в математики?
В java есть похожая строчка:
public void name(string){
System.out.println(text);
}
разве это нельзя назвать функцией? Почему говорят что в java есть классы, а не функции? Буду благодарен за ответы.
В программировании обычно слово “функция” используют в качестве синонима слову “метод”.
Математическая функция же несколько отличается в плане жесткой связи input и output аргументов с отсутствием так называемых побочных эффектов.
В Java < 8 используется императивный стиль программирования. И если придраться к определению мат. функции, то можно сказать, что оно несколько несовместимо с концепцией вычислений, влияющих на внутреннее состояние объектов. Восьмерка же привнесла функциональный стиль, где базовой концепцией является возможность использования функций в качестве first-class citizens. Грубо говоря, способность параметризации поведения через lambda expressions, представленных в виде анонимных функций / возможность функциональной композиции без выше упомянутых side-effects.
Любой метод является функцией/процедурой, но не любая функция является методом.
Говорить что это полные синонимы не совсем корректно.
ЗЫ: как и в джаве, так и в си-диезах все функции являются методами.
Вы наверное хотели сказать “по синтаксису”. Процедура частный случай функции.
Плюсы сказали “void foo()” и послали процедуры лесом, дабы не писать паскакальные function/procedure.
Функция и процедура почти одно и то же (на примере бейсика, вместо словообильного паскаля: процедура == функция без возвращаемого значения, вроде sub вместо function, если я ещё это помню).
Функция и метод - обычно одно и то же в понимании обывателей-кодописцев.
Но в некоторых языках есть функции без классов (метод без класса не создать).
Наоборот, в джаваскрипте функция по сути может заменить объект (я про классический джаваскрипт без классов).
И функции из функционального программирования LINQ (C#/F#/VB.NET), Java и целый список языков. Тот случай, когда x = x + 1 неверно. Кстати, туда, в делегат, очень часто передают метод (то аналог указателя на функцию).
Ответ топикстартеру: думаю, что по привычке. Скорее всего, привычка пришла от людей, которые пишут на C++, в которм есть и методы, и функции (совместимость с C).
где базовой концепцией является возможность использования функций в качестве 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 не используются термины “функция” и “процедура”, здесь только методы. В других языках (хотя за все-все-все ЯПы отвечать сложно) процедура не возвращает значение, функция - возвращает.