関数型言語に必ずくっついてるこれ
いらんでしょ?匿名クラスで充分でしょ
クロージャって何がいいの? [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2014/11/08(土) 13:11:47.84ID:6V2MLUHb2014/11/08(土) 13:17:58.06ID:rszc5DFq
マジレスすると、クロージャーよりも
関数内関数の方がいい。
クロージャーは変数スコープが不必要に広い。
多くの場合、クロージャーの外は見える必要がない。
逆に見えてしまうと不用意に変数を書き換えてしまう。
関数内関数がない言語が多いから
仕方なくクロージャーを使うしかないが、
Java8のラムダの方がまだ安全なコードを書くことが出来る。
(ラムダも外のスコープが参照できる場合があるので完璧ではない)
つまり俺がいいたいのは、クロージャーを使うと苦労するのジャー。
関数内関数の方がいい。
クロージャーは変数スコープが不必要に広い。
多くの場合、クロージャーの外は見える必要がない。
逆に見えてしまうと不用意に変数を書き換えてしまう。
関数内関数がない言語が多いから
仕方なくクロージャーを使うしかないが、
Java8のラムダの方がまだ安全なコードを書くことが出来る。
(ラムダも外のスコープが参照できる場合があるので完璧ではない)
つまり俺がいいたいのは、クロージャーを使うと苦労するのジャー。
2014/11/08(土) 13:42:47.14ID:alIlcZLx
ディスクロージャ
2014/11/08(土) 14:33:50.79ID:Wb7Sa5AG
>>1
関数型言語の操作的意味論において、クロージャとは:
「ラムダ式と局所環境とを組合せた概念」
を指す
このクロージャを具象構文で表したものが一般的な「ラムダ式」であり、
クロージャを識別子に束縛したものが一般的な「関数宣言」である
Standard ML という関数型言語だと、
たとえばラムダ式は fn x => x + 1 であり、関数宣言は val succ = fn x => x + 1 である
ここで、関数宣言には fun succ x = x + 1 と簡潔に書ける構文糖を用いるのが一般的
だから、あらゆる関数型言語ないし関数型プログラミングが可能なあらゆる言語であれば、
クロージャ(という概念)は必要不可欠に存在である、と言える
また Java の「匿名クラス」もクロージャ(という概念)を応用した具象構文の一種である
で、Java 8 で導入された「ラムダ式」もクロージャの具象構文だけど、
匿名クラスよりも簡潔に書ける利点があるから、多くのケースで広く利用されるようになるだろう
両者の間には、局所環境と組み合わせる対象が「匿名クラス」ではクラスという単位であるのに対して、
「ラムダ式」では式という(クラスよりも粒の小さな)単位であるという違いがある
目的に応じて適切に両者を使い分けることが望ましい
関数型言語の操作的意味論において、クロージャとは:
「ラムダ式と局所環境とを組合せた概念」
を指す
このクロージャを具象構文で表したものが一般的な「ラムダ式」であり、
クロージャを識別子に束縛したものが一般的な「関数宣言」である
Standard ML という関数型言語だと、
たとえばラムダ式は fn x => x + 1 であり、関数宣言は val succ = fn x => x + 1 である
ここで、関数宣言には fun succ x = x + 1 と簡潔に書ける構文糖を用いるのが一般的
だから、あらゆる関数型言語ないし関数型プログラミングが可能なあらゆる言語であれば、
クロージャ(という概念)は必要不可欠に存在である、と言える
また Java の「匿名クラス」もクロージャ(という概念)を応用した具象構文の一種である
で、Java 8 で導入された「ラムダ式」もクロージャの具象構文だけど、
匿名クラスよりも簡潔に書ける利点があるから、多くのケースで広く利用されるようになるだろう
両者の間には、局所環境と組み合わせる対象が「匿名クラス」ではクラスという単位であるのに対して、
「ラムダ式」では式という(クラスよりも粒の小さな)単位であるという違いがある
目的に応じて適切に両者を使い分けることが望ましい
2014/11/08(土) 16:17:08.12ID:gNjtEENQ
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
∠ ノ
丶 |
ノ |
| / ̄ ̄ ̄ ̄\ |
| / ヽ |
| | | |
| | | |
| | | |
/ | | /
ヽ \_/| |\_/ ヽヘ
| / \ /
 ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄
パンとか止めるやつ
∠ ノ
丶 |
ノ |
| / ̄ ̄ ̄ ̄\ |
| / ヽ |
| | | |
| | | |
| | | |
/ | | /
ヽ \_/| |\_/ ヽヘ
| / \ /
 ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄
パンとか止めるやつ
6デフォルトの名無しさん
2014/11/08(土) 16:19:08.12ID:gwropNof >>5
それ、パンとか止めるやつだろ!
それ、パンとか止めるやつだろ!
2014/11/08(土) 16:28:06.78ID:Z0nNiFel
/ ̄ ̄\
/ _ノ ヽ、_ \
. | ( ●)(● ) |
,-,-,-,__ | (__人__) │rヽヽヽヽ__ 「クイックロック バッグ クロージャー!!」
r.l .' ' .'.r_l | `⌒ ´ . | ´l .|/
.ヽ| | | | | /_
._,,-ーヽ /-‐ ヽ /‐''",' /. `ヽ
/ /`''‐-',. ヽ ./ rj,.-‐''´`l ./
\ | 二ヽ ヽ三 |ー‐'´
`''‐ヽ ―`ヘ j `―r'´
`T ´ j. ./ j
ヽ .ヽ、 ___ / ,'
| ./(>)^ ヽ\ i
| ./ (_ (<) \ .i
/ .! ./ /rェヾ__)⌒::: ヾ.\
/ ∧i. `⌒´-'´ u; ノ ヽ
| .\ヽ 、 , / |
.ヽ ',. ー 一 ./ /
', .', ./ /
.', ', / /
/ヽ、 \ / /
/ | ヽ―‐/ ./ \
./ .l 丿 ゝ ( ヽ
/ / / \ ', ',
/ /-‐''´ `''‐| ',
./ __| . / .',
| `ヽ、 ./ ̄ .|
| ヽ / /
`"''-,,__ ,,,,丿 ゝ、__,,-''
/ _ノ ヽ、_ \
. | ( ●)(● ) |
,-,-,-,__ | (__人__) │rヽヽヽヽ__ 「クイックロック バッグ クロージャー!!」
r.l .' ' .'.r_l | `⌒ ´ . | ´l .|/
.ヽ| | | | | /_
._,,-ーヽ /-‐ ヽ /‐''",' /. `ヽ
/ /`''‐-',. ヽ ./ rj,.-‐''´`l ./
\ | 二ヽ ヽ三 |ー‐'´
`''‐ヽ ―`ヘ j `―r'´
`T ´ j. ./ j
ヽ .ヽ、 ___ / ,'
| ./(>)^ ヽ\ i
| ./ (_ (<) \ .i
/ .! ./ /rェヾ__)⌒::: ヾ.\
/ ∧i. `⌒´-'´ u; ノ ヽ
| .\ヽ 、 , / |
.ヽ ',. ー 一 ./ /
', .', ./ /
.', ', / /
/ヽ、 \ / /
/ | ヽ―‐/ ./ \
./ .l 丿 ゝ ( ヽ
/ / / \ ', ',
/ /-‐''´ `''‐| ',
./ __| . / .',
| `ヽ、 ./ ̄ .|
| ヽ / /
`"''-,,__ ,,,,丿 ゝ、__,,-''
8デフォルトの名無しさん
2014/11/08(土) 18:29:54.75ID:+pW0VlFs2014/11/08(土) 18:31:45.04ID:Z0nNiFel
>>8
最後の行に同意してくれてありがとう
最後の行に同意してくれてありがとう
2014/11/08(土) 21:41:30.87ID:1bx+kI6Q
おもてたんとちゃうこのスレ
2014/11/08(土) 22:16:16.20ID:BzSpEdoH
クロージャーってただのメソッド一つのクラスだろ
2014/11/09(日) 01:25:23.88ID:5LKfT6rZ
まじすか
2014/11/09(日) 02:04:06.76ID:8LiWtrih
という見方、扱い方もできるねって話だろ
2014/11/09(日) 05:57:17.96ID:n2NDOrh4
ActionListenerなんて、実装当時にクロージャがあったら存在してたかどうか怪しいクラスだよね
15デフォルトの名無しさん
2014/11/09(日) 07:54:16.27ID:6VpE/OBT lispの方言かとおもった
2014/11/09(日) 09:19:55.73ID:nlmXbEn2
2014/11/09(日) 10:23:47.55ID:gYZvrVR/
>>11
複数にできるよ
複数にできるよ
2014/11/09(日) 16:16:30.86ID:K4BO8Ja1
関数内で関数が定義できる事とクロージャと何の関係があるんだ?
比較できるものじゃないでしょ
比較できるものじゃないでしょ
2014/11/09(日) 16:48:40.28ID:EbU/SVlS
まあ、クロージャは関数内関数の用途をも内包することは多いんじゃね?
2014/11/09(日) 17:24:14.45ID:xhtawW2X
>>16
それはあまり使われていない関数型言語限定の話ですね。
それはあまり使われていない関数型言語限定の話ですね。
2014/11/09(日) 17:32:09.95ID:PiaxZAwM
2014/11/09(日) 17:38:41.70ID:50xVLBic
オレオレ言語仕様を考えてるんだけどさ今どの言語を見てもlambdaだらけじゃない
RAII出来る言語だとクロージャに環境掴まれるだけでリソースリークしそうなわけよ
ならイランでしょ?というわけでたてた
RAII出来る言語だとクロージャに環境掴まれるだけでリソースリークしそうなわけよ
ならイランでしょ?というわけでたてた
2014/11/09(日) 18:18:41.40ID:K4BO8Ja1
クロージャだからって外の環境全部掴む必要無いんじゃね
クロージャが使用してない変数については各スコープのタイミングで解放すれば十分じゃないの
クロージャが使用してない変数については各スコープのタイミングで解放すれば十分じゃないの
2014/11/09(日) 18:20:47.86ID:xhtawW2X
evalが使える言語では、使用していないかどうか
実行するまでわからないのでそれは無理。
実行するまでわからないのでそれは無理。
2014/11/09(日) 18:24:28.78ID:KOr7L+hP
>>20,21
関数型言語ではなく関数型プログラミングの話だと考えれば、
すでに多くの言語でクロージャという概念は幅広く普及していると言えるのではないかと
たとえば C#、Java8、C++11、JavaScript、Ruby 等々
もちろん Python のように、クロージャが存在しない手続き型言語も広く使われているけどね
また、C++ や Java でも古い規格だとクロージャは存在していなかった
関数型言語ではなく関数型プログラミングの話だと考えれば、
すでに多くの言語でクロージャという概念は幅広く普及していると言えるのではないかと
たとえば C#、Java8、C++11、JavaScript、Ruby 等々
もちろん Python のように、クロージャが存在しない手続き型言語も広く使われているけどね
また、C++ や Java でも古い規格だとクロージャは存在していなかった
2014/11/09(日) 18:40:07.36ID:lx9et4kr
Pythonの関数は外の環境掴んでるからクロージャ
嘘は良くない
嘘は良くない
2014/11/09(日) 18:40:57.06ID:nlmXbEn2
>>24
クロージャじゃなくてevalを禁止すれば良いんじゃね?
クロージャじゃなくてevalを禁止すれば良いんじゃね?
2014/11/09(日) 18:55:58.44ID:KOr7L+hP
2014/11/09(日) 18:59:22.34ID:KOr7L+hP
>>28 を訂正、ラムダ式(匿名関数)の話であるのを書き忘れていた
X:>25 で挙げたクロージャを備えた言語は、どれも外の環境を掴んで
O:>25 で挙げたクロージャを備えた言語は、どれもラムダ式の中で外の環境を掴んで
X:>25 で挙げたクロージャを備えた言語は、どれも外の環境を掴んで
O:>25 で挙げたクロージャを備えた言語は、どれもラムダ式の中で外の環境を掴んで
2014/11/09(日) 19:03:23.62ID:lx9et4kr
2014/11/09(日) 19:08:15.30ID:nlmXbEn2
不毛だからケンカする前に用語を定義しろよ
オレオレ定義じゃないんだったら引用も必要
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3
> クロージャ(クロージャー、英: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。
> いくつかの言語ではラムダ式や無名関数で実現している。引数以外の変数を実行時の環境ではなく、
> 自身が定義された環境(静的スコープ)において解決することを特徴とする。
オレオレ定義じゃないんだったら引用も必要
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3
> クロージャ(クロージャー、英: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。
> いくつかの言語ではラムダ式や無名関数で実現している。引数以外の変数を実行時の環境ではなく、
> 自身が定義された環境(静的スコープ)において解決することを特徴とする。
2014/11/09(日) 19:13:25.68ID:nlmXbEn2
> (ラムダ式ではなく)関数で外の環境を掴めるのは当たり前の話であり、嘘は良くない
とりあえずelispにケンカ売ってるのだけは分かった
とりあえずelispにケンカ売ってるのだけは分かった
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 立民・岡田氏の質疑「不適切」 維新・藤田氏、台湾有事答弁巡り [蚤の市★]
- 【愛国者悲報】ナマコ、中国、香港、台湾しか食ってない...台湾はいいけど他ってどーなんの?漁師はどこに売ればいいんだこれ... [856698234]
- 4:44:44.444
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- そもそも日本て中国に日沈む国だとか無礼な事言ってたよね
- アニメでよく日本人キャラなのに目の色だけ変えたりしてるのあるじゃん?
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
