Help us understand the problem. What are the problem?
はじめに 前にブログで書いた記事なのですが、せっかくなのでQiitaにも投稿します。 脱初級者の壁として君臨しているクロージャ。クロージャの使い方はわかったけど、いろんな記事を見るとクロージャは問題点もあるみたい。それに、そもそもクロージャの使い所がいまいちわかんないと思ってクロージャに再度立ち向かおうと思った次第です。同じような悩みを抱えているデザイナーさん、コーダーさん、フロントエンドエンジニアさんの参考になれば嬉しいです。 クロージャとは とりあえずおさらい & 補足をします。 よく見かけるクロージャの見本がこちら。 function closure(initVal){ var count = initVal; var innerFunc = function() { return ++count; } return innerFunc; } var myClosure = clos
はじめに 動機 先日こんな記事を書きました。 ドメイン駆動設計と関数プログラミングをScalaで - Qiita ドメイン駆動設計と関数プログラミングをElixirで - Qiita Scala にしても Elixir にしても、純粋な関数型プログラミング言語ではなくて、オブジェクト指向の要素も取り入れたマルチパラダイムな言語だと思いますが、一方で旧来のオブジェクト指向な言語に関数型のパラダイムが入り込んできているという傾向 (map, reduce とかラムダとか) もあり、これから先も、両者が共に近づいてそれぞれのいいところを活かしながら発展し、ソフトウェア開発における生産性や変更容易性が上がっていくのかなぁと期待が膨らみます。 この記事では、関数型の何がいいのか、PHP + オブジェクト指向で書くにあたって、何か取り入れられるところはないか、という点について、ドメイン駆動設計のイディ
(2016/12/11、いただいたフィードバックをもとに翻訳を修正いたしました。) JavaScriptにおいて”純粋関数”とはどういう意味でしょうか? 一般的なプログラムの用語では、純粋性というのは”参照透過性”として知られています。カッコよく言うと、「 式や関数の呼び出しをその結果と置き換えたとしても、プログラムの振る舞いが決して変わらない 」こと、また別の言い方をするなら、「 同じ入力値を渡すたび、決まって同じ出力値が得られる 」ということです。 これなら直感的に理解できそうに聞こえますし、 x => x * 10 などの関数は純粋に見えます。これに数字の 3 を引数として渡したら必ず、出力値として 30 が得られますからね。では、ある関数が純粋で別の関数が純粋でないと、どうしたら分かるのでしょう? コードを読むだけで十分でしょうか? 一般的にどう思われているかを見てみましょう。昨日
最初に: 「Functional Programming 最高!」という話ではないです JSは通信やストレージに保存するデータの扱いの関係で、JSONにシリアライズできることが至上命題になるケースが多いので、クラスベースの設計で自身に副作用を起こすメソッドより、イミュータブルな T => T なstatic methodとして切り離しておくと扱いやすいケースが多い— 現場の声 (@mizchi) 2016年9月6日 複雑なオブジェクトのシリアライズは簡単だけど、逆にシリアライズされたオブジェクトからビルダを構築するのが難しいので、JSONの構造体自身とは別に独立して独立したメソッドとしてビルダが切り離されている方が扱いやすい— 現場の声 (@mizchi) 2016年9月6日 一応コンストラクタ名を保存してシリアライズ/復元する方法はあって、RPGツクールMVのコードを読むとそういう感じに
examples requests_oauthlib-0.6.1.dist-info oauthlib six-1.10.0.dist-info oauthlib-1.0.3-py2.7.egg-info six.py requests six.pyc requests-2.9.1.dist-info tweepy requests_oauthlib tweepy-3.5.0.dist-info 'xxxxxxxxxxxxxxxxxxxx' になっている''の間に取得したキーで置換してください lamba_function.pyの作成 Pythoスクリプトを作成します。 現在のディレクトリ(pipでモジュールをインストールしたディレクトリ)に lamba_function.py の名前でスクリプトを作成してください。 Pythonの基本的な部分をざっとまとめました 参考:AWS Lambd
関数型プログラミングが注目されて久しいです。 そろそろ勉強しておかないとなぁということで調べてみるものの、情報として出てくるのは"高階関数","カリー化","遅延評価","モナド"などの物々しい単語の数々。これらを勉強して理解した気になったものの、プログラムを書こうと思うと全然書けませんでした。 結局、関数型言語を実現する手段を学ぶ前に関数型と言われるパラダイムを理解しないことには書けません。ということでここでは関数型プログラミングの"手法"ではなく、オブジェクト指向と関数型プログラミングを比較しながら考え方の違いを見ていきます。 本日の例題 プログラミング課題を設定してオブジェクト指向と関数型で解答してみましょう。 課題: 唐揚げ弁当がいくつかあるとします。それぞれ唐揚げが複数入っています。 この中からx個の唐揚げをつまみ食いするプログラムを作りましょう。 つまみ食いはバレないようにする
For the past few months, I’ve been on adventure learning everything I could about functional programming. It seems like every week there’s a new frontend framework or library claiming some inspiration from functional programming, so I decided to check it out. One of my explorations was into Elm: an amazing Haskell-inspired language for building web applications. It gave me a taste of what function
結論を先にまとめると、以下の3つです。 1. グローバル変数の宣言をなるべく減らしたい場合 2. ユーザが引数を与えてカスタマイズ可能な自由度の高い「関数」を生成したい場合 3. 前回、呼び出されて実行されたときの演算結果(値)を内部で保存して、次に呼び出されたときに、前回の結果(値)に対して、さらに同じ処理(演算)を行う関数を生成したい場合 以下、「クロージャ」の定義から、頭の整理まで、分かりやすい参考ウェブサイトへのリンクを張りつつ、見ていきます。 【 定義 】クロージャ takeharuさん Qiita記事(2013/07/22)「JavaScriptでクロージャ入門」 「自分を囲むスコープにある変数を参照できる関数」 Wikipedia 「クロージャ」 引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環
関数型プログラミング (functional programming) の利点を説く際によく持ち出されるのが、QuickCheck の開発者の一人である John Hughes が 1984 年に著した論文 "Why Functional Programming Matters" だ。「なぜ関数プログラミングは重要か」という題名で日本語訳もされているので、読んだことがある人も多いと思う。 要旨としては、冒頭の1章および2章で述べられている「関数型プログラミングが優れているのは、高階関数と遅延評価という、モジュール同士を貼り合わせる強力な『糊』を持っているからだ」という話がほぼ全てで、以降はそれを具体例に基づいて説明する構成になっている。ただ、その具体例として「数値計算アルゴリズム」やら「ゲーム用人工知能アルゴリズム」やらの話が延々と続くし、しかもコード例が Haskell の先祖にあたる
ちょっとでもJava7なAndroidを気持ちよくプログラミングしたい、 Javaっぽい(?)ところがありつつもモダンなパラダイムが取り入れられているScalaが羨ましく見えたので、Scalaっぽく書きたいという意志から書いています サンプルコードでは紙面の都合上、retrolambdaでlambda式使っています Scalaの羨ましいところ 挙げればキリが無いですが、以下とします 関数型プログラミング 強力な式 関数型プログラミングっぽく これについてはRoppongi.aar #2 - connpassで私が発表した内容がベースとなっています OOなjavaで無理して関数型プログラミングを目指すのではなく、関数型プログラミングの中でもモナドといわれる便利なデータ構造を便利に使いたい、といった程度のものです そこで、Androidでもモナド実装して使えば気持ちいいんじゃないか、ということ
もうだいぶ前からすでに私はクロージャを使っています。使い方を学びましたが、実際にクロージャがどう機能するのか、また、使うと隠れたところで実際に何が起きるのかを明確に理解しているとは言えませんでした。そもそも、クロージャとは一体何なのでしょうか。 ウィキペディア はあまり役に立ちません。クロージャはいつ生成され、いつ削除されるのでしょうか。どのように実装されるべきなのでしょうか。 "use strict"; var myClosure = (function outerFunction() { var hidden = 1; return { inc: function innerFunction() { return hidden++; } }; }()); myClosure.inc(); // returns 1 myClosure.inc(); // returns 2 myClos
記事の内容に一区切りついたので、演習に加えて本コラムを挟むこととしました。今まではPythonを、順番に命令を並べて制御する「手続き型言語」として使ってきましたが、以後は「オブジェクト指向言語」として使いはじめます。 オブジェクト指向型言語とはなんぞやという話は次回以降に譲り、今回は手続き型言語、オブジェクト型指向言語に並んでよく使われる「関数型言語」について取り扱いたいと思います。 Pythonも関数型言語の思想を一部取り込んでいるので、関数型がどのようなものか学ぶことで、新しい「関数型に近いPythonの文法」を理解しやすくなるでしょう。また、Pythonに限らずさまざまな言語で「関数型のメリット」を強く意識して自分のコーディングにルールを課すことで、コードがより頑丈なものとなるかもしれません。 いずれにせよ、関数型を知って損することはないと思いますので、気軽に読んでいただけたら幸いで
はじめに 今日あった増田さんのDDD Allianceの3週連続DDDの話を聞いてきた所、最後の質疑応答で、 「ScalaやHaskellなんかの関数型的な考え方が適応できるんじゃないか?」 という質問が聴講者の方から上がったのですが、 増田さん的には「まだ挑戦的試みの域を出ない」という回答があったので、 ScalaでDDDを2年近くやってきた者として、これは役立つよねという手法を紹介しようと思います。 正直な話、DDDも関数型プログラミングも学ぶのに根気のいる難しい概念にもかかわらず、 バズワード化していろんな人が違う意味で使うようになってしまったので、 正直最近こういう話を書きたいと思わなくなってしまったし、 イスラムのムジャーヒディーンと十字軍の両軍の前で正義の定義について演説することに 近いものがあると思うので、気は進まないながらも、役立つものを紹介しようと思います。 まず最初に前
前編では、Elm言語の基礎とFRPのエッセンスについてコードを通じて学びます。 後編では、実際にElmを使ってアプリケーションを作る方法と、その際に重要になるアーキテクチャを学びます。 なお、執筆時点でのElmのバージョンは0.15.1です。 注意! Elmはバージョン0.17で大きな変更がありました。現在は「関数型リアクティブプログラミング」のための言語ではありません。 参考:A Farewell to FRP(さらば FRP) また、言語自体のシンタックスやライブラリのAPIも以前とは大きく変わっています。これからElmを始める方は、必ず公式ドキュメントを参照してください。 公式ガイド FRPとは何か リアクティブプログラミングの直感的な説明としてよく挙げられるのが、Excelのような表計算ソフトです。 例えば、セルの間にC1 = A1 + B1という関係があるとします。 このように宣
問題です。 問題: 呼び出すたびに、1,2,3,...を返すような関数 f( )を定義せよ。 f(); // 1 f(); // 2 f(); // 3 この問題、解けますでしょうか? 普通の関数では、できないと思います。 しかし「クロージャ」というのを使えば、このようなことができます。 クロージャって何だ? 「クロージャ」という言葉を、プログラムの本やサイトで目にすることがありますよね。 私が最初に見たのは続・初めてのPerl 改訂版(アルパカ本)でした。 まったく理解できませんでした。 その後、404 Blog not foundやnaoyaさんのブログなどで「クロージャ」という単語を目にしました。 やはり、まったく分かりませんでした。 とどめの一撃はWikipediaの解説記事。 クロージャ (クロージャー、Closure) は、プログラミング言語において引数以外の変数を実行時の環境
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く