2024年バージョンの全面改定された新しい本が公開されているので移動してください 関数型プログラミングをゼロからわかりやすく実用的に幅広い視点から解説!〜 圏論からFRPの構築まで a岡部 健Ken Okabekentutorialbook@gmail.com 関数型プログラミングが『銀の弾丸』である という非常識な常識 2022Functional Programming as the Silver bullet, that is the Insane common sense 2022
PHPには大量の配列操作関数が用意されています。 これらの関数、イマイチ書き味が悪いということで、よくPHPがDISられるポイントになっています。 お題として、こんな感じのコードを書きたいとしましょう。(意味は特にないです) 0~10000のうち、偶数だけを抽出して自乗し、結果が20を超えるものを足しあわせよ array_xxx系の関数だけで入れ子にしながら書くとこんなことになります。 echo array_sum( array_filter( array_map( function ($v) { return $v ** 2; }, array_filter(range(0, 10000), function ($v) { return $v % 2 === 0; }) ), function ($v) { return $v > 20; } ) ); 読めたもんじゃないですね。 関数の
いま学ぶべき第二のプログラミング言語はコレだ! 未来のために挑戦したい9つの言語とその理由 業務に必要なだけではなく、コンピュータによって問題解決できていない分野を切り開き、エンジニアとして戦っていくため、刺激的な第二プログラミング言語に挑戦しましょう。Rust、Go、Erlang、Elixir、Clojure、Scheme、OCaml、Haskell、Scalaを紹介します。 みなさんが使えるプログラミング言語はいくつあるでしょうか? ひとくちに「使える」といっても、ひととおりのチュートリアルは終えたという段階もあれば、言語仕様(あれば)やライブラリを知り尽くしていて、思いついた処理を即座にコード化できるという段階もあります。リファレンスとか参考書を見ながらであれば使える、ということも多いでしょう。 ベテランエンジニアなら、いろいろな仕事に携わっているうちに、さまざまな環境でそれぞれ必要
(Photo credit: A Health Blog via Visual Hunt / CC BY-SA) 「人工知能」ブームが本格化してまだほんの数ヶ月だと思うんですが、気がついたらTV含む大手メディアが皆こぞって毎日のように「人工知能」を取り上げ、あまつさえ政府や与党の諮問会議でまで「人工知能」の語が飛び交う有様で、一体何をどうしたらこうなるのか僕には全く分かりません(汗)。 とは言え、実際にビジネスの現場でも「人工知能」への期待感が日に日に高まり続けているのは事実で、例えば友人知人の経営者との酒席でも「最近人工知能ってめっちゃくちゃ流行ってるじゃん、あれって実際どうなの?本当に役に立つの?今からでも人工知能事業に参入すべきなのかな?それとも俺たちあいつらに滅ぼされちゃうの?」みたいなことを聞かれることが多いんですよね。 ということで、そういう「人工知能」ブームに乗り遅れたけれど
現在の Android Developers の情報は非常に充実していて、Developer Guides を順に読み進んでいくだけで開発に必要な知識とGoogleが想定している(であろう)最も基本的な実装を学ぶことができる。 特にこの「基本的な実装」というものが重要で、これを知っておかないと開発者間の意思疎通がスムーズに行えなかったり、そもそも気をつけておくべき注意点を見落としがちになってしまう。 とはいえ、今の膨大な公式ドキュメントをただ読めというのは厳しいので、Android開発をする上で最低限理解しておいてほしい(と僕が思っている)事柄と、それについて知ることができるドキュメント類についてまとめてみることにする。 2018/03/25 : リリース周りについて別記事に追記した。 nein37.hatenablog.com 公式ドキュメントの重要ページ 公式ドキュメントと言った場合、
PHP 5.3 がリリースされてもう 5 年以上経ちます。 5.3 で無名関数 (Closure) が使えるようになってからは、高階関数を使うなどした関数型っぽいアプローチの可能性が広がりました。 中でも nikic/iter は関数型のコレクション操作を行う上で非常に便利なライブラリです。 ですが、関数を単純にラップする記法では、関数を重ねたときに読みづらく感じる人もいるでしょう。 オブジェクト指向的なメソッドチェインと違って、読み下す順番と、実際の実行順序が逆行するところに原因がある気がします。 以下は 1 から 10 までの数列の全要素を 2 倍してから全て足し合わせる例です。 use function iter\fn\operator; use function iter\map; use function iter\range; use function iter\reduce;
25. $range = function ($start, $end, $step = 1) { for ($i = 1; $i <= $end; $i += $step) { yield $i; } }; ! foreach ($range(1, 100) as $n) { echo $n, PHP_EOL; } ジェネレータでrange
などと省略して書けます。 echo と print は(ほぼ)同じものですが、 echo の方が文字数が少ないので(笑)オススメです。 flush関数を使うと、出力を即座にブラウザに表示させることができます。 長く実行時間のかかる処理で、途中経過を逐次表示させたい場合は、 flushを毎回呼び出すと良いです。 (実際には、flushとob_flushを両方呼ぶ必要があります) (例) flushを使ったサンプル
あと、やはりネットワーク周りなどI/Oの多いプログラムの書きにくさが課題になっている印象。関数的なI/OはFRPで解決できそうな気がするんだけど調べてない。そろそろFRPをちゃんと理解したいなー。 Parsec 3活用事例: Keepalived構文チェッカ - maoeのブログ なんて書いてから早1ヶ月半、ようやくFRPが掴めてきたのでわかったことをまとめてみます。 Reactive programmingって何? FRPの前に、一般的にwikipedia:en:Reactive programmingと呼ばれるパラダイムについて触れておきます。reactive programmingとは疑似言語を使ってかなーり大雑把に説明すると、 var a = 1 var b = a + 1 a = 10 // aを書き換える print b // => 11print bの出力は2ではなく11です
リアクティブプログラミングは、「時間とともに変化する値」=「振る舞い」同士の関係性を記述することでプログラミングを行うパラダイムです。 GUIなどのようにインタラクティブなシステムや、シミュレーションやアニメーションのようにダイナミックに状態が変化するようなシステムを宣言的に記述することができます。 これらの「変化する状態」や「外部とのやりとり」が支配的なシステムは、純粋関数型言語が、その強みを発揮しにくい部分でもあります。 本稿では、リアクティブプログラミングが副作用を含む系を宣言的に記述することを可能にし、状態の管理という厄介な問題からプログラマを開放する可能性があることを示したいと思います。 (割と独自研究に基づく解釈ばかりなのでその点ご了承ください。あと例としてでてくるコードは、Pythonベースの擬似コードで具体的なライブラリに基づくものではありません。) Why Reactiv
エンジニア組織を強くするための本を出版しました Qiitaでエンジニアリングをめぐる様々なコミュニケーションの問題とその解決策や考え方を書いてきた。それらの背後にあるエッセンスをこの度書籍として出版するに至りました。 エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング この書籍は、エンジニアリングを「不確実性を削減する」という第一原理で捉え直し、様々なエンジニアリングとその間のコミュニケーションをめぐる現象を説明していくものです。 あわせて読みたい 新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習 この記事について この記事は、新人向けの研修内容を再編集してお送りします。 この記事の内
JavaScript チュートリアル 初級編 JavaScript の基礎 JavaScript の第一歩 JavaScript の構成要素 JavaScript オブジェクト入門 JavaScript ガイド 入門編 文法とデータ型 制御フローとエラー処理 ループとイテレーター 関数 式と演算子 数と日付 テキスト処理 正規表現 インデックス付きコレクション キー付きコレクション オブジェクトを利用する Using classes プロミスの使用 JavaScript 型付き配列 イテレーターとジェネレーター メタプログラミング JavaScript モジュール 中級編 クライアントサイド JavaScript フレームワーク クライアントサイド Web API Language overview JavaScript のデータ構造 等値比較と同一性 プロパティの列挙可能性と所有権 クロ
どうも、まさとらん(@0310lan)です! プログラミングのスキルが、なかなか向上しない…と感じている…どうも、まさとらん(@0310lan)です! プログラミングのスキルが、なかなか向上しない…と感じている方に朗報です! 非常に丁寧に作りこまれたWebゲームを遊びながら、プログラミングの勉強をすることが出来る無料のWebサービスが海外で注目されているのでご紹介します。 それが、「CodinGame」です! どんなサービスなの? まずは、実際にプレイしてみましょう! サイトのトップページにある「PLAY」ボタンをクリックします。 トレーニングコースが用意されているので、こちらをクリックします。 すると、メイン画面の解説チュートリアルが始まります。 チュートリアルが終わると、いよいよゲーム開始なのですが、念のため「メイン画面の区分」を以下に明記しておきます。 基本的には
このページの最終更新日:2019年7月4日 JavaScript。主にWebページを作るのに使われるほか、現在ではさまざまなところで活躍しているプログラミング言語です。 このページはJavaScriptの中級講座です。最新鋭ではないかもしれませんが、読み進めれば大抵のものを自分で作れるようになることでしょう。 言い訳とJavaScriptの歴史 / 問い合わせ 最近の更新2017/10/05 全ページを手直ししました。十六章第六回を追加。2017/11/9 十六章第二十一回・十六章第二十二回を追加。2017/12/2 十七章第三回・十七章第四回を追加。2017/12/3 十七章第五回・十七章第六回・十七章第七回を追加。概要コンテンツは第一篇と第二篇に分かれています。 JavaScriptは昔からWebページに動きを与えるものとして用いられてきましたが、第一篇ではそのような、昔からあるJav
最近、あまりプログラミングが得意でない人のサポートをする形で、長い時間にわたってペアプログラミングを行っている。そのなかで、気がついた悪い習慣と成長するための良い習慣というものをまとめてみる。 この記事のバックグラウンドとなる体系的知識が本になりました。 エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング あわせて読みたい 経営者マインドが足りない!vs. 現場に任せてくれない!の対立をなくすカードゲームをつくった話 新人プログラマに知ってもらいたいメソッドを読みやすく維持するいくつかの原則 新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 ペアプログラミングして気がついた新人プログラマの成長を阻害する悪習 あきらめるにはまだ早い!ソースコードの品質向上に効果的なアプローチ 心理的安全性ガイドライン(あるいは権威勾配に関する一
また1年振りの更新となりかけました。 Andres Raba氏により2011年から開発が続けられている、非公式PDF版SICPを全訳しました。 ファイル 恒例のgithubです。 https://github.com/minghai/sicp-pdf jsicp.pdfが日本語版の本体です。 ejsicp.pdfはデバッグ用の日本語・英語併記となります。 ライセンスはCC BY-NC-SA 3.0です。商業使用は認められないことにご注意下さい。 SICPとは何か? SICPとはMITが作成した何も知らない新入生向けのプログラミングの教科書です。 プログラミングと強調したことには理由があります。この本は良くあるプログラミング言語の教科書ではなく、あくまでもプログラミングを勉強するための教科書だからです。このことはこの本の中でも、最初の前書き、序文にて何度でも繰り返し強調されています。筆者達が
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く