F# の次の 2 つのステートメントの違いは何ですか? それらは互いに比較して利点または欠点がありますか (明らかな構文の違いを除く)?
WriteLine() が .NET の一部であることは理解していますが、これがどのような意味を持つのかわかりません。
サンプルコード:
printfn "This is an integer: %d" 5
System.Console.WriteLine("This is an integer: {0}" , 5)
printf
と比較した のような関数の長所と短所を次に示しますConsole.WriteLine
。
長所:
printfn
関数はタイプ セーフです。
printfn "This is an integer: %i" 5 // works
printfn "This is an integer: %i" "5" // doesn't compile
で部分的な適用を行うのは簡単ですが、過負荷の数が多すぎるためにprintfn
そうではありませんConsole.WriteLine
:
[1; 2; 3] |> List.iter (printfn "%i; ")
printfn
指定子を介して F# 型をより適切にサポートし%A
ます。
短所:
@mydogisbox が述べたようにパラメーターを再利用できないことを除けば、-like関数は(リフレクションを使用するため) よりもprintfn
はるかに遅くなります。Console.WriteLine
ログの目的で前者を使用しないでください。
スタイルとは別に、System.Console.WriteLine
パラメーターを再利用できるという利点があります。System.Console.WriteLine("This is a integer twice: {0} {0}", 5)
また、ここで述べたように、F# オブジェクトのきれいな印刷を行うことができますが、これを使用printfn
することはできません。System.Console.WriteLine
また、タプルを使用しないため、部分適用を行うことができます。
他の人が指摘したように、printfn
はリフレクションを使用するため、 よりも大幅に遅くなりますがPrintLine
、タイプセーフでもあります。