Ini adalah pertanyaan tentang bagaimana saya harus mengatur kode F# saya. Saya harap ini tidak melanggar aturan SO
.
Saya memiliki lusinan file sumber (nama diakhiri dengan .fs
) di proyek saya. Setiap file berisi modul. Di beberapa file/modul ini saya hanya mendefinisikan fungsi. Di tempat lain saya mendefinisikan fungsi dan nilai lain (bukan fungsi).
File terakhir di Solution Explorer
(Visual Studio
) adalah Program.fs
yang sebenarnya hanya berisi sedikit kode. Sebagian besar perhitungan telah dilakukan "di atas" itu.
Saya sedang mempertimbangkan untuk memindahkan nilai non-fungsi yang dideklarasikan di modul lain ke Program.fs
. Inilah kelebihan dan kekurangan yang saya lihat dari perubahan ini:
Keuntungan:
1) Pandangan yang lebih baik tentang alur program.
2) Lebih mudah untuk memilih semua kode di atas baris tertentu dan mengirimkannya untuk dieksekusi di FSI.
3) Sedikit lebih mudah untuk mencari nilai-nilai tersebut di editor.
4) Mungkin lebih mudah untuk melakukan debug dengan menempatkan breakpoint pada baris tempat nilai dideklarasikan.
Kekurangan:
1) Program.fs
bisa menjadi besar dan berat.
2) Hilangnya modularitas.
3) Setelah mengimplementasikan perubahan, jika perhitungan nilai y
pada modul B
bergantung pada nilai x
pada modul A
"di atasnya" maka saya tidak dapat lagi memiliki y
sebagai nilai, harus dideklarasikan sebagai fungsi dari x
. Demikian pula jika deklarasi fungsi dalam modul B
bergantung pada nilai dalam modul A
saya harus menambahkan parameter ke definisi fungsi.
Di bawah ini adalah dua contoh program kecil yang sama yang dibuat dengan dua metode alternatif. Manakah dari keduanya yang secara umum lebih baik?
// ///////////////// Values in modules \\\\\\\\\\\\\\\\\\\\
// File A.fs
module A
let i = 1
let add x y : float = x + y
// File B.fs
module B
let sqr z = z * z + float i
let x = sqr 99.9
// File Program.fs
open A
open B
let y =
add (float i) x
|> sqr
printfn "%f" y
[<EntryPoint>]
let main argv =
printfn "%A" argv
0 // return an integer exit code
// This is the calculated value for y: 99640524.640100
// ///////////////// Values in Program.fs \\\\\\\\\\\\\\\\\\\\
// File A.fs
module A
let add x y : float = x + y
// File B.fs
module B
open A
let sqr i z = z * z + float i // notice the additional parameter
//File Program.fs
open A
open B
let i = 1
let x = sqr i 99.9
let y =
add (float i) x
|> sqr i
printfn "%f" y
[<EntryPoint>]
let main argv =
printfn "%A" argv
0 // return an integer exit code
// This is the calculated value for y: 99640524.640100