funkcje prywatne a funkcje zagnieżdżone

pytanie brzmi:

kiedy używać funkcji prywatnych i kiedy używać funkcji zagnieżdżonych? (pytam oFA# ale może odpowiedzi mogą być istotne w innych językach funkcjonalnych)

mały przykład

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

wielką zaletą jest to, że zagnieżdżona funkcja może wykorzystywać dane z wyższego zakresu. również nie zanieczyszcza otaczającego modułu. ale wygląda niezgrabnie, prawda? zwłaszcza, gdy istnieją duże funkcje zagnieżdżone

po przeciwnej stronie funkcje prywatne mogą być upublicznione i przetestowane. i wydaje się, że wyglądają bardziej czytelnie

Jakie jest Twoje zdanie?

questionAnswers(2)

yourAnswerToTheQuestion