dbo:abstract
|
- Eine Closure (oder Funktionsabschluss) ist ein Konzept aus der funktionalen Programmierung. Es beschreibt eine Funktion, die Zugriffe auf ihren Erstellungskontext enthält. Beim Aufruf greift die Funktion dann auf diesen Erstellungskontext zu. Dieser Kontext (Speicherbereich, Zustand) ist außerhalb der Funktion nicht referenzierbar, d. h. nicht sichtbar. Eine Closure enthält eine Referenz auf die Funktion und den von ihr verwendeten Teil des Erstellungskontexts – die Funktion und die zugehörige Speicherstruktur sind in einer Referenz untrennbar abgeschlossen (closed term). Es ist vergleichbar mit einem Objekt mit Attributen und Methoden: es enthält eine implizite Identität, einen Zustand und ein Verhalten. In der Programmiersprachensyntax wird dies oft durch zwei verschachtelte Funktionen erreicht – die innere Hauptfunktion wird von einer weiteren Funktion eingeschlossen (abgeschlossen). Diese Abschlussfunktion enthält die benötigte Speicherstruktur (siehe Beispiele unten). Sie ist so konstruiert, dass sie beim Aufruf eine Referenz auf die innere Funktion zusammen mit den benötigten Variablen (der Speicherstruktur) liefert. Genaugenommen ist die Closure hier nicht die innere Funktion alleine, sondern die erzeugte Bündelung von (innerer) Funktion und Variablenzustand, auf die die Referenz zeigt. Eine Closure kann man auch als Objekt ansehen, das in der Regel nur eine Methode hat. Wird die Closure zusammen mit weiteren Closures über demselben Kontext erzeugt, so handelt es sich um ein Objekt mit mehreren Methoden. Die in der Closure eingeschlossenen Variablen aus dem erzeugenden Bereich können von der Closure als Attribute verwendet werden. (de)
- Στην πληροφορική, κλείσιμο (αγγλ: closure) ονομάζεται μια συνάρτηση πρώτης τάξης με που έχουν στο . Μια τέτοια συνάρτηση λέγεται ότι «κλείνεται» ως προς τις ελεύθερες μεταβλητές της. Ένα κλείσιμο ορίζεται τουλάχιστον μέσα στα όρια στα οποία είναι ορατές οι ελεύθερες μεταβλητές του. Η ρητή χρήση κλεισιμάτων είναι συνδεδεμένη με το συναρτησιακό προγραμματισμό και με γλώσσες όπως η ML και η Lisp. Τα κλεισίματα χρησιμοποιούνται για την υλοποίηση στυλ περάσματος συνεχειών, επιτυγχάνοντας με αυτόν τον τρόπο την απόκρυψη δεδομένων (hiding state). Τα αντικείμενα και οι μπορούν να υλοποιηθούν με αυτόν τον τρόπο. Η ιδέα των κλεισιμάτων αναπτύχθηκε κατά τη δεκαετία του 1960 και υλοποιήθηκε αρχικά στη γλώσσα προγραμματισμού Scheme. Από τότε έχουν σχεδιαστεί πολλές γλώσσες που υποστηρίζουν κλεισίματα. Σε κάποιες γλώσσες, ένα κλείσιμο μπορεί να προκύψει όταν μια συνάρτηση ορίζεται μέσα σε μια άλλη συνάρτηση και η εσωτερική αναφέρεται σε μεταβλητές της εξωτερικής. Στο χρόνο εκτέλεσης, όταν εκτελείται η εξωτερική συνάρτηση, δημιουργείται ένα κλείσιμο, που αποτελείται από την εσωτερική συνάρτηση και όποιες αναφορές σε μεταβλητές της εξωτερικής χρειάζονται (αυτές οι τιμές ονομάζονται upvalues του κλεισίματος). Ο όρος κλείσιμο συχνά συγχέεται με τον όρο ανώνυμη συνάρτηση. Αυτό μάλλον οφείλεται στο ότι οι περισσότερες γλώσσες που υλοποιούν ανώνυμες συναρτήσεις επιτρέπουν σε αυτές το σχηματισμό κλεισιμάτων και ο προγραμματιστής μαθαίνει αυτές τις δυο ιδέες ταυτόχρονα, αν και διαφέρουν ως έννοιες. Τα κλεισίματα είναι συγγενείς έννοιες με τα - ο μετασχηματισμός τους σε αυτά ονομάζεται ή . (el)
- In programming languages, a closure, also lexical closure or function closure, is a technique for implementing lexically scoped name binding in a language with first-class functions. Operationally, a closure is a record storing a function together with an environment. The environment is a mapping associating each free variable of the function (variables that are used locally, but defined in an enclosing scope) with the value or reference to which the name was bound when the closure was created. Unlike a plain function, a closure allows the function to access those captured variables through the closure's copies of their values or references, even when the function is invoked outside their scope. (en)
- Dans un langage de programmation, une fermeture ou clôture (en anglais : closure) est une fonction accompagnée de son environnement lexical. L'environnement lexical d'une fonction est l'ensemble des variables non locales qu'elle a capturées, soit par valeur (c'est-à-dire par copie des valeurs des variables), soit par référence (c'est-à-dire par copie des adresses mémoires des variables). Une fermeture est donc créée, entre autres, lorsqu'une fonction est définie dans le corps d'une autre fonction et utilise des paramètres ou des variables locales de cette dernière. Une fermeture peut être passée en argument d'une fonction dans l'environnement où elle a été créée (passée vers le bas) ou renvoyée comme valeur de retour (passée vers le haut). Dans ce cas, le problème posé alors par la fermeture est qu'elle fait référence à des données qui auraient typiquement été allouées sur la pile d'exécution et libérées à la sortie de l'environnement. Hors optimisations par le compilateur, le problème est généralement résolu par une allocation sur le tas de l'environnement. (fr)
- En lenguajes de programación, una clausura o cerradura (del inglés closure) es una técnica para implementar ámbitos léxicos en un lenguaje de programación con funciones de primera clase. Una cerradura es un registro que contiene una función junto con el ámbito donde fue declarada. La clausura permite que la función acceda a los valores de las variables declaradas en el mismo ámbito, aun cuando la invocación ocurra fuera de este. El uso de clausuras se asocia con el paradigma de programación funcional. Una clausura puede aparecer como una función de nivel superior, cuando una función está definida dentro de otra función, y la función interna se refiere a las variables locales de la función externa. En tiempo de ejecución, cuando se ejecuta la función externa, se forma una clausura, que consta del código de la función interna y las referencias a todas las variables de la función externa que son requeridas por la clausura. Una clausura asocia a una función con un conjunto de variables "privadas", que persisten en las invocaciones a la función. El ámbito de la variable abarca únicamente al ámbito donde la función fue declarada, por lo que no puede ser accedida desde otra parte del programa. No obstante, la variable mantiene su valor de forma indefinida para las siguientes invocaciones. Como consecuencia, las clausuras pueden ser usadas para simular el encapsulamiento y la ocultación de la programación orientada a objetos. El concepto de clausura fue definido por Peter J. Landin en 1964. Fue implementado de forma completa, por primera vez, como una característica del lenguaje de programación Scheme. Desde entonces, otros lenguajes de programación han sido diseñados para soportar clausuras. (es)
- クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念である。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環境のペアであるともいえる。この概念は少なくとも1960年代のSECDマシンまで遡ることができる。まれに、関数ではなくとも、環境に紐付けられたデータ構造のことをクロージャと呼ぶ場合もある。クロージャをサポートする言語によるプログラミングでは、単に関数の中に関数を定義することができるだけでなく、その際に、外側の関数(エンクロージャ)で宣言された変数を暗黙的に内側の関数に取り込んで操作することができる。主な利点としてはグローバル変数の削減やコールバック関数記述の簡素化が挙げられる。 典型的にはクロージャは、エンクロージャの内側の関数リテラルや、ネストした関数定義によって必要になる。プログラミング言語により、そのような内側の関数内に出現する自由変数(内側の関数の仮引数でもなく、内側の関数自身のローカル変数でもない変数)の扱いは異なるが、自由変数をレキシカルに(字句的に)参照するのがクロージャである。エンクロージャが実行された際、クロージャが形成される。クロージャは内部の関数のコードとエンクロージャのスコープ内の必要なすべての変数への参照からなる。 クロージャはプログラム内で環境を共有するための仕組みである。レキシカル変数はグローバルな名前空間を占有しないという点でグローバル変数とは異なっている。またオブジェクト指向プログラミングにおけるオブジェクトのインスタンス変数とは、オブジェクトのインスタンスではなく関数の呼び出しに束縛されているという点で異なる。 クロージャは関数型言語では遅延評価やカプセル化のために、また高階関数の引数として広く用いられる。 例: クロージャを使ったカウンタの例を Scheme で示す。 (define (new-counter) (let ((count 0)) (lambda (set! count (+ count 1)) count)))(define c (new-counter))(display (c)) ; 1(display (c)) ; 2(display (c)) ; 3 関数 new-counter の中でクロージャが使用されている。c に代入された無名関数は new-counter 内のローカル変数 count を参照している。c を呼び出すたびに count はインクリメントされていく。 (ja)
- 컴퓨터 언어에서 클로저(Closure)는 일급 객체 함수(first-class functions)의 개념을 이용하여 스코프(scope)에 묶인 변수를 바인딩 하기 위한 일종의 기술이다. 기능상으로, 클로저는 함수를 저장한 레코드(record)이며, 스코프(scope)의 인수(Factor)들은 클로저가 만들어질 때 정의(define)되며, 스코프 내의 영역이 소멸(remove)되었어도 그에 대한 접근(access)은 독립된 복사본인 클로저를 통해 이루어질 수 있다. 예제. 다음의 짧은 스크립트(Script)는 고계함수(higher-order function)인 startAt에 대해서 정의한다. startAt은 x 인수와 incrementBy 중첩함수로 이루어져 있다. incrementBy 함수는 코드 블록(lexical scope)에 속해 있으므로, 인수인 x에 대한 접근이 가능하다. startAt 함수는 x의 값(Value)이나 참조(Reference)를 복사한 클로저를 반환한다. startAt과 incrementBy는 x와 y의 값을 더한다. function startAt(x){ function incrementBy(y){ return x + y } return incrementBy} var closure1 = startAt(1)var closure2 = startAt(2) 참고로 위 예제는 자바스크립트(JavaScript)로 작성되었다. closure1과 closure2는 각각 y + 1과 y + 2 값을 반환(return) 하는 함수의 역할을 한다. (ko)
- In de informatica is een closure een functie die gebruikmaakt van variabelen die zich bevinden in het bereik waarin de functie is gedefinieerd, maar niet per se in het bereik waarin de functie wordt aangeroepen. Zulke variabelen van een closure worden samen de omgeving van de closure genoemd. Veel programmeertalen ondersteunen wel functies, maar geen closures. Ondersteuning voor closures is vooral aanwezig in functionele programmeertalen (zoals Haskell en Ocaml), programmeertalen die sterk gebaseerd zijn op functionele talen (zoals JavaScript) of talen waaraan achteraf functionele elementen zijn toegevoegd (zoals C#). (nl)
- Domknięcie – w metodach realizacji języków programowania jest to obiekt wiążący funkcję lub referencję do funkcji oraz środowisko mające wpływ na tę funkcję w momencie jej definiowania. Środowisko przechowuje wszystkie nielokalne obiekty wykorzystywane przez funkcję. Realizacja domknięcia jest zdeterminowana przez język, jak również przez kompilator. Domknięcia występują głównie w językach funkcyjnych, w których funkcje mogą zwracać inne funkcje (tzw. funkcje wyższego rzędu), wykorzystujące zmienne utworzone lokalnie. Aby funkcje tego typu były możliwe, muszą one być typem pierwszoklasowym. (pl)
- Nei linguaggi di programmazione, una chiusura è una astrazione che combina una funzione con le variabili libere presenti nell'ambiente in cui è definita secondo le regole di scope del linguaggio. Le variabili libere dell'ambiente rimangono accessibili per tutta la durata di vita (extent) della chiusura e pertanto persistono nel corso di invocazioni successive della chiusura. Di conseguenza, le variabili della chiusura possono essere usate per mantenere uno stato ed emulare costrutti della programmazione a oggetti. Le chiusure si rivelano utili quando una funzione ha bisogno di "ricordare" informazioni: ad esempio un parametro specifico per un'operazione di confronto, oppure il riferimento ad un widget in un callback di un'interfaccia grafica. (it)
- Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на в своей области видимости. Замыкание, так же как и экземпляр объекта, есть способ представления функциональности и данных, связанных и упакованных вместе. Замыкание — это особый вид функции. Она определена в теле другой функции и создаётся каждый раз во время её выполнения. Синтаксически это выглядит как функция, находящаяся целиком в теле другой функции. При этом вложенная внутренняя функция содержит ссылки на локальные переменные внешней функции. Каждый раз при выполнении внешней функции происходит создание нового экземпляра внутренней функции, с новыми ссылками на переменные внешней функции. В случае замыкания ссылки на переменные внешней функции действительны внутри вложенной функции до тех пор, пока работает , даже если внешняя функция закончила работу, и переменные вышли из области видимости. Замыкание связывает код функции с её лексическим окружением (местом, в котором она определена в коде). Лексические переменные замыкания отличаются от глобальных переменных тем, что они не занимают глобальное пространство имён. От переменных в объектах они отличаются тем, что привязаны к функциям, а не объектам. (ru)
- Em ciência da computação e na programação uma clausura (do inglês closure) é uma função que referencia variáveis livres no contexto léxico. Uma clausura ocorre normalmente quando uma função é declarada dentro do corpo de outra, e a função interior referencia variáveis locais da função exterior. Em tempo de execução, quando a função exterior é executada, então uma clausura é formada, que consiste do código da função interior e referências para quaisquer variáveis no âmbito da função exterior que a clausura necessita. (pt)
- 在计算机科学中,闭包(英語:Closure),又稱词法闭包(Lexical Closure)或函數閉包(function closures),是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。环境里是若干对符号和值的对应关系,它既要包括约束变量(该函数内部绑定的符号),也要包括自由变量(在函数外部定义但在函数内被引用),有些函数也可能没有自由变量。闭包跟函数最大的不同在于,当捕捉闭包的时候,它的自由变量会在捕捉时被确定,这样即便脱离了捕捉时的上下文,它也能照常运行。捕捉时对于值的处理可以是值拷贝,也可以是名称引用,这通常由语言设计者决定,也可能由用户自行指定(如C++)。 (zh)
- У програмуванні замиканням (англ. closure) називають підпрограму, що виконується в середовищі, яке містить одну або більше . Підпрограма має доступ до цих змінних під час виконання. Застосування замикань асоціюється з функціональним програмуванням. У функціональному програмуванні за допомогою замикань можуть моделюватись такі конструкції, як об'єкти в інших мовах програмування. У деяких мовах програмування[яких?] замикання створюється для підпрограм, що визначені всередині інших підпрограм, і внутрішня підпрограма має доступ до локальних змінних зовнішньої. Під час виконання, коли обчислюється зовнішня підпрограма, утворюється замикання, до якого потрапляє код внутрішньої підпрограми, та посилання на ті змінні зовнішньої підпрограми, що використовуються у внутрішній підпрограмі. Посилання на змінні зовнішньої підпрограми залишаються дійсними всередині вкладеної внутрішньої підпрограми доти, поки існує ця вкладена підпрограма, навіть якщо зовнішня підпрограма завершила виконання і вийшла з області видимості. Концепцію замикань було повністю розроблено в 1960-ті роки та реалізовано як особливість мови програмування Scheme. Відтоді було розроблено багато мов програмування з підтримкою замикань. (uk)
|
rdfs:comment
|
- In programming languages, a closure, also lexical closure or function closure, is a technique for implementing lexically scoped name binding in a language with first-class functions. Operationally, a closure is a record storing a function together with an environment. The environment is a mapping associating each free variable of the function (variables that are used locally, but defined in an enclosing scope) with the value or reference to which the name was bound when the closure was created. Unlike a plain function, a closure allows the function to access those captured variables through the closure's copies of their values or references, even when the function is invoked outside their scope. (en)
- Domknięcie – w metodach realizacji języków programowania jest to obiekt wiążący funkcję lub referencję do funkcji oraz środowisko mające wpływ na tę funkcję w momencie jej definiowania. Środowisko przechowuje wszystkie nielokalne obiekty wykorzystywane przez funkcję. Realizacja domknięcia jest zdeterminowana przez język, jak również przez kompilator. Domknięcia występują głównie w językach funkcyjnych, w których funkcje mogą zwracać inne funkcje (tzw. funkcje wyższego rzędu), wykorzystujące zmienne utworzone lokalnie. Aby funkcje tego typu były możliwe, muszą one być typem pierwszoklasowym. (pl)
- Em ciência da computação e na programação uma clausura (do inglês closure) é uma função que referencia variáveis livres no contexto léxico. Uma clausura ocorre normalmente quando uma função é declarada dentro do corpo de outra, e a função interior referencia variáveis locais da função exterior. Em tempo de execução, quando a função exterior é executada, então uma clausura é formada, que consiste do código da função interior e referências para quaisquer variáveis no âmbito da função exterior que a clausura necessita. (pt)
- 在计算机科学中,闭包(英語:Closure),又稱词法闭包(Lexical Closure)或函數閉包(function closures),是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。环境里是若干对符号和值的对应关系,它既要包括约束变量(该函数内部绑定的符号),也要包括自由变量(在函数外部定义但在函数内被引用),有些函数也可能没有自由变量。闭包跟函数最大的不同在于,当捕捉闭包的时候,它的自由变量会在捕捉时被确定,这样即便脱离了捕捉时的上下文,它也能照常运行。捕捉时对于值的处理可以是值拷贝,也可以是名称引用,这通常由语言设计者决定,也可能由用户自行指定(如C++)。 (zh)
- Στην πληροφορική, κλείσιμο (αγγλ: closure) ονομάζεται μια συνάρτηση πρώτης τάξης με που έχουν στο . Μια τέτοια συνάρτηση λέγεται ότι «κλείνεται» ως προς τις ελεύθερες μεταβλητές της. Ένα κλείσιμο ορίζεται τουλάχιστον μέσα στα όρια στα οποία είναι ορατές οι ελεύθερες μεταβλητές του. Η ρητή χρήση κλεισιμάτων είναι συνδεδεμένη με το συναρτησιακό προγραμματισμό και με γλώσσες όπως η ML και η Lisp. Τα κλεισίματα χρησιμοποιούνται για την υλοποίηση στυλ περάσματος συνεχειών, επιτυγχάνοντας με αυτόν τον τρόπο την απόκρυψη δεδομένων (hiding state). Τα αντικείμενα και οι μπορούν να υλοποιηθούν με αυτόν τον τρόπο. (el)
- Eine Closure (oder Funktionsabschluss) ist ein Konzept aus der funktionalen Programmierung. Es beschreibt eine Funktion, die Zugriffe auf ihren Erstellungskontext enthält. Beim Aufruf greift die Funktion dann auf diesen Erstellungskontext zu. Dieser Kontext (Speicherbereich, Zustand) ist außerhalb der Funktion nicht referenzierbar, d. h. nicht sichtbar. (de)
- En lenguajes de programación, una clausura o cerradura (del inglés closure) es una técnica para implementar ámbitos léxicos en un lenguaje de programación con funciones de primera clase. Una cerradura es un registro que contiene una función junto con el ámbito donde fue declarada. La clausura permite que la función acceda a los valores de las variables declaradas en el mismo ámbito, aun cuando la invocación ocurra fuera de este. El uso de clausuras se asocia con el paradigma de programación funcional. (es)
- Dans un langage de programmation, une fermeture ou clôture (en anglais : closure) est une fonction accompagnée de son environnement lexical. L'environnement lexical d'une fonction est l'ensemble des variables non locales qu'elle a capturées, soit par valeur (c'est-à-dire par copie des valeurs des variables), soit par référence (c'est-à-dire par copie des adresses mémoires des variables). Une fermeture est donc créée, entre autres, lorsqu'une fonction est définie dans le corps d'une autre fonction et utilise des paramètres ou des variables locales de cette dernière. (fr)
- Nei linguaggi di programmazione, una chiusura è una astrazione che combina una funzione con le variabili libere presenti nell'ambiente in cui è definita secondo le regole di scope del linguaggio. Le variabili libere dell'ambiente rimangono accessibili per tutta la durata di vita (extent) della chiusura e pertanto persistono nel corso di invocazioni successive della chiusura. Di conseguenza, le variabili della chiusura possono essere usate per mantenere uno stato ed emulare costrutti della programmazione a oggetti. (it)
- 컴퓨터 언어에서 클로저(Closure)는 일급 객체 함수(first-class functions)의 개념을 이용하여 스코프(scope)에 묶인 변수를 바인딩 하기 위한 일종의 기술이다. 기능상으로, 클로저는 함수를 저장한 레코드(record)이며, 스코프(scope)의 인수(Factor)들은 클로저가 만들어질 때 정의(define)되며, 스코프 내의 영역이 소멸(remove)되었어도 그에 대한 접근(access)은 독립된 복사본인 클로저를 통해 이루어질 수 있다. 예제. 다음의 짧은 스크립트(Script)는 고계함수(higher-order function)인 startAt에 대해서 정의한다. startAt은 x 인수와 incrementBy 중첩함수로 이루어져 있다. incrementBy 함수는 코드 블록(lexical scope)에 속해 있으므로, 인수인 x에 대한 접근이 가능하다. startAt 함수는 x의 값(Value)이나 참조(Reference)를 복사한 클로저를 반환한다. startAt과 incrementBy는 x와 y의 값을 더한다. (ko)
- In de informatica is een closure een functie die gebruikmaakt van variabelen die zich bevinden in het bereik waarin de functie is gedefinieerd, maar niet per se in het bereik waarin de functie wordt aangeroepen. Zulke variabelen van een closure worden samen de omgeving van de closure genoemd. (nl)
- クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念である。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環境のペアであるともいえる。この概念は少なくとも1960年代のSECDマシンまで遡ることができる。まれに、関数ではなくとも、環境に紐付けられたデータ構造のことをクロージャと呼ぶ場合もある。クロージャをサポートする言語によるプログラミングでは、単に関数の中に関数を定義することができるだけでなく、その際に、外側の関数(エンクロージャ)で宣言された変数を暗黙的に内側の関数に取り込んで操作することができる。主な利点としてはグローバル変数の削減やコールバック関数記述の簡素化が挙げられる。 クロージャはプログラム内で環境を共有するための仕組みである。レキシカル変数はグローバルな名前空間を占有しないという点でグローバル変数とは異なっている。またオブジェクト指向プログラミングにおけるオブジェクトのインスタンス変数とは、オブジェクトのインスタンスではなく関数の呼び出しに束縛されているという点で異なる。 クロージャは関数型言語では遅延評価やカプセル化のために、また高階関数の引数として広く用いられる。 (ja)
- Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на в своей области видимости. Замыкание, так же как и экземпляр объекта, есть способ представления функциональности и данных, связанных и упакованных вместе. (ru)
- У програмуванні замиканням (англ. closure) називають підпрограму, що виконується в середовищі, яке містить одну або більше . Підпрограма має доступ до цих змінних під час виконання. Застосування замикань асоціюється з функціональним програмуванням. У функціональному програмуванні за допомогою замикань можуть моделюватись такі конструкції, як об'єкти в інших мовах програмування. (uk)
|