Blank?=Falseスマートフォン用の表示で見るBlank?=False「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々Blank?=Falseこの広告は、90日以上更新していないブログに表示しています。Rubyとある事を以前、職場の上司に言われた。プログラマを何年もやっていてもわからないことは多い。実は基本的なこともしらなかったこともあるしよくわかってなかった、と言うのは本当によくある。大切なのはよくわからないまま放置しないことだ。はい、わからないまま放置していること多いです!というわけで、今回はよくわからない基本的なことの1つ、クロージャをお勉強。自分がよくわからなかったところ勘違いした原因クロージャをどう使っていくか参考文献・サイトおまけクロージャって何?Wiki先生に聞きましょう。closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数で実現している。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環境のペアであるともいえる。主な利点としてはグローバル変数の削減が挙げられる。Wikipediaちょっとよくわかりません。日本語でry色々なサイトで勉強してみて、ようやく意味がつかめました。下の2点がクロージャの特徴です。引数以外の変数を実行時の環境ではなく、自身が定義された環境で(以下略)これは、関数そのものをオブジェクトとして持って、引数以外の変数は前回実行時の状態を保存しておく、ということです。主な利点としてはグローバル変数の削減が挙げられる上の前回その関数を実行した状態を保存しておく、という利点を使って、その関数が実行された回数をわざわざグローバルで持たず関数オブジェクトで保持することが可能になります。自分的には、クロージャとは関数の状態を保存して、いつでもその状態で処理を始められる方法と解釈しました。クロージャの実際の例よくあるカウンタの例です。}この例についての解説は、@ITの記事を参照してください。他のサイトも見たのですが、ここが詳細にかかれてわかりやすくなっています。http://www.atmarkit.co.jp/ait/articles/1409/29/news035_3.html自分がよくわからなかったところincrease_procという関数オブジェクトを使うことで、nが5,10,15となっていくのはわかります。n=0の部分はなぜ無視されてしまうのか?これがよくわかりませんでした。悩んだ結果、以下のことに気づきました。}、つまりProcクラスつまり、increase_procはincreaseメソッドの関数オブジェクトと勘違いしてたわけです。本当は上の通りProcオブジェクトの中身の関数オブジェクトだったということでした。前職ではC++をやっていたのですが、そのC++に関数ポインタと言うものがありました。この関数ポインタは、下のような感じで使います。Sumの下りが似てたんですね...この場合、Sumという関数のポインタをfunc変数に保存する、と言う事になります。Sum関数全部が1つのfunc変数に入ってます。C++に慣れてる人は気をつけてください!(こんな勘違いするのは自分だけ)クロージャをどう使っていくか上の特徴にある通り、グローバル変数を削減したいといったシチュエーションで使えると思います。基本的に私はグローバル変数を使わない実装にしているので、使う機会は余りなさそうな。これに関しては色々なサイトを見たり自分で使ったりして自分なりの使い方を見つけていく必要がありそうです。qiita.comおまけこのクロージャはメタプログラミングの技法の1つとされています。RubyをRubyたらしめるのはこのメタプログラミング、ともいわれているのでメタプログラミングをしっかり勉強してみたいところです。さしあたっては以下の本を読むところから始めないと。その心は?Tweet広告を非表示にする関連記事2016-11-22関数、メソッド、プロシージャ。それぞれの違いは?どうもこんばんわ。プログラミングだと関数を作って・・・とか...2016-11-19汝、SLAPを愛せよ。SLAPという言葉があります。コントローラとアクション今回は、コントローラとアクションについて学習してきます。岩波書店のISBNコード騒動について考える。»Profile某製造業の社内Sler。今のお仕事のメインはAccessとVBA。元パッケージソフト開発者。VBA、そしてRDBやNoSQLを組み合わせたアプリケーション開発を得意としています。福岡県、もしくは熊本県へIターン転職に向けて、DB/NoSQLの業務に関われる会社を探しています。レベル1取得しましたリファクタリングの帽子をかぶるということ勉強は大変だが役に立つCUIなCentOS7にcinnamonを導入するLinuxのコマンドはMacOSXでそのまま動くとは限らない月別アーカイブTwitterGooglePocketはてなブログをはじめよう!stonebeach-dakarさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。