【完全解説】関数型プログラミングは全エンジニア必修です【中級者】(再アップ)

Поделиться
HTML-код
  • Опубликовано: 1 дек 2024

Комментарии • 38

  • @ブルーブラッド-b8p
    @ブルーブラッド-b8p 6 дней назад

    素晴らしい動画です。IT系のこういう動画、最近プログラムをちょっとやってわかったかのような解説が多い中、本当に鋭いです。ちゃんと本を読み込んで正しいことを理解されていますね。
    どこかみんな自分が使っている言語が素晴らしいとか他の言語ディスったりとかするんだけど、そんなことはどうでもいい
    システム思考として、全体最適化するプログラム思想をしっかり持っている必要があり、
    様々な言語の成り立ちやなぜ、その言語を作られたか、時代背景などを知ると、
    プログラムの面白さやシステムのやりがいが見えてきますね。
    ラムダ式を学ぶことや、マイクロコンピューティング、AWSのLamdaなど上手に使えばモノリシックにならないので、バグがあっても見つけやすいし、機能変更などがあっても、コーディングしやすい。
    いろいろなメリットがありますね。
    そのうちの一部ですが、言いたいことを正しく伝えてくれている動画だと思います。素晴らしいです。
    これからもちょこちょこ拝見します。

  • @エンジニアライフ
    @エンジニアライフ Год назад +3

    めちゃくちゃわかりやすかったです!!他にも読まれた本を紹介してほしい!!!

  • @yamat0jp
    @yamat0jp Год назад +3

    すごく有益でした

  • @najahmatsuo8260
    @najahmatsuo8260 Год назад +3

    具体例をしっかりあげて説明してくれているので、個人的には、わかりやすく、ためになりました。
    こういう、技術や1つのテーマに特化した動画も、好きなので、また上がるの期待してます。

    • @kaigai-engineer
      @kaigai-engineer  Год назад +1

      ありがたいです!
      動画のターゲットがかなり絞られますが、こう言った難しめの動画もまた出して行きたいです。

  • @アイスクリーム-p6k
    @アイスクリーム-p6k 11 месяцев назад

    関数型のスタイルを1年以上前から取り入れている趣味プログラマです。
    関数型は、部分適用、カリー化、も知ると、さらに柔軟に書けるため、ワクワクできると思います。魅力が伝わると良いですね!

  • @ねこねこ-n9q
    @ねこねこ-n9q 9 дней назад

    素人質問で恐縮なのですが、要するに「コールバック関数を積極的に使った方がコードを簡略化できて計算量も減っていいよ」ということでしょうか?

  • @otanoshimi4
    @otanoshimi4 Год назад +1

    C++しか使ってないのですが、言語が違ってもアルゴリズムとかは変わる事は無いのでJAVAを超えた俯瞰的な視点で見た感想を述べますと、適切な場所に適切に使えば品質の高いコードが書けるなという印象を受けました。
    しかし、全てが関数型プログラミングで書けるわけではないので、自ら律して書く事が重要だろうなと思います。

  • @aegialina
    @aegialina Год назад +1

    関数型のF#は結構速いし、静的型付けの型安全だし、オブジェクト指向兼関数型だから両方の良いところを取り入れることができる(オブジェクト指向の手続き型部分が関数型に変わったイメージ)。関数型と静的型付けの相性は非常に良いと感じる(完全な型推論と実行速度)。Rustとか速いと聞いたが、関数型の利点を言語上に組み込んでいるのもあるのではないのかと思う。関数型はかつてないほど盛り上がっているとはいえ、今だにマイナーの地位にいるのは、コペルニクス的転回が必要で難しいからなのだろうか?

  • @8ight_8
    @8ight_8 Год назад

    実務で冗長にしか書けなかった関数がstrategyパターンでスマートになりそうで見てよかったです!
    ありがとうございます😂

  • @アイスが食べたい-f6v
    @アイスが食べたい-f6v Год назад

    javaで高階関数っぽいことができるのか。便利だな。

  • @anony3289w
    @anony3289w 5 месяцев назад

    3:39
    ここのtoList()から返ってくるものの型はListじゃないですか?

    • @kaigai-engineer
      @kaigai-engineer  5 месяцев назад +1

      その通りですね。。訂正ありがとうございます!

  • @イト-f1t
    @イト-f1t 3 месяца назад

    コンパイラが最適化してくれてるみたいな話は本当でしょうか?
    あくまで単純に関数の裏で関数オブジェクトが処理されているだけではないのですか?
    parallelでなければ、forの方が速いのでは?
    Javaは詳しくないので間違ってたらすみません

    • @kaigai-engineer
      @kaigai-engineer  3 месяца назад

      この動画の参考文献である「Javaによる関数型プログラミング ―Java 8ラムダ式とStream」によると、JavaのStream APIはCPU依存の計算を自動でMultiprocessingしてくれるので高速化してくれるとのことです。

    • @イト-f1t
      @イト-f1t 3 месяца назад

      ⁠​⁠@@kaigai-engineer
      返信ありがとうございます
      14:40 で並列処理してくれるとおっしゃっていますが、parallelとは書いてないので、その場合も適応されるのか気になります
      また、少し調べたのですが、parallelはstream apiで構築された処理オブジェクトをchunkに分け、プールされたスレッドに処理を分配する機構であって、コンパイラがしてくれるという言い方が適切かどうかに疑問があります
      返信内容を見るに参考文献には「javaのコンパイラが〜してくれる」というような記述は無さそうです?
      すみません、揚げ足取りかもしれませんね

  • @yas-156
    @yas-156 7 месяцев назад

    5:15 辺りの文脈だと「歩け」は式と言いたげですが違います。複数の文を合わせてサブルーチン化しただけです。
    「歩け」だと関節が動くなど副作用が発生し、直前の関節の角度などによって参照透過性が失われるはずだと思いますが。

    • @kaigai-engineer
      @kaigai-engineer  7 месяцев назад +1

      確かにそこまでのニュアンスまで考えられてなかったです。
      直立から歩きはじめて直立で終わると定義しても、「座標の位置が変わるから参照透明性がない」となってしまいますね。
      ご指摘ありがとうございます。

    • @yas-156
      @yas-156 7 месяцев назад

      @@kaigai-engineer 例え話は難しいですね。必ずどこかで矛盾が出てきます。
      偉そうに突っ込みましたが、私自身、圏論に取り組んでは玉砕を繰り返しています。圏論自体は難しいとは感じないのですが、なかなか関数型プログラミングと繋がらない。

  • @goldenwolf4652
    @goldenwolf4652 8 месяцев назад +1

    関数型スタイルの書き方の方が読みやすいと思ってしまった自分はロボットなのかもしれない、となった

    • @kaigai-engineer
      @kaigai-engineer  8 месяцев назад +1

      いえいえ、関数型のメリットの一つがまさに「読みやすさ」です!

  • @HappyCrazyMan
    @HappyCrazyMan Год назад

    むっずいっす

    • @kaigai-engineer
      @kaigai-engineer  Год назад +2

      RUclipsで解説となると前提知識を省略しなきゃいけないので、こういう難しいのは向いてない説ありますね。

  • @behappy510
    @behappy510 6 месяцев назад

    C言語では関数型プログラミングできなさそうなことはわかりました。

    • @kaigai-engineer
      @kaigai-engineer  5 месяцев назад +1

      最低でもJavaのstreamのような遅延評価してくれるAPIがないとできない(やるデメリットが多すぎ)ですね。。

  • @ノーム-i5h
    @ノーム-i5h Месяц назад

    覚えないと行けないの多すぎてしんどそう

    • @ノーム-i5h
      @ノーム-i5h Месяц назад

      でも並列処理がされるところは便利ーって思った

    • @ノーム-i5h
      @ノーム-i5h Месяц назад

      でもまって?それってCPU使用率めっちゃ高くならない!?

    • @ノーム-i5h
      @ノーム-i5h Месяц назад

      100万個の配列があったら全部3桁かチェックしながら
      同時に100万個全部大文字にしてるってこと???
      それってなんかヤバそう😮

    • @ノーム-i5h
      @ノーム-i5h Месяц назад

      でもどうせCPU使用率上がってもそんなにCPU使う処理ならIOとかのが時間かかるから大した問題ちゃうか
      確かに速度早い方が大切かも

  • @寺内宏之
    @寺内宏之 5 месяцев назад +1

    Reactやってると今は関数型にせざるおえないと思う。

  • @akisatoon1
    @akisatoon1 11 месяцев назад

    haskellがむずすぎてトラウマ、、

    • @kaigai-engineer
      @kaigai-engineer  11 месяцев назад

      今までやった中で一番難しい言語ですね笑

    • @kazuhisamatsumoto9383
      @kazuhisamatsumoto9383 7 месяцев назад

      @@kaigai-engineer
      興味をそそられたのでコード書いてみました。
      import Data.Char
      import Data.Maybe
      names = ["Brad", "Kate", "Kim", "Jack", "Joe"]
      mbHead :: [a] -> Maybe a
      mbHead [ ] = Nothing
      mbHead (x:_) = Just x
      fromMaybe "" $ mbHead
      . map(map toUpper)
      . filter((==3).length) $ names
      -- => "KIM"
      type Asset = (String, Int);
      assets :: [Asset]
      assets = [ ("bond" , 1000)
      , ("bond" , 2000)
      , ("stock", 3000)
      , ("stock", 4000) ]
      totalAssetsValue :: (Asset -> Bool) -> [Asset] -> Int
      totalAssetsValue f lst = sum $ map snd $ filter f lst
      totalAssetsValue ((=="bond" ).fst ) assets -- => 3000
      totalAssetsValue ((=="stock" ).fst ) assets -- => 7000
      totalAssetsValue ((> 2000 ).snd) assets -- => 7000
      totalAssetsValue ((even.(`div`1000)).snd) assets -- => 6000
      totalAssetsValue ((> "" ).fst ) assets -- => 10000

  • @visualbasicvb4388
    @visualbasicvb4388 16 дней назад

    説明が全体的にあやふやと感じました。
    最初の奇数の例ですが関数型の書き方にした場合、一目でループ変数iに関するコードが消えているのが明確ですし、
    (配列の長さや配列の範囲外アクセスの問題が消えている)コード量で言えばさほど変わってませんし、
    むしろ行数だけで言えば減ってます。パフォーマンスに関して言えば実装依存ですね。
    「回りくどい」っていうのは主観的な感覚でコードを見ているように感じます。
    後半は関数型の話じゃなくデザインパターンの話になっちゃってませんか?この動画そもそも関数型の話では?
    参考にした本では関数型を5大要素とかで説明しようとしていますが、数学的テクニックを使ってプログラムすると理解したほうがいいと思います。副作用等の話は数学の大前提として必要だからと。
    最後に、本当に関数型学びたいならjvm言語でもjavaみたいな古い仕様じゃなくてClojure,Scalaとかのほうをおすすめします。