並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 132件

新着順 人気順

OCamlの検索結果1 - 40 件 / 132件

OCamlに関するエントリは132件あります。 プログラミングprogramming などが関連タグです。 人気エントリには 『プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog』などがあります。
  • プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog

    κeenです。最近JEITAのソフトウェアエンジニアリング技術ワークショップ2020に参加したんですが、そこで五十嵐先生、柴田さん、Matzとパネルティスカッションをしました。その議論が面白かったので個人的に話を広げようと思います。 年末年始休暇に書き始めたんですが体調を崩したりと色々あって執筆に時間がかかってしまいました。 時間を置いて文章を書き足していったので継ぎ接ぎ感のある文体になってるかもしれませんがご容赦下さい。 というのを踏まえて以下をお読み下さい。 いくつか議題があったのですが、ここで拾うのは一番最後の「プログラミング言語の未来はどうなるか」という話題です。 アーカイブが1月末まで残るようです。もうあと数日しかありませんが間に合うかたはご覧下さい。 そのとき各人の回答を要約すると以下でした。 五十嵐先生:DSLを簡単に作れる言語というのが重要。それとプログラム検証、プログラム

      プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
    • オブジェクト指向には、カメラがやっとついたころのガラケーのイメージがある - きしだのHatena

      某所でオブジェクト指向についていろいろ書いたのでまとめておく。 問題意識としては初学者がなにかというと「オブジェクト指向できるようになりたい」のようなことを言うけどそこまでの優先順位でがんばるものではないんでは、というところです。 まず前提として、オブジェクト指向は1980-2000年くらいに流行って発達したものの、それ以降は時代にあわせた進歩はしていない20年以上前の技術ってのがあります。 そのころは今だとCPUのキャッシュにも満たないようなメモリをやりくりしてプログラムを書く必要があったので、オブジェクト指向はメモリ上のデータをコピーすることなくうまく使いまわせるようなプログラム技術になっています。 そしてオブジェクト指向にはそこから目だった更新はなく、タイトルに書いたように、カメラがやっとついたくらいのガラケーのような古い技術という感じがします。 オブジェクト指向について、アプリケー

        オブジェクト指向には、カメラがやっとついたころのガラケーのイメージがある - きしだのHatena
      • 関数型プログラミングが『銀の弾丸』であるという非常識な常識2022

        2024年バージョンの全面改定された新しい本が公開されているので移動してください 関数型プログラミングをゼロからわかりやすく実用的に幅広い視点から解説!〜 圏論からFRPの構築まで a岡部 健Ken Okabekentutorialbook@gmail.com 関数型プログラミングが『銀の弾丸』である という非常識な常識 2022Functional Programming as the Silver bullet, that is the Insane common sense 2022

        • map / filter などの高階関数よりも古典的な for文の方が読みやすいと感じるあなたへ

          class: center, middle # map / filter などの<br>高階関数よりも<br>古典的な for文の方が<br>読みやすいと感じる<br>あなたへ BuriKaigi 2025 2025/02/01<br> @gakuzzzz --- class: left, top ## 自己紹介 * 中村 学/Manabu NAKAMURA * Twitter: [@gakuzzzz](https://twitter.com/gakuzzzz) * [Tech to Value Co.,Ltd.](https://www.t2v.jp/) CEO * [Alp, Inc.](https://thealp.co.jp/) Tech Lead --- class: left, top ## はじめに 昨今のメジャーなプログラミング言語では、 `map` や `filter`

          • 現代のオブジェクト指向の class の割れ窓化と宣言的プログラミング

            オブジェクト指向には、カメラがやっとついたころのガラケーのイメージがある - きしだの Hatena の件。基本的には同意。ただちょっと切り口が違うので自分の意見を言っておく。ただ、このテーマで何度か書こうとして失敗していて、今回も成功しているとはいえない。 宣言的プログラミングの時代 現代の主流は「宣言的プログラミング」であると思っている。これはリソースの宣言と、その状態遷移の手続きや振る舞いの付与が中心にある。 宣言型プログラミング - Wikipedia その代表的な例がフロントエンドの React と、バックエンドの k8s で、どちらも時系列に基づいた状態の宣言と、フレームワーク側による状態遷移処理、 Reconcillation(調停) が基礎にある。 フロントエンドとバックエンドという両極端な世界で、この変化が起きたのがこの時代を反映したものであると思う。 例えば、jQuer

              現代のオブジェクト指向の class の割れ窓化と宣言的プログラミング
            • 関数型プログラミングと型システムのメンタルモデル

              Qiita Conference 2023 Autumun での発表資料です 発表時間の見積もりが下手で後半全然説明できませんでした、すみません! 実際のプロダクト開発ではどうすればいいのか? というケースは以下のスライドを参照してください。 (本スライドは、こちらのプロダクト開発の経験を…

                関数型プログラミングと型システムのメンタルモデル
              • こわくない関数型プログラミング

                関数型プログラミングは全部理解しようとすると難しいですが、簡単な部分の中にも有用な知見がたくさんあります。 関数型プログラミングにまだ親しんでいない人向けに、明日からのプログラミングにすぐ役に立つ考え方をできるだけわかりやすく伝えます。

                  こわくない関数型プログラミング
                • ビジネスロジックを「型」で表現するOOPのための関数型DDD / Functional And Type-Safe DDD for OOP

                  Object-Oriented Conference 2024で発表した資料です。 https://fortee.jp/oocon-2024/proposal/b31c9818-3cb8-4350-adfe-cbc839cdf829 ビジネスの専門知識(ドメイン)を中心に据えたドメイン駆動設計に…

                    ビジネスロジックを「型」で表現するOOPのための関数型DDD / Functional And Type-Safe DDD for OOP
                  • TypeScript 関数型スタイルでバックエンド開発のリアル

                    TSKaigi 2024 のスライドです

                      TypeScript 関数型スタイルでバックエンド開発のリアル
                    • Rustで真に安全なプログラムを書く方法 - かとじゅんの技術日誌

                      この記事はRust Advent Calendar 2021の12/8日の記事です。 Rust前提の記事として書きましたが、他の言語にも適用できる考え方なので、ほかの言語勢の方々もよければお付き合い下さい。 今回のテーマは「Rustで真に安全なプログラムを書く方法」についてです。 「真に安全なプログラム」の定義は以下とします。 挙動が安定し、結果が予測可能となる 正しさの基準に基づき、プログラムの間違いを検知することができる 「真に」とはドメイン知識に基づく正しさという意味です。詳しくは後述します。 それと「そもそもRustで実装されるプログラムは安全じゃないのか」という想定質問については「メモリの操作は安全。だが、それだけでは真に安全なプログラムにはならない」が答えになります。これについて興味がある方、ぜひ最後までお付き合いください。 「真に安全なプログラム」を実現するレシピとしては「関

                        Rustで真に安全なプログラムを書く方法 - かとじゅんの技術日誌
                      • なぜmapやreduceやfilterなのか〜前編|こわくない関数型プログラミング

                        のように、式を変形してから代入するというテクニックが使えます。 もちろんこの式変形はxとyがどんな実数のときでも成り立ち、特定の値だとうまく行かない、なんてバグはありません。 割り算を含むような式では、「0で割るのは未定義」といったアサーション条件もきっちり定義されています。 数学で習ったたくさんの式たちは、どれをどう組み合わせてもバグがないのです。 プログラミングをしていて、たくさん作ったクラスやメソッドのどれをどう組み合わせてもバグがない状態なんて、ちょっと考えられませんよね。 バグの少ないプログラムを書きたい こんなことを考えてみましょう。 バグのない関数の組み合わせだけで全部の処理が書けるだろうか? 「関数の組み合わせ」と言うのは、 関数Aの返り値を関数Bの引数として渡す という意味です。四則演算もれっきとした関数です。Scalaなんかでは"+"とか"-"もちゃんと標準ライブラリの

                          なぜmapやreduceやfilterなのか〜前編|こわくない関数型プログラミング
                        • Functional TypeScript

                          オープンデベロッパーズカンファレンス(ODC)2024 での発表資料

                            Functional TypeScript
                          • TypeScriptでどこまで「関数型プログラミング」するか ─ 「手続き Haskell」から考察する - 一休.com Developers Blog

                            この記事は 一休.comのカレンダー | Advent Calendar 2023 - Qiita 10日目の記事です。 昨今は Web アプリケーション開発の世界でも、関数型プログラミングのエッセンスを取り入れるような機会が増えてきました。 とはいえ、一つのアプリケーションを 1 から 10 までがっちり関数型プログラミングで構成するというわけではなく、そのように書くこともあればそうでない従来からの手続き的スタイルで書くところもあるというのが現状で、どこまで関数型プログラミング的な手法を取り入れるかその塩梅もまちまちだと思います。まだ今はその過渡期という印象も受けます。 本稿ではこの辺りを少々考察してみたいと思います。 先日、Qiita Conference 2023 Autumn で以下のテーマで発表を行いました。 この発表では「関数型プログラミング最強!」という話をしたわけではなく、

                              TypeScriptでどこまで「関数型プログラミング」するか ─ 「手続き Haskell」から考察する - 一休.com Developers Blog
                            • OCaml でゲームボーイエミュレータを書いた話 - Qiita

                              はじめに ブラウザ上で動くゲームボーイエミュレータを OCaml で書きました。以下のページで試せます。 デモページ いくつかの homebrew ROM も一緒になっているのでいろいろ遊んでみてください。おすすめは「Bouncing ball」と「Tobu Tobu Girl」です。最近のスマホならだいたい安定して 60 FPS 出るはずなので、スマホでも遊べます。 レポジトリはこちらです。 スクリーンショット なぜ OCaml でゲームボーイエミュレータ?新しいプログラミング言語を学ぶ過程で以下のように思ったことはないでしょうか? 簡単なプログラムなら書けるが、中規模以上のコード1をどうやって書けばよいのか分からない 発展的な言語機能2も勉強しなんとなく理解した気になったが、実践のなかでどのように活用すればいいのかが分からない OCaml を本格的に勉強し始めてた数ヶ月前の筆者はまさに

                                OCaml でゲームボーイエミュレータを書いた話 - Qiita
                              • 変数(variable)と値(value) - ソフトウェア設計を考える

                                はじめてScalaに触れたとき、変数宣言(var)と値宣言(val)を使い分ける言語仕様に、なるほどなあ、と思った。簡単に言えば、変数(var)は再代入できて、値(val)は再代入できない。 プログラミングのスタイルとして、var宣言は命令的なプログラミング、val宣言は宣言的なプログラミングになる。どちらのプログラミングスタイルで書いているかを、varとvalで明示できるわけだ。 Javaだと言語の基本の仕組みはすべてが変数。final宣言をすることで再代入をコンパイルエラーにすることはできる。Javaは、C言語やC++などの命令的なプログラミングの系譜の言語なのですべて変数(variable)というのは、とうぜんの言語仕様だった。 命令的なスタイルから宣言的なスタイルに 命令的なプログラミングでは変数(variable)を使う。宣言的なプログラミングでは値(value)を使う。 再代入

                                  変数(variable)と値(value) - ソフトウェア設計を考える
                                • エラーや非同期処理をより安全に扱うための TypeScript ライブラリ Effect-TS

                                  エラーや非同期処理をより安全に扱うための TypeScript ライブラリ Effect-TS Effect-TS は、開発者が複雑なエラーや非同期処理をより安全に開発できるようにすることを目的とした TypeScript ライブラリです。Effect-TS は、TypeScript の型システムを活用して、本番のアプリケーションにおける実用的な問題を解決することを目指しています。 Effect-TS(正式名称は Effect)は、開発者が複雑なエラーや非同期処理をより安全に開発できるようにすることを目的とした TypeScript ライブラリです。Effect System という概念を取り入れており、Scala や Haskell といった関数型プログラミング言語に影響を受けています。 TypeScript の型システムを活用して、本番のアプリケーションにおける実用的な問題を解決するこ

                                    エラーや非同期処理をより安全に扱うための TypeScript ライブラリ Effect-TS
                                  • 【TypeScript】カリー化・部分適用は便利だよ! - Qiita

                                    【TypeScript】カリー化・部分適用は便利だよ! カリー化・部分適用利用してますか? 調べたけど「関数を第一級オブジェクトとしてー」とか「関数を部分適用してー」とか説明が講義っぽくて途中で諦めた方も多いと思います。自分もそうでした。 また、知ってるけどどんな時に使うべきか迷って使ってないという方もいると思います。 具体的なコードを交えながら、カリー化・部分適用について、噛み砕いて説明していきたいと思います。 なお、すべてのTypeScriptのサンプルコードは実際に動かして確認することができますので、TypeScript Playgroundなどで是非お試しください。 カリー化と部分適用 まずはカリー化と部分適用の定義をば。 カリー化 (currying, カリー化された=curried) とは、複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引

                                      【TypeScript】カリー化・部分適用は便利だよ! - Qiita
                                    • 畳み込みの視点から見たforall(every)とexists(some): 空集合に対するforallは常にtrueになる - Lambdaカクテル

                                      こういうツイートが話題になっていた。 「配列のすべての要素が条件を満たすならtrueを返す」関数を定義するとき、空の配列を渡したらfalseを返すかtrueを返すかが、良いプログラマかどうかの一つの境目だ— ふみ (DJ Monad) (@fumieval) 2023年5月29日 つまりScalaで言うと次のようなコードが何になるか、というものである。 val xs = Seq.empty[Int] xs.forall(_ == 42) 結論から言うと、このような関数は常にtrueを返す。 なぜだろう?その理由をこれから説明する。 ちなみに他に以下のような意見があった: 仕様による 例外を投げるべき いずれもまぁありえなくはないが、やめておいたほうが良いと思う。もし仮にfalseを返すような仕様があった場合、それは数学から乖離しているのでいずれ仕様内部で矛盾する可能性が高いし*1、最終的に

                                        畳み込みの視点から見たforall(every)とexists(some): 空集合に対するforallは常にtrueになる - Lambdaカクテル
                                      • 私とテストと自動化と - あどけない話

                                        何度か講演でこの話をしたのだが、気が向いたのでエッセンスを書き下しておこうと思う。 テスト駆動という言葉が流行る前にプログラマとなった私は、当初どのようにテストを書いてよいのか分からなかった。そんなとき、(当時はオーム社で現在はラムダノートの)鹿野さんから「ビューティフルコード」を献本していただいた。分厚い本なので、興味ある章から読んでいった。その一つがアルベルト・サボイア氏が書いた7章「ビューティフル・テスト」だ。 ビューティフルコード (THEORY/IN/PRACTICE) 作者:Brian Kernighan,Jon Bentley,まつもとゆきひろオライリージャパンAmazon この章では、例として二分探索が取り上げられる。二分探索のアイディアが出されたのは1946年だが、バグのない実装ができたのは12年後だという。実際に実装してみると分かるが、ソートされた配列の中に目的の要素が

                                          私とテストと自動化と - あどけない話
                                        • 超関数型プログラミング

                                          この記事はFOLIO Advent Calendar 2022の23日目です。 ソフトウェア2.0 ソフトウェア2.0 という新しいプログラミングのパラダイムがあります。これは Tesla 社のAIのシニアディレクターだった Andrej Karpathy が自身のブログ記事("Software 2.0")で提唱した概念で、 ニューラルネットワーク のような最適化を伴うプログラムを例に説明されています。 従来のプログラム(Software 1.0)は人間が命令に基づいたプログラムを作成し、望ましい挙動を行わせます。それに対してニューラルネットワークのようなプログラム(Software 2.0)では人間はある程度の自由度をパラメータという形で残したプログラムを作成し、「入出力のペア」や「囲碁に勝つ」というような教師データや目的を与えてプログラムを探索させるというものです。 画像出典: "So

                                            超関数型プログラミング
                                          • 【後編】TypeScript×関数型×DDDで、ユニットテストが激減。実践の全貌とTips【Open Developers Conference 2024 レポート】 | レバテックラボ(レバテックLAB)

                                            TOPコラムテック最前線レポート【後編】TypeScript×関数型×DDDで、ユニットテストが激減。実践の全貌とTips【Open Developers Conference 2024 レポート】 【後編】TypeScript×関数型×DDDで、ユニットテストが激減。実践の全貌とTips【Open Developers Conference 2024 レポート】 2024年11月18日 株式会社一休 CTO 伊藤 直也 大学院卒業後、新卒で入社したニフティ株式会社にて、ブログサービス「ココログ」を立ち上げ。2004年、株式会社はてなに入社、CTOに就任。「はてなブックマーク」などの開発を主導。2010年以降はグリー株式会社にて、ソーシャルメディア統括部長を務める。その後フリーランスを経て、2016年4月に、技術顧問を務めていた株式会社一休に入社。執行役員CTOに就任 X GitHub 2

                                              【後編】TypeScript×関数型×DDDで、ユニットテストが激減。実践の全貌とTips【Open Developers Conference 2024 レポート】 | レバテックラボ(レバテックLAB)
                                            • 【前編】関数型×DDDの設計と実装は、どう進めるべきか。書籍「関数型ドメインモデリング」翻訳者が語る【Open Developers Conference 2024 レポート】 | レバテックラボ(レバテックLAB)

                                              TOPコラムテック最前線レポート【前編】関数型×DDDの設計と実装は、どう進めるべきか。書籍「関数型ドメインモデリング」翻訳者が語る【Open Developers Conference 2024 レポート】 【前編】関数型×DDDの設計と実装は、どう進めるべきか。書籍「関数型ドメインモデリング」翻訳者が語る【Open Developers Conference 2024 レポート】 2024年11月18日 書籍「関数型ドメインモデリング」翻訳者 猪股 健太郎 システムエンジニア、ソフトウェア開発者。BIPROGY株式会社勤務。各種業務システムに関する開発支援や開発標準策定等に従事後、数年間の米国駐在を経て帰国。近年はアジャイルソフトウェア開発を含む開発スタイル変革に携わる。『速攻入門 C#プログラミング すぐに現場で使える知識』(技術評論社、共著)、『プログラミングXamarin 上・下

                                                【前編】関数型×DDDの設計と実装は、どう進めるべきか。書籍「関数型ドメインモデリング」翻訳者が語る【Open Developers Conference 2024 レポート】 | レバテックラボ(レバテックLAB)
                                              • 関数型プログラミングの復活 - QCon Plusハイライト

                                                Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。この本では、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

                                                  関数型プログラミングの復活 - QCon Plusハイライト
                                                • Domain Modeling Made Functional を読んだ - 詩と創作・思索のひろば

                                                  最近フロントエンドに限らず TypeScript を書くことが多くなって、これでそれなりの規模のサーバサイドアプリケーションを書くときどうなるんだろう、と気になって読んでみた。いわゆる普通のオブジェクト指向ではなく関数指向な書き方でいきたいとき、どうするのが好ましいのか、というような観点。 名前的にそのものずばり、という本があったので購入した。日本のウェブを検索してみてもいくらか言及があるので価値はありそうだという判断で、大人なので円安でも強行する。 Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# (English Edition) 作者:Wlaschin, ScottPragmatic BookshelfAmazon 自分は PDF で読みたかったので

                                                    Domain Modeling Made Functional を読んだ - 詩と創作・思索のひろば
                                                  • Optics: 「パス」に型を付ければ、データ全体に型を付ける必要はない - Lambdaカクテル

                                                    あまり知られていない関数型言語のおもしろ概念として、Opticsというものがある。 Opticsとは、オブジェクト指向言語で言うところのSetter/Getterを一種の関数として捉え、いくつかの便利な特性を付与したものの総称だ。この便利な特性によって、Setter/Getter以上のことをパワフルにこなせる。 最も有名なOpticsはLensであり、色々な解説資料が(主にHaskell向けに)出ている。 blog.recruit.co.jp さて、これまでのOpticsを紹介する資料はSetterとGetterとしての側面に注目しがちだったので、じゃあOpticsの何が良いのか、Scalaでやる意義は何か、という側面をこの記事で紹介しようと思う。 Optics -- vs. copyメソッド地獄 Opticsは合成可能である Opticsはボトムアップのアプローチである Opticsがう

                                                      Optics: 「パス」に型を付ければ、データ全体に型を付ける必要はない - Lambdaカクテル
                                                    • TypeScriptで『関数型ドメインモデリング』をやってみよう - Qiita

                                                      この記事は、LIFULL Advent Calendar 2024 21日目の記事になります。 はじめに LIFULLでは、技術負債解消のためにレガシーなコンポーネントをいわゆるCleanArchitecture(以降CA)に置き換えるという取り組みをやっています。 内製ソフトウェアアーキテクチャでレガシーシステムを刷新し技術的負債を削減するまでにやったこと クリーンアーキテクチャで構築したプロダクトが2年経過してみて現状どうなっているかを紹介 新卒エンジニアがリファクタを突貫したClean Architectureプロジェクトの舞台裏 CAはいくつかのレイヤに別れていますが、LIFULLではCAのEnitityをドメイン駆動設計(DDD)で言うところのドメインモデルで実装しています。 この記事は、前に読んでいた関数型ドメインモデリングの「型によるドメインモデリング」がこの実装に応用できる

                                                      • 関数型プログラミングなんもわからん。を考えようと言うイベントを開きました。

                                                        先日Connpassにて、関数型プログラミングなんもわからん。を考えようと言うイベントを開かせていただきました。 関数型プログラミングがわからない! と言う方達の疑問に対して、普段関数型プログラミング言語を使っているわかる人たちが回答をして行くと言うスタイルのイベントでした。関数型プログラミング言語と一口に行っても、Elm, Scala, Haskell, Clojure, Elixir, F#と様々な言語があり(これは今回参加した人たちの使っている言語で、関数型プログラミング言語の一部にしか過ぎません)何が正解かなどはわからない中での意見の集約といった形のため参考程度にご覧ください。結果イベントとしては様々な視点からの意見が聞けて満足という声が多かったです。私自身知らないことがたくさん知れて勉強になり楽しかったです。 イベントの内容は、Figma上で開けるFigJamファイルとして、公開

                                                          関数型プログラミングなんもわからん。を考えようと言うイベントを開きました。
                                                        • 40歳から始める関数型言語、OCaml - すぎゃーんメモ

                                                          動機 Why OCaml 学習方法 Real World OCaml Github Copilot と ChatGPT オンラインジャッジ (競プロ) Advent of Code その次? 所感 関数型という概念 OCamlの書き味 Rust, Python の経験 AIとの親和性 まとめ 某Nさんがここ最近Haskellとか勉強してて楽しそうで真似してみたくなって、自分も今さらながら何か関数型言語はじめてみるか〜と周りに相談したところOCamlをオススメされたので 今年に入ってからひたすらOCaml書く練習してる。AtCoder Boot camp for BeginnersのEasy 100をようやく終わらせたところ。 pic.twitter.com/POBWhvHHCn— すぎゃーん💯 (@sugyan) April 9, 2023 大西さんが動画の中で感極まっていたけど、宮川さ

                                                            40歳から始める関数型言語、OCaml - すぎゃーんメモ
                                                          • 直和型の代わりにユニオン型を持つ静的型付け関数型言語 Cotton

                                                            // 割る2をする関数の引数が偶数であることを型によって強制する例(実用性はない) data O // 数字の0を表すデータ型 data S(A) forall { A } // +1を表すデータ型 // 型エイリアス type Nat = O | S[Nat] // 非効率すぎる他倍長整数 type Even = O | S[Odd] type Odd = S[Even] // 偶数を引数にとって2で割った結果を言語組込みの整数として返す関数 div2 : Even -> I64 = // 網羅性チェックつきのパターンマッチ | O => 0 | S(S(n)) => 1 + n.div2 TL;DR ユニオン型は直和型の上位互換である(追記あり)。関数型言語を作るときは直和型の代わりにユニオン型を採用するのもあり。 はじめに Cottonというプログラミング言語を2021年の夏頃から作

                                                              直和型の代わりにユニオン型を持つ静的型付け関数型言語 Cotton
                                                            • 関数型はプログラミングスタイル

                                                              「関数型プログラミングは関数型言語じゃないとできないんでしょ?」という質問をたまに受けます。答えは「いいえ」です。もちろん、言語のサポートはあれば越したことはないです。 そもそも命令型及び関数型はプログラミングスタイルです。そして、命令型と関数型の間は0/1ではなく、グラデーションがあります。 なので、関数型プログラミングは関数型言語以外でも使えますし、プログラムをよい設計へ導く考え方ですよ、というのがこの記事の主張です。コード例も交えて説明してみます。 関数型へのアプローチ ロジックを書くとき 可変の変数(var)を使わず、不変の変数(val)を使う 可変のオブジェクト(mutable)を使わず、不変のオブジェクト(immutable)を使う voidやUnitなどの戻り値のない関数は使わず、戻り値を返す(高階)関数を使う 関数を定義するとき 参照透明な関数を定義する 必ず意味のある戻り

                                                                関数型はプログラミングスタイル
                                                              • 「関数型プログラミングが『銀の弾丸』であるという非常識な常識2022」の感想 - Qiita

                                                                Ken Okabe氏による 関数型プログラミングが『銀の弾丸』であるという非常識な常識2022 https://kentutorialbook.github.io/functionalprogramming2022/ の率直な感想を書いていきます。 「【追記】」の部分はTwitterでの他の人の反応や氏のはてなブログによる反論を受けて記載したものです。 JavaScriptで演算子オーバーロードを実現しようとするのは筋が悪い 氏は二項演算子に拘っておられますが、JavaScriptにはユーザー定義可能な演算子オーバーロードはないのだから、JavaScriptに適したやり方(関数・メソッド)を使うか、演算子オーバーロードに適した言語(特にStandard ML, OCaml, Haskellなどはユーザー定義の演算子を書けます)を使うべきだと思います。 【追記】もちろんC++やRustでも演

                                                                  「関数型プログラミングが『銀の弾丸』であるという非常識な常識2022」の感想 - Qiita
                                                                • 【React】関数型プログラミングを実践する上での、条件分岐の俺的ベストプラクティス

                                                                  はじめに React書いてますか? ReactもFunctional Componentが主流になっていることにより、必然的に関数型で書き進めることになっていると思います。 そんな令和時代、毎度困る場面の一つが条件分岐。 js・tsの条件分岐といえば、if文、switch文、三項演算子など種類は様々。 どういうときにどの形式で書くのか毎度迷うし、その選定を間違えたら汚いコードになりがち。 そこで、今回は条件分岐を書き方の個人的ベストプラクティスを書いていきます! 基本方針 条件分岐の結果を何かの変数に収める これを意識するだけで割とすぐに関数型っぽくなります。可読性やテスト容易性、変更容易性なども上がります。 これの代表的な例が三項演算子だったりします。

                                                                    【React】関数型プログラミングを実践する上での、条件分岐の俺的ベストプラクティス
                                                                  • 関数型プログラミング言語における関数適用構文の歴史的経緯についてのメモ - Arantium Maestum

                                                                    先日こういうツイートがあった: Haskellとかの関数型言語を使用しているプログラマの皆様にお聞きしたいんですけど、「関数名 引数 引数 ...」みたいな関数呼び出し構文って見にくくは無いですか?「関数名(引数, 引数, ...)」に慣れたこちらからすると、丸括弧が無いからコード中のどこが関数呼び出しなのかパット見で把握しにくい。— sounisi5011/プログラム (@sounisi5011Prog) February 22, 2022 「見にくくは無いですか?」と聞かれると、個人的には「全然大丈夫です」と答えざるを得ないのだが、次のツイートに関しては考えさせられた: 数式でも函数には丸括弧を使ってるのに、どこのタイミングで丸括弧が消失したのかわからないし、その選択をした理由も思いつかない。— sounisi5011/プログラム (@sounisi5011Prog) February

                                                                      関数型プログラミング言語における関数適用構文の歴史的経緯についてのメモ - Arantium Maestum
                                                                    • 抽象度の高い関数型言語プログラミングのスキルを身につけるための書籍が発売/「OCaml」を通じて関数型プログラミングを学べる『関数型言語で学ぶプログラミングの基本』【Book Watch/ニュース】

                                                                        抽象度の高い関数型言語プログラミングのスキルを身につけるための書籍が発売/「OCaml」を通じて関数型プログラミングを学べる『関数型言語で学ぶプログラミングの基本』【Book Watch/ニュース】
                                                                      • 部分型における変性と極性 - なぜScalaの変性は+や-で指定するのか - 貳佰伍拾陸夜日記

                                                                        この記事はScala Advent Calendar 2022の19日目です. Scalaではジェネリック型の変性(variance)は+や-で指定しますが, 他の言語(たとえば, C#, Kotlin)ではoutやinだったりします. この記事では変性の意味を整理して, なぜScalaでは+/-の記号を使うのか説明します. 追記ただし, ここで説明している内容は基本的にC#やKotlinでも成立する(はずな)ので「なぜこれらの言語では+/-の記号を使わないのか」を説明するものではありません. 個人的には+/-の方がわかりやすいと思うし, out/inの記法は扱っている概念が簡単であるかのような誤解を生む(悪く言えば騙す)のでどちらかと言うと嫌いです. 発端 こういう話題がありました. Scala は共変が + で、反変が - なので理論重視? なのに対して、Kotlin と TypeSc

                                                                          部分型における変性と極性 - なぜScalaの変性は+や-で指定するのか - 貳佰伍拾陸夜日記
                                                                        • 型付けは難しい

                                                                          ベン・フィードラーのブログより。 型検査と型推論 型検査とは、あるプログラミング言語で与えられたプログラムを実行し、すべての変数や式が正しい型を持っているかどうかを調べるプロセスです。例えば、文字列は文字列に代入され、算術式は数値のみを使用するなどです。一部の言語では型推論を提供しており、コンパイラに自分で正しい型を見つけるタスクも提供します。言語の特徴に応じて、型検査と型推論の問題は、些細なものから決定不能なものまで様々です。 一般的な用語 完全性 正しく入力されたプログラムを全てチェックできれば、タイプチェッカーは完了です。 健全性 正しく型付けされたプログラムのみを受け付けるものであれば、型検査は健全です。 決定可能性 任意の入力に対して、その入力が問題を満足するかどうかを有限時間で計算できる場合、決定問題は決定可能です。決定可能な問題の例としては、素数判定や充足可能性などがあります

                                                                          • Lispとオブジェクトシステム

                                                                            Lispとオブジェクト、オブジェクト指向システムを概観します。

                                                                              Lispとオブジェクトシステム
                                                                            • Functional Programming in TypeScript

                                                                              Web apps are a mandatory part of every modern application nowadays, no matter how small or complex it is. From one-click apps that convert pictures to Photoshop, everyone wants fast and easy access to the app, and the web is one of the easiest ways to do that. At Serokell, we use TypeScript for writing web applications. But our main programming language is Haskell. And in this article, we want to

                                                                                Functional Programming in TypeScript
                                                                              • 関数の再帰的な定義に名前付けは必要か - 貳佰伍拾陸夜日記

                                                                                結論から言うと, 名前を付けることなく再帰的な関数を定義することは可能. 特定のプログラミング言語でどうかというよりは抽象概念としての関数の再帰を名前なしに実現可能かどうかという話(名前なしに実現できるプログラミング言語は存在するかという話). 発端 id:naoyaさんがこういうツイートをしていた. 再帰を書くときに何気なく関数に名前つけたり let で束縛したりしてたけど「再帰には三項関係が必要でありその実現には記号が本質的に関わる」とあり、名前づけの行為が必然だったことが分かった。プログラミングするときの視点が変わるな— naoya (@naoya_ito) 2022年8月12日 たとえば以下のように書いたときのlet fact =みたいな話. let fact = n => n <= 1 ? 1 : n * fact(n-1) ちなみに, 話は一見逸れるけど, こう書けると必然的に

                                                                                  関数の再帰的な定義に名前付けは必要か - 貳佰伍拾陸夜日記
                                                                                • GitHub - janestreet/magic-trace: magic-trace collects and displays high-resolution traces of what a process is doing

                                                                                  magic-trace collects and displays high-resolution traces of what a process is doing. People have used it to: figure out why an application running in production handles some requests slowly while simultaneously handling a sea of uninteresting requests, look at what their code is actually doing instead of what they think it's doing, get a history of what their application was doing before it crashe

                                                                                    GitHub - janestreet/magic-trace: magic-trace collects and displays high-resolution traces of what a process is doing

                                                                                  新着記事