рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕реЛрдЪред рднрд╛рдЧ 9

рдпрд╣ рдПрдл # рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд╛рдЧ 9 рд╣реИ! рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдмреЗрд░рд╛ рдкрд░ рдРрд╕реЗ рдмрд╣реБрдд рд▓рдВрдмреЗ рдЪрдХреНрд░ рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рд░реБрдХрдиреЗ рд╡рд╛рд▓реЗ рдирд╣реАрдВ рд╣реИрдВред рдЖрдЬ рд╣рдо рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕, рдореЙрдбреНрдпреВрд▓, рдиреЗрдорд╕реНрдкреЗрд╕, рдФрд░ рдорд┐рдХреНрд╕рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред






рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП?


рдПрдл # рдореЗрдВ рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:


  • рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░, рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ "рдореЙрдбреНрдпреВрд▓" рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • рдпрд╛ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рджреЛ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╢реЗрд╖ рдЕрдЧрд▓реЗ рдореЗрдВред


рдиреЗрд╕реНрдЯреЗрдб рдХрд╛рд░реНрдп


F # рдореЗрдВ, рдЖрдк рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ рдФрд░ рдмрд╛рд╣рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ addThreeNumbers рдореЗрдВ addThreeNumbers :


 let addThreeNumbers xyz = //     let add n = fun x -> x + n //    x |> add y |> add z addThreeNumbers 2 3 4 

рдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рд╕реАрдзреЗ рдореВрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИрдВред
рддреЛ, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, printError рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди printError рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рд╕реАрдзреЗ n рдФрд░ max рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред


 let validateSize max n = //       let printError() = printfn "Oops: '%i' is bigger than max: '%i'" n max //    if n > max then printError() validateSize 10 9 validateSize 10 11 

рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдиреЗрд╕реНрдЯреЗрдб рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдРрд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 let sumNumbersUpTo max = //      let rec recursiveSum n sumSoFar = match n with | 0 -> sumSoFar | _ -> recursiveSum (n-1) (n+sumSoFar) //       recursiveSum max 0 sumNumbersUpTo 10 

рдЧрд╣рд░реА рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдЪрд░ рдХреЗ рд▓рд┐рдП рд╕реАрдзреА рдкрд╣реБрдВрдЪ (рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ) рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВред
рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдиреЗрд╕реНрдЯреЗрдб рдЕрдирд┐рд╡рд╛рд░реНрдп рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╣реИред


рдХреИрд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 // wtf,    ? let fx = let f2 y = let f3 z = x * z let f4 z = let f5 z = y * z let f6 () = y * x f6() f4 y x * f2 x 

рдореЙрдбреНрдпреВрд▓


рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред


рдПрдХ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ module рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдлрд┐рд░ module рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рдж = рдЪрд┐рдиреНрд╣ рдЖрддрд╛ рд╣реИред
рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдВ рднреАред


рджреЛ рдХрд╛рд░реНрдпреЛрдВ рд╡рд╛рд▓реЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛:


 module MathStuff = let add xy = x + y let subtract xy = x - y 

рдпрджрд┐ рдЖрдк Visual Studio рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЖрдк add рдУрд╡рд░ рдХрд░рддреЗ add рддреЛ рдЖрдк рдкреВрд░рд╛ рдирд╛рдо add рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ MathStuff.add , рдЬреИрд╕реЗ рдХрд┐ MastStuff рдПрдХ рдХреНрд▓рд╛рд╕ рдерд╛, рдФрд░ add рдПрдХ рддрд░реАрдХрд╛ рдерд╛ред


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИред рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ, рдПрдл # рд╕рдВрдХрд▓рдХ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реИред C # рд╕рдорддреБрд▓реНрдп рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:


 static class MathStuff { static public int add(int x, int y) { return x + y; } static public int subtract(int x, int y) { return x - y; } } 

