Code Archive Skip to content Google About Google Privacy Terms
最近、スタートHaskellで「カリー化された関数のメリットは何か?」という質問が出た。そのすぐ後に、kmizuさんがカリー化の誤用に対して警鐘を鳴らしてしていた。僕からするとkmizuさんの「カリー化の定義」も誤用に思えたので、調べるとともに考えたことのまとめ。 いろんな定義 「カリー化する」という用語は、すくなくとも以下の3つの意味で使われているようだ。 部分適用という意味 これは明らかに間違い 「複数の引数を取る関数」を「一引数を取る関数のチェインに直す」こと これはkmizuさんの定義。世間でもよく使われる。 「構造体を一つ取る関数」を「構造体のメンバーを複数の引数にばらし、一引数を取る関数のチェインに直す」こと これは僕の定義。というか、Haskellコミュニティの定義。 「部分適用」の意味で使うのは明らかに間違いのなで排除。定義2と3について議論する。あとで、部分適用とは何かに
追記 たくさん反響があって驚きました。念の為書いておくと、私はこの記事で仕組みを解説しただけで、このようなノウハウに賛成も反対もしていません。追記はここまで。 azu さんのつぶやきで知った、Dangers of anonymous function closures が、例がよいのに説明が少ないので、ここで丁寧に解説します。なぜ、 jQuery で ;(function () ...とセミコロンで始めるコードがあるのかがわかります。 次のサンプルの実行結果を想像して下さい。 var foo = function(bar) { console.log("foo"); return bar; } (function(){ console.log("bar") })(); 結果は "foo bar" を印字します。多くの場合、これは意図しない挙動だと思います。"bar" だけだと思いませんか。
(function(){...})()は、 (function($){ $.hoge = function() { }; })(jQuery) みたいに使われていたりするコード。GreasemonkeyとかjQueryのプラグインとか、あれこれ見かけることがあると思います。 この話題はいくつかWebでも取り上げられていますが何がどうなってんのかちょっと難しいですね。しかし、誰でも理解できるレベルではあります。というのも、こういう種の難しさは体系的な知識が備わっているか否かということなのです。 でも、この知識を体系化する作業って結構しんどくて、難しくて、まーハゲるほど悩むこともあるかもしれない。それはきっと、とても毛根に悪いかもしれない。スカルプDも真っ青の状況になるかもしれない。それは、悲しいことなのだと思う・・・っ! 毛根にはこれからもがんばってほしい!いつだって頭を温かいまなざしで見守
はじめに JavaScriptで文字列を反転する10の方法を(無理矢理?)思いついたので、ちょっと簡単に紹介したい。また、それぞれについて、各ブラウザでパフォーマンスを測定してみたので、その結果も合わせて載せる。 文字列のStringオブジェクトには、部分切り出し(substring, slice)や置換(replace)、連結(concat)など豊富な機能があるのに、反転(reverse)機能はない。Arrayのreverseはあるのに、Stringのreverseがないのはどうしてなのだろうか。 各ブラウザとそのバージョンは以下の通り: Chrome Firefox Opera Safari IE 13.0.782.112 m 6.0 11.50 5.1(7534.50) 8.0.7600.16335 rev01: C言語的発想 空の配列を作って、そこに元の文字列の後ろから1文字つづ入
The Artima Developer Community 2011.7.15の記事 JavaScript Redux (and Closures) java/c++の本書いたり、flex/flashでUI開発長年したり、flexでの開発用にpythonでツール作ったりと別の言語では経験豊富なエンジニアが、flex/flashは将来性なし、でもhtml/css/jsのセットはクソ、js飼いならすにはクロージャ大事、js実行環境としてのブラウザの今後についてまで、サクサク書かれたエントリ 以下斜め呼んだ内容 サマリー エンジニアは誰もがjsと向き合う必要あり jsは醜いがよくなってきた部分もある jsをテーマにした良いレクチャーや名著が色々ある それを見たり読んだりしたらjsへの見方がかわると思う クロージャを理解してない人にもこうしたレクチャや本は有益 他の言語ではクロージャは「あったら
生存報告 ( ^ω^)とりあえず生きてます。 potraceとは potraceとはラスター画像からSVG等のベクター画像を作成するソフトです。無料で使えてソースも公開されているオープンソースなソフトです(参考資料1)。元はCで書かれていますが、python、ActionScript、C#に移植されていたりします。 だから何ができるの? 左が元のビットマップ画像、右がそれをpotraceでトレースした画像 C→javascript(´・ω・`)、ActionScript→JavaScript(゚∀゚) ActionScriptとJavaScriptは兄弟みたいなものなので移植はとっても簡単です。今回は参考資料2をパクって参考にしてjavascriptに移植してみました。 処理フロー imgタグで画像を読み込み 画像をcanvasに転写 画像をグレースケールに変換 画像を二値化 画像の輪郭の
既存の JavaScript プログラムに埋め込まれた、経緯度とGoogle Mercatorとの変換式(特にメルカトルから経緯度への逆変換式)を確認してみました。Safari の Web インスペクタを使って簡単に調べてみます。 基本的方法 Safari や Chrome に付属している Web インスペクタには「コンソール」があります。ここに JavaScript コードを書き込むと、そのページでロードされている JavaScript オブジェクトに簡単にアクセスすることができます。Ruby の irb を使うように、Web インスペクタコンソールを使って、JavaScript プログラムを理解していきます。 OpenLayers の場合 http://trac.openlayers.org/wiki/SphericalMercator を読むと結局、OpenLayers.Layer.
JavaScript の小ネタです。 UserAgent 文字列(window.navigator.userAgent) "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.814.0 Safari/535.1"から、Windowsのバージョン(6.1)を取り出すようなコードをよく見かけますね。 ちょっと前の私は RegExp#exec + parseFloat で、こんな(↓)感じにしていたり、 function getWindowsVersion() { var m = /Windows NT (\d+(\.\d+)?)/.exec(navigator.userAgent); if (m) { return parseFloat(m[1]); } return 0;
Daftar Serta Masuk Saat ini Di Situs Slots Online Terpilih Ojekslot Seperti yang kita pahami waktu ini ada sangat banyak permainan slot online paling sederhana yang dapat dimainkan dalam sekejap hanya cukup masuk di sana saja ojekslot terunggul. Di sini dapat ada sangat banyak bermacam permainan luar biasa yang pastinya dapat anda temukan dengan ringan. Beraneka permainan terbaik di sini dapat and
(updated 2011-07-11: この記事はjQuery1.5当時のものです。jQuery1.6以上であればpipeメソッドが存在するので、このエントリで懸念している部分については解決します。id:nanto_viさまのコメントも参照のこと) 最近、僕の観測範囲ではjQuery1.5からサポートされたDeferred Objectが話題になってますね。 ここで書いていたことをちょっと解説。 リリース時、遂にjQeuryでも遅延処理のサポートが!と僕もちょっと喜んだのですが、それもつかの間、以下の動作を見ていただきたいな、と。 → http://jsdo.it/ttaiyoh/evYG 普通、とくにjsDeferred使っていた人間なら、以下のような動作を期待しますよね? → http://jsdo.it/ttaiyoh/zI5H Deferred Objectのソースみてもらえると
「jQueryのDeferredとPromiseで応答性の良いアプリをー実践編」 で述べましたが、Deferred には次の様なうれしさがあります。 非同期な処理をする部分と、その結果をインターフェースする部分を分離する事によって、(特にアプリケーションに近い部分で) コードの可読性が高まる 複数の Deferred オブジェクトをまとめて監視出来る 一方 Web Workers には、window オブジェクトや DOM へのアクセスが出来ないなど、ちょっと引いてしまう制限がありますが、考えようによっては、表示やマウス入力を扱う ユーザー・インターフェースな処理 と、その中身の 純粋にデータ的な部分を扱う処理 とを分離して Web アプリを作るという、オブジェクト指向的な考え方と極めて親和性が良いのではないかと思います。 ということで今回は、「Deferred と Web Workers
はじめに 最近になって jQuery に Deferred Object と呼ばれるものが追加されたことを知りました。バージョン1.5から追加になったようです。 ここのところ色々な場面で非同期処理と付き合うことが多かったこともあって調べてみたのですが、中々嬉しい機能を持っているやつであることが判明したので、調べた内容についてまとめてみました。 非同期処理は結構書きにくい jQuery Deferred オブジェクトは非同期処理を書きやすくするために用意されたものです。でも何でそんなものが追加されたのでしょうか? 非同期処理は複雑になってくると書きにくいものです。Ajaxリクエストを例に挙げてみます。 $.ajax({ url: "serviceA.json", success: function(data) { // リクエストが成功したときの処理 }, error: function(x
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
insertAfter - 素人がプログラミングを勉強するブログで、nextSiblingがnullの場合にはうまくいかないと書いたが、間違っていた。 parentNode.insertBefore(newNode, null); とした場合には、parentNodeの最後の子の後にnewNodeが追加される。 つまり、insertAfter相当のことをするには、 Category:Coding Tips - GreaseSpot Wikiにある通り、 function insertAfter(newNode, node) node.parentNode.insertBefore(newNode, node.nextSibling); とすればいい。appendChildにする必要はない。
mooz @stillpedant strict mode で [[Global]] ってどうやって得るのだろうか. this は使えないし. __parent__ とかか? 2010-10-16 00:13:01 Atsushi Takayama @edvakf @stillpedant indirect eval call (eval という名前じゃない eval 呼び出し) がグローバルスコープで実行されるので。var e = eval, global = e('this'); でいいはず。 2010-10-16 00:19:56
ないけど、なくても困らない。 insertBeforeでできる。 parentElement.insertBefore(newElement, targetElement.nextSibling) targetElement の後ろに newElement を入れたかったらこれで済む。 targetElement がparentElementの最後の子要素(lastChild)だったとしても、 targetElement.nextSibling は null となり、 parentElement.insertBefore(newElement, null) は末尾に追加なので、万事OK。 安易に insertAfter() を作らなかったことを評価したい。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く