クロージャとは? わかりやすく解説

クロージャ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/04/08 06:32 UTC 版)

クロージャ(クロージャー、英語: closure)、関数閉包プログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念である。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環境のペアであるともいえる。この概念は少なくとも1960年代のSECDマシンまで遡ることができる。まれに、関数ではなくとも、環境に紐付けられたデータ構造のことをクロージャと呼ぶ場合もある。クロージャをサポートする言語によるプログラミングでは、単に関数の中に関数を定義することができるだけでなく、その際に、外側の関数(エンクロージャ)で宣言された変数を暗黙的に内側の関数に取り込んで操作することができる。主な利点としてはグローバル変数の削減やコールバック関数記述の簡素化が挙げられる。


  1. ^ クロージャ - JavaScript | MDN
  2. ^ From LISP 1 to LISP 1.5”. www-formal.stanford.edu. 2024年4月7日閲覧。
  3. ^ Baker, Henry G. (July 1978). “Shallow binding in Lisp 1.5”. Commun. ACM (New York, NY, USA: Association for Computing Machinery) 21 (7): 565–569. doi:10.1145/359545.359566. ISSN 0001-0782. https://doi.org/10.1145/359545.359566. 
  4. ^ Sussman, Gerald Jay; Steele, Guy Lewis (1975). Scheme: An Interpreter for Extended Lambda Calculus (PDF) (Report). Massachusetts Institute of Technology.
  5. ^ Sussman, Gerald Jay; Steele Jr, Guy L (1998). “Scheme: A interpreter for extended lambda calculus”. Higher-Order and Symbolic Computation (Springer) 11 (4): 405–439. doi:10.1023/A:1010035624696. https://www.researchgate.net/publication/227098423_Scheme_A_Interpreter_for_Extended_Lambda_Calculus. 
  6. ^ : anonymous class。「無名クラス」とも。オラクル日本語版サイトの表記に準拠し、匿名クラスとした。
  7. ^ Closures (Lambda Expressions) for the Java Programming Language
  8. ^ : functional interface。抽象メソッドを1つだけもつインタフェース。SAM (Single Abstract Method) typeと呼ばれることもある。
  9. ^ Closures: Anonymous Functions that Capture Their Environment, Capturing References or Moving Ownership”. The Rust Programming Language. 2023年12月24日閲覧。
  10. ^ Module std::pin”. The Rust Standard Library. 2023年12月24日閲覧。 “By default, all types in Rust are movable. Rust allows passing all types by-value, ...”



クロージャ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/21 23:55 UTC 版)

Groovy」の記事における「クロージャ」の解説

Groovyではコードブロックファーストクラス第一級オブジェクトとして生成し変数格納したメソッド引数戻り値として受け渡したりすることができる。Groovyライブラリ繰り返し処理や入出力理などを中心にクロージャが駆使されており、簡潔な表記を行うことができる。 クロージャは構築されスコープ内の変数読み書きできる。 def str = "Hello World"def readerClosure = { println str }readerClosure()def writerClosure = { str = "foo" }writerClosure()println str このコード実行するHello Worldfoo と出力される

※この「クロージャ」の解説は、「Groovy」の解説の一部です。
「クロージャ」を含む「Groovy」の記事については、「Groovy」の概要を参照ください。


クロージャ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/11/24 15:35 UTC 版)

Javaに対する批判」の記事における「クロージャ」の解説

Javaでは、内部クラス、ローカルクラス、匿名クラス使用することで、基本的なクロージャに近い記述実現できる。しかしこれは完全ではなく、ローカルクラス/匿名クラス外の変数対す参照を、ローカルクラス/匿名クラスフィールドとして暗黙キャプチャできるように、final修飾子付き宣言する必要がある。これは、変数スコープ抜けたときに削除できるような、様々な寿命対応したスタックモデルJVM実装者選択できるようにするためである。Java 8では実質的にfinalとみなせる変数明示的にfinal修飾する必要がなくなったが、依然として代入許可されない。 また匿名クラス構文冗長であり、例えばRunnableインタフェース要求する場面で、同インタフェース実装する匿名クラス定義する場合単純なコードブロックとして定義することはできず、Runnable.run()メソッド実装するようなクラスブロック定義する必要があるJava 8ではラムダ式関数型インタフェースによりこの問題改善している。

※この「クロージャ」の解説は、「Javaに対する批判」の解説の一部です。
「クロージャ」を含む「Javaに対する批判」の記事については、「Javaに対する批判」の概要を参照ください。


クロージャ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/11 02:27 UTC 版)

Ruby」の記事における「クロージャ」の解説

クロージャとなるようなブロック引数渡し # オブジェクトインスタンス変数変数名の頭に@が付く)でブロック記憶def remember(&p) @block = pend# name受け取ブロック引数に、上記メソッド呼び出す。remember {|name| puts "Hello, " + name + "!"}# 後に必要になった時点でクロージャを呼び出す。@block.call("John")# 表示:"Hello, John!" メソッドからクロージャを返すdef create_set_and_get(value = 0) return proc {|x| value = x}, proc { value }endsetter, getter = create_set_and_getsetter.call(21)getter.call # => 21

※この「クロージャ」の解説は、「Ruby」の解説の一部です。
「クロージャ」を含む「Ruby」の記事については、「Ruby」の概要を参照ください。

ウィキペディア小見出し辞書の「クロージャ」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ

「クロージャ」の例文・使い方・用例・文例

Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。



固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「クロージャ」の関連用語

クロージャのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



クロージャのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのクロージャ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのGroovy (改訂履歴)、Javaに対する批判 (改訂履歴)、Ruby (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2024 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2024 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2024 GRAS Group, Inc.RSS