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

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

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

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

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

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

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

  • @user-lx7dw3fs6x
    @user-lx7dw3fs6x 11 месяцев назад +3

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

  • @yamat0jp
    @yamat0jp 9 месяцев назад +3

    すごく有益でした

  • @user-xx4rv9rq4x
    @user-xx4rv9rq4x 8 месяцев назад

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

  • @otanoshimi4
    @otanoshimi4 9 месяцев назад +1

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

  • @8ight_8
    @8ight_8 10 месяцев назад

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

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

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

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

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

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

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

  • @user-nj5st3ho9t
    @user-nj5st3ho9t 2 месяца назад +1

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

  • @user-cv2nw7rs4x
    @user-cv2nw7rs4x 15 дней назад

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

    • @kaigai-engineer
      @kaigai-engineer  15 дней назад

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

    • @user-cv2nw7rs4x
      @user-cv2nw7rs4x 15 дней назад

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

  • @user-jb1kz9ov6n
    @user-jb1kz9ov6n 9 месяцев назад

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    むっずいっす

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

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

  • @user-yj6vm1fm8f
    @user-yj6vm1fm8f 8 месяцев назад

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

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

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

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

      @@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