рдпрд╣ рдкрд╣рдЪрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╣реИрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд┐рд░ рд╣реИрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ F # рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рдХреА рдЕрдЪреНрдЫреА рд╕рдордЭ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдереИрддрд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдирд┐рдпрдо рдореЙрдбреНрдпреВрд▓ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред


рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ C # рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдлрдВрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, F # рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдлрдВрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ


рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЗрд╕рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 module MathStuff = let add xy = x + y let subtract xy = x - y module OtherStuff = //     MathStuff let add1 x = MathStuff.add x 1 

рдЖрдк open рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЖрдк рдкреВрд░реНрдг рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 module OtherStuff = open MathStuff //      let add1 x = add x 1 

рдирд╛рдореЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдирд┐рдпрдо рдХрд╛рдлреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИрдВред рдЖрдк рд╣рдореЗрд╢рд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╛рдкреЗрдХреНрд╖ рдпрд╛ рдЕрдзреВрд░реЗ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓


рд╕реНрдерд┐рд░ рд╡рд░реНрдЧреЛрдВ рдХреА рддрд░рд╣, рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:


 module MathStuff = let add xy = x + y let subtract xy = x - y //   module FloatLib = let add xy :float = x + y let subtract xy :float = x - y 

рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдЙрдкрдпреБрдХреНрдд рдпрд╛ рдкреВрд░реНрдг рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 module OtherStuff = open MathStuff let add1 x = add x 1 //   let add1Float x = MathStuff.FloatLib.add x 1.0 //   let sub1Float x = FloatLib.subtract x 1.0 

рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдореЙрдбреНрдпреВрд▓


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЪреВрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдиреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдКрдкрд░ рдЬрд╛рдХрд░, рдЖрдк рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдХреБрдЫ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИред


рд╢реАрд░реНрд╖-рд╕реНрддрд░ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрди рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬреЛ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдП рдЧрдП рдереЗред


  • module MyModuleName рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╣рд▓реА рдШреЛрд╖рдгрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
  • рдЪрд┐рдиреНрд╣ = рдЧрд╛рдпрдм
  • рдореЙрдбреНрдпреВрд▓ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрдВрдбреЗрдВрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд░реЛрдд .FS рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ "рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп" рдШреЛрд╖рдгрд╛ рдореМрдЬреВрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рдЕрдкрд╡рд╛рдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдХреЛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


.FSX рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдШреЛрд╖рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдмрди рдЬрд╛рддрд╛ рд╣реИред


рдПрдХ "рд╢реАрд░реНрд╖ рдореЙрдбреНрдпреВрд▓" рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд MathStuff рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 //    module MathStuff let add xy = x + y let subtract xy = x - y //   module FloatLib = let add xy :float = x + y let subtract xy :float = x - y 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп" рдХреЛрдб ( module MathStuff ) рдореЗрдВ рдХреЛрдИ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдирд╣реАрдВ рд╣реИ, рдЬрдмрдХрд┐ рдиреЗрд╕реНрдЯреЗрдб FloatLib рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрднреА рднреА рдЗрдВрдбреЗрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред


рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕рд╛рдордЧреНрд░реА


рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЕрдиреНрдп рдШреЛрд╖рдгрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдПрдВ, рд╕рд░рд▓ рдореВрд▓реНрдп, рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдереИрддрд┐рдХ рдирд┐рд░реНрдорд╛рдг)


 module MathStuff = //  let add xy = x + y let subtract xy = x - y //   type Complex = {r:float; i:float} type IntegerFunction = int -> int -> int type DegreesOrRadians = Deg | Rad // "" let PI = 3.141 // "" let mutable TrigType = Deg //  /   do printfn "module initialized" 

рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рддреНрд░ рдХреЛ рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рддрд╛рдХрд┐ рдХреЛрдб "рддрд╛рдЬрд╝рд╛" рдмрдирд╛ рд░рд╣реЗ рдФрд░ рдкрд┐рдЫрд▓реЗ рдЧрдгрдирд╛рдУрдВ рд╕реЗ рд╕рдВрдХреНрд░рдорд┐рдд рди рд╣реЛред


рдХрдВрд╕реАрд▓рд░реЗрд╢рди (рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ, рд╢реИрдбреЛрдЗрдВрдЧ)


рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╣рдорд╛рд░рд╛ рдирдореВрдирд╛ рдореЙрдбреНрдпреВрд▓ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ MathStuff рдореЗрдВ add рдлрдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде- рд╕рд╛рде FloatLib ред


 module MathStuff = let add xy = x + y let subtract xy = x - y //   module FloatLib = let add xy :float = x + y let subtract xy :float = x - y 

рдпрджрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдФрд░ рдХреЙрд▓ add рдореЗрдВ рджреЛрдиреЛрдВ рдореЙрдбреНрдпреВрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


 open MathStuff open MathStuff.FloatLib let result = add 1 2 // Compiler error: This expression was expected to // have type float but here has type int 

рдФрд░ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ MathStuff.FloatLib рдореЙрдбреНрдпреВрд▓ рдиреЗ рдореВрд▓ MathStuff рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ FloatLib рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз (рдЫрд┐рдкрд╛ рд╣реБрдЖ) рдерд╛ред


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ FS0001 рд╕рдВрдХрд▓рдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ 1 рдХреЛ рдлреНрд▓реЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 1 рд╕реЗ 1.0 рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдирджреЗрдЦреА рд╣реИред рдХрднреА-рдХрднреА рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рджрд┐рд▓рдЪрд╕реНрдк рдЪрд╛рд▓реЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рдЧрднрдЧ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреА рддрд░рд╣, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрддреНрдпрдВрдд рд╕рд╛рдорд╛рдиреНрдп map рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред


рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ RequireQualifiedAccess рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд░реЛрдХрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдореЗрдВ рджреЛрдиреЛрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╕рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 [<RequireQualifiedAccess>] module MathStuff = let add xy = x + y let subtract xy = x - y //   [<RequireQualifiedAccess>] module FloatLib = let add xy :float = x + y let subtract xy :float = x - y 

рдЕрдм open рдирд┐рд░реНрджреЗрд╢ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ:


 open MathStuff //  open MathStuff.FloatLib //  

рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдлрд╝рдВрдХреНрд╢рди (рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдкреВрд░реНрдг рдирд╛рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 let result = MathStuff.add 1 2 let result = MathStuff.FloatLib.add 1.0 2.0 

рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг


рдПрдл # public , private рдФрд░ internal рдЬреИрд╕реЗ рдорд╛рдирдХ .NET рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред MSDN рдЖрд▓реЗрдЦ рдореЗрдВ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред


  • рдпреЗ рдПрдХреНрд╕реЗрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдиреНрд╕ ("рд▓реЗрдЯ рдмрд╛рдЙрдВрдб") рдЯреЙрдк-рд▓реЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕, рд╡реИрд▓реНрдпреВрдЬрд╝, рдЯрд╛рдЗрдкреНрд╕ рдФрд░ рдЕрдиреНрдп рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рдЬреА рдиреЗрд╕реНрдЯреЗрдб рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред
  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдм рдХреБрдЫ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрд╣реБрдВрдЪ (рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ private рдпрд╛ internal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпреЗ рдПрдХреНрд╕реЗрд╕ рд╕реНрдкреЗрд╕рд┐рдпрд░ рдПрдл # рдореЗрдВ рджреГрд╢реНрдпрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╕реА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИред рд╡реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрдВрднреАрд░ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкрд░ рдпреЛрдЬрдирд╛рдмрджреНрдз рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреАред


рдирд╛рдорд╕реНрдерд╛рди


F # рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди C # рд╕реЗ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред


namespace рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдПрдХ рдирд╛рдорд╕реНрдерд╛рди:


 namespace Utilities module MathStuff = //  let add xy = x + y let subtract xy = x - y 

рдЗрд╕ рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рдХрд╛рд░рдг, MathStuff рдореЙрдбреНрдпреВрд▓ MathStuff рдкреВрд░рд╛ рдирд╛рдо Utilities.MathStuff рдмрди рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреВрд░рд╛ рдирд╛рдо add рд▓рд┐рдП Utilities.MathStuff.add ред


рд╕рдорд╛рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдирд┐рдпрдо рдПрдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЗ рднреАрддрд░ рдореЙрдбреНрдпреВрд▓ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдереЗред


рдЖрдк рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдореЗрдВ рдПрдХ рдЕрд╡рдзрд┐ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 module Utilities.MathStuff //  let add xy = x + y let subtract xy = x - y 

MathStuff рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рдЕрднреА рднреА Utilities.MathStuff рд╣реИред MathStuff , рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдПрдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдореЙрдбреНрдпреВрд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:


  • рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реНрдерд╛рди рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВред C # рдХреЗ рд╡рд┐рдкрд░реАрдд, F # рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд┐рдирд╛ рдирд╛рдо рдХреЗ рдЯреЙрдк-рд▓реЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдЧреНрд▓реЛрдмрд▓ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдирд╛рдорд╕реНрдерд╛рди рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
  • рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рд╕реАрдзреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛рдПрдБ рдирд╣реАрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдореВрд▓реНрдп рдШреЛрд╖рдгрд╛рдПрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
  • рдЕрдВрдд рдореЗрдВ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдирд╛рдорд╕реНрдерд╛рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдШреЛрд╖рдгрд╛рдПрдБ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ namespace Utilities , рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред

рдирд╛рдорд╕реНрдерд╛рди рдкрджрд╛рдиреБрдХреНрд░рдо


рдЖрдк рдмрд╕ рдирд╛рдо рдХреЛ рдбреЙрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдХреЗ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 namespace Core.Utilities module MathStuff = let add xy = x + y 

рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЛ рдирд╛рдорд╕реНрдерд╛рди рднреА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЙрдирдХреЗ рдкреВрд░реНрдг рдирд╛рдо рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рд╡реЗ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред


 namespace Core.Utilities module MathStuff = let add xy = x + y namespace Core.Extra module MoreMathStuff = let add xy = x + y 

рдирд╛рдо рд╕реНрдерд╛рди рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рдПрдХ рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред


 namespace Core.Utilities module MathStuff = let add xy = x + y namespace Core //    - Core.Utilities //     ! module Utilities = let add xy = x + y 

рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░


рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ, рдореЙрдбреНрдпреВрд▓ рдЖрдорддреМрд░ рдкрд░ рдХрдИ рдЕрдВрддрд░рдирд┐рд░реНрднрд░ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдирддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред


OOP рдореЗрдВ, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░ рдЙрдирдХреЗ рдКрдкрд░ рдХреЗ рдХрд╛рд░реНрдп рдПрдХ рд╡рд░реНрдЧ рдХреЗ рднреАрддрд░ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдл # рдореЗрдВ, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдФрд░ рдЙрдирдХреЗ рдКрдкрд░ рдХреЗ рдХрд╛рд░реНрдп рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдВрдпреБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВред


рдкреНрд░рдХрд╛рд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рджреЛ рдкреИрдЯрд░реНрди рд╣реИрдВ:


  • рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓ (рд▓реЗрдХрд┐рди рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ) рдХреЗ рдмрд╛рд╣рд░ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред


 //    namespace Example //      type PersonType = {First:string; Last:string} //    ,     module Person = //  let create first last = {First=first; Last=last} // ,     let fullName {First=first; Last=last} = first + " " + last let person = Person.create "john" "doe" Person.fullName person |> printfn "Fullname=%s" 

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рдХрд╛рд░ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдПрдХ рд╕рд░рд▓ рдирд╛рдо рд╣реИ рдЬреИрд╕реЗ " T " рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдоред рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд╣реБрдБрдЪ рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: MyModule.Func рдФрд░ MyModule.Func2 , рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╣реБрдБрдЪ: MyModule.T :


 module Customer = // Customer.T -      type T = {AccountId:int; Name:string} //  let create id name = {T.AccountId=id; T.Name=name} // ,     let isValid {T.AccountId=id; } = id > 0 let customer = Customer.create 42 "bob" Customer.isValid customer |> printfn "Is valid?=%b" 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рд░рдЪрдирд╛рдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкреНрд░рдХрд╛рд░ (рдлрд╝реИрдХреНрдЯрд░реА) рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдлрд┐рд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдореЗрдВ, рдЖрдкрдХреЛ рд╢рд╛рдпрдж рд╣реА рдЯрд╛рдЗрдк рдирд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЯрд╛рдЗрдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред


рддреЛ рдХреМрди рд╕рд╛ рд░рд╛рд╕реНрддрд╛ рдЪреБрдирдирд╛ рд╣реИ?


  • рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрд▓рд╛рд╕рд┐рдХ .NET рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк F # рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдПрдХ рдЕрд▓рдЧ рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред
  • рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдХреНрд▓рд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдУрдУрдкреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред

рдЕрдкрдиреЗ рд▓рд┐рдП, рдЖрдк рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯреАрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╢реИрд▓реА рдХреЛ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ред


рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓


рдпрджрд┐ рдХрдИ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реЗрд╢рд╛рди рди рдХрд░реЗрдВред рдЖрдк рдиреЗрд╕реНрдЯреЗрдб рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рд╕реАрдзреЗ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ:


 //    module Example //     type PersonType = {First:string; Last:string} //    ,  ... 

рдФрд░ рдпрд╣рд╛рдБ рднреА рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИред module рд╢рдмреНрдж рдмрд╕ namespace рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


 //    namespace Example //     type PersonType = {First:string; Last:string} 

рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, PersonType рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рдПрдХ рд╣реА рд╣реЛрдЧрд╛ред


рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдлрдВрдХреНрд╢рдВрд╕ рдХреЛ рд╣рдореЗрд╢рд╛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди


F # рдХреЗ рд▓рд┐рдП рдХрдИ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ C # рдпрд╛ Java рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдВрдХ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк F # рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ:



F # рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рднреА рд╡рд░реНрдгрд┐рдд рд╣реИрдВред


рдЕрдВрдд рдореЗрдВ, рдПрдл # рд╕рдореБрджрд╛рдп рдмрд╣реБрдд рд╢реБрд░реБрдЖрддреА рдЕрдиреБрдХреВрд▓ рд╣реИред рд╕реНрд▓реИрдХ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рдЪреИрдЯ рд╣реИ, рдПрдл # рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдлрд╛рдЙрдВрдбреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд╢реБрд░реБрдЖрддреА рдХрдорд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред рд╣рдо рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ!


рд░реВрд╕реА рднрд╛рд╖реА рд╕рдореБрджрд╛рдп F # рдХреА рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рдирд╛ рди рднреВрд▓реЗрдВ! рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрдирд╕реЗ рдЪреИрдЯ рд░реВрдо рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА:



рдЕрдиреБрд╡рд╛рдж рд▓реЗрдЦрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


@Kleidemos рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╡рд╛рджрд┐рдд
рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕рдВрдкрд╛рджрдХреАрдп рдкрд░рд┐рд╡рд░реНрддрди рдПрдл # рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрд╕реА рднрд╛рд╖реА рд╕рдореБрджрд╛рдп рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдереЗред рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @schvepsss рдФрд░ @shwars рдХреЛ рднреА рдзрдиреНрдпрд╡рд╛рдж рджреЗрддреЗ рд╣реИрдВ ред

Source: https://habr.com/ru/post/hi433406/


All Articles