Анонимна функция: Разлика между версии

Изтрито е съдържание Добавено е съдържание
м замяна на чужда езикова препратка
Ред 368:
 
=== C# ===
Поддръжката на анонимни функции в [[:en:C_Sharp_(programming_language)|C#]] се е задълбочила през различните версии на компилатора на езика. C # езикът v3.0 В, излязъл през ноември 2007 г. с .NET Framework-а v3.5, има пълна поддръжка на анонимни функции. В C # те се наричат „[[Https://en.wikipedia.org/wiki/Lambda calculus|ламбда изрази]]“(„lambda expressions“), следвайки първоначалната версия на анонимни функции, ламбда смятане(lambda calculus). Вижте [http://www.microsoft.com/download/en/details.aspx?id=7029 C# 4.0 спецификацията секцията 5.3.3.29], за повече информация. <blockquote>Ламбда изразите представляват анонимни функции, които съдържат изрази или последователност от оператори. Всички ламбда изрази</blockquote><blockquote>използват ламбда оператора =>, който може да се чете като „отива в“. Идеята за ламбда изразите в C# е заимствана от функционалните езици</blockquote><blockquote>(например Haskell, Lisp, Scheme, F# и др.). Лявата страна на ламбда оператора определя входните параметри на анонимната функция, а дясната страна представлява израз или последователност от оператори, която работи с входните параметри и евентуално връща някакъв резултат.<ref>Светлин Наков, Веселин Колев и колектив, [http://www.introprogramming.info/wp-content/uploads/2015/10/Intro-CSharp-Book-v2015.pdf "Въведение в програмирането със C# „]. Велико Търново, Фабер, 2011. <nowiki>ISBN 978-954-400-527-6</nowiki>. – глава 22, стр.922 – 928 </ref></blockquote><syntaxhighlight lang=“c#">
// <see href="http://msdn.microsoft.com/en-us/library/bb549151.aspx" />
Func<int,int> foo = x => x*x;
Ред 377:
// will Not Compile!
var foo = (int x) => x*x;
</syntaxhighlight>Въпреки това, един ламбда израз може да вземе участие в [[:en:Type_inference|type inference]] и може да се използва като [[Https://en.wikipedia.org/wiki/Parameter (computer science)|аргумент на метод]], например да използват анонимни функции с въжмойностите на Map(Карта) от System.Collections.Generic.List (в ConvertAll () метод): <syntaxhighlight lang="c#">
// Initialize the list:
var values = new List<int>() { 7, 13, 4, 9, 3 };
Ред 434:
 
=== JavaScript ===
[[:en:JavaScript|JavaScript]]/[[:en:ECMAScript|ECMAScript]] поддържа анонимни функции.<syntaxhighlight lang="javascript">
alert((function(x){
return x*x;
})(10));
</syntaxhighlight>В [[:en:ES6|ES6]]:<syntaxhighlight lang="javascript">
alert((x => x*x)(10));
</syntaxhighlight>Тази технология се използва по-често в [[:en:Bookmarklet|Bookmarklets]]. За пример, за да сменим заглавието на текущия документ (видим в главния бар на прозореца) в [[:en:URL|URL]], в следващата отметка може помогне.<syntaxhighlight lang="javascript">
javascript:document.title=location.href;
 
Ред 449:
</syntaxhighlight>Отчетът за функция в първата (външна) двойка скоби заявява анонимна функция, която след това се изпълнява, когато се използва с последната двойка скоби. Това е почти еквивалентна на следната информация, която е обкръжена с f за разлика от анонимна функция.<syntaxhighlight lang="javascript">
javascript:var f = function(){document.title=location.href;}; f();
</syntaxhighlight>Използване на [[:en:Bookmarklets#History|void()]] за избягване на нови страници за произволни анонимни функции:<syntaxhighlight lang="javascript">
javascript:void(function(){return document.title=location.href;}());
</syntaxhighlight>или просто:<syntaxhighlight lang="javascript">
Ред 456:
 
=== Julia ===
В [[:en:Julia_(programming_language)|Julia]] програмирането анонимните функции са дефинирани с използването на синтаксиса<code>(arguments)->(expression)</code>,<syntaxhighlight lang="julia">
julia> f = x -> x*x; f(8)
64
Ред 464:
 
=== Lisp ===
[[:en:Lisp_(programming_language)|Lisp]] и [[:en:Scheme_(programming_language)|Scheme]] поддържат анонимните функции изпозвайки „ламбда“ конструкции, което е препратка към [[:en:Lambda_calculus|lambda calculus]]. <syntaxhighlight lang="lisp">
(lambda (arg) (* arg arg))
</syntaxhighlight>
Ред 479:
 
=== Clojure ===
[[:en:Clojure|Clojure]] поддържа анонимни функции чрез „Fn“ в специална форма:<syntaxhighlight lang="clojure">
(fn [x] (+ x 3))
</syntaxhighlight>Има и синтаксис за определяне на ламбда:<syntaxhighlight lang="clojure">