7

質問は:

いつプライベート関数を使用し、いつネストされた関数を使用するのですか? (私はF#について尋ねていますが、おそらく答えは他の関数型言語に関連している可能性があります)

小さな例

namespace SomeName

module BinaryReaderExt =
    open System.IO

    let seek (reader : BinaryReader) positions =
        reader.BaseStream.Seek(positions, SeekOrigin.Current) |> ignore

module Mod =
    open System.IO

    let private prFun reader:BinaryReader =
        //do something
        BinaryReaderExt.seek reader 10L


    let outerFun (stream :System.IO.Stream) =
        let reader = new System.IO.BinaryReader(stream)
        let seek = BinaryReaderExt.seek reader

        let nestedFun () =
            seek 10L
            //do something

        nestedFun()
        prFun reader

ネストされた関数がより高いスコープのデータを使用できることは大きなボーナスです。また、周囲のモジュールを汚染しません。でも不器用ですね。特に大きなネストされた関数がある場合

反対に、プライベート関数を公開してテストできます。そして、それらはより読みやすいように見えます

あなたの意見は何ですか?

4

2 に答える 2