質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.92%

Swiftと関数型プログラミングっぽい事は何となく分かる気がするけど実際の実装ではどう使えばいいんでしょうか

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,038

score 89

Swiftには関数型プログラミングの性質があるようで、そういった言語がiPhoneアプリ開発に取り入れられた事には何らかの意味があると思うので、積極的に使ってみたいと思っています。

他言語ですが、関数プログラミング実践入門という本を読んだり、すごいHaskellたのしく学ぼう!を読んでみたりして、関数が合成できる事やモナドっぽい事は何となく分かるようになったのですが、実際のアプリでどのように使えばいいかに悩んでいます。

実際に関数型っぽい事が、ネットからJSONを取ってきて、JSONパースしてTableViewに表示するようなフローなどで、どう使われているか知りたいと思っています。

例えば、既存のMVC的な事は捨てるのか、それともモデルの中で関数型っぽい事をするのかなど実際にどう使うかについて悩んでいます。

実際にSwiftの関数型プログラミングを使ったようなプログラミングコードが無いか探してみようと思ったのですが上手く検索クエリが思いつかず普通のSwiftコードばかりを見つけてしまいます。

Swiftの関数型プログラミングを実際にアプリに使う際に、どのように使っていけばいいか、どのように実装すればいいかを学ぶ良い方法はありませんか。どうか、ご教授いただけませんでしょうか。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

check解決した方法

+1

Swiftに純粋な関数型ではないというご指摘ありがとうございます。ともかく、Swiftを活用するために関数型っぽい事を取り入れていく必要があるのかなという質問でした。

最近の記事ですと、以下の様な内容が近かったかと思います。

Swiftっぽく書くということ
http://sonson.jp/blog/2015/06/30/swiftSymposium/

ご回答有難うございました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ソフトウエアの開発は、おおむね以下のような手順で行います。

[要件定義] -> [設計] -> [実装] -> [テスト] -> [導入]

そして、この中の[実装]のところで、プログラミングを行います。
つまり、[設計]段階ではプログラミングしないので、「関数型プログラミングを設計でどう使えばいいのか?」と言われても、「そもそも使いません。」という回答になります。

ちなみに、Swiftには「クロージャ」「カリー化」などがありますが、基本的に関数型言語ではありませんので、関数型プログラミングはできません。
少なくとも現在のバージョンでは。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/20 11:52

    設計ではなくて実装ですね、ご指摘ありがとうございます。

    キャンセル

0

Swiftには関数型プログラミングの性質があるようで...

Swiftにある「関数型プログラミングの性質(?)」は、具体的に言うと「クロージャ」だけです。
ちなみに、クロージャはC言語でも使えます。
だから、Swiftで関数型っぽいことをしたいなら、クロージャの使い方を勉強してください。

あと、Swiftは関数型言語ではないので、関数型プログラミングはできません。
おそらくあなたは、「関数プログラミング実践入門」や「すごいHaskellたのしく学ぼう!」を読んだけど、そこに書かれていることがSwiftで出来なかったから今回の質問をしたんじゃないんですか?
それは、単純にSwiftでは関数型プログラミングが出来ないということなのです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/20 13:02

    ご回答ありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る