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?