F# で文字列を作成するには、少なくとも 3 つの方法があります。
- 古き良き連結 (途中で .ToString(someFormat) を使用)
- .NET のメソッド String.Format を使用する
- sprintf 関数の使用
F# ではどれに固執する必要がありますか?
F# で文字列を作成するには、少なくとも 3 つの方法があります。
F# ではどれに固執する必要がありますか?
一般に、タイプ セーフな F# コードでは、printf
ベースの関数 ( ,sprintf
などbprintf
) を使用する必要があります。コンパイラは、コンパイル時に書式文字列をチェックし、正しい引数の型を渡していることを確認します。
ただし、これには欠点が 1 つあります。F# 2.0 および 3.0 では、 にprintf
基づく関数は非常に低速です (StackOverflow または Google を検索すると、それに関する質問やブログ投稿が見つかります)。ときどき使用する場合は、アプリケーションの全体的なパフォーマンスに影響を与えませんが、頻繁に呼び出すと、アプリケーションの速度が低下することに気付くでしょう。ありがたいことに、これは今後の F# 3.1 リリースで修正されています。
他のオプションについては、可能な限り文字列の連結を避ける必要があります。これは比較的遅く、余分なメモリ/GC オーバーヘッドが発生するためです。パフォーマンスが重要なロギングを実装していて、F# 3.1 が待ちきれない場合は、String.Format が最善の策です。ベースの関数によって提供される型安全性を模倣するにはprintf
、String.Format への各呼び出しを別の関数に移動し、型注釈を使用してパラメーターの型を明示的に指定します。例えば:
/// Prints the number of entries in a specified file to the console.
let inline printNumEntriesInFile (filename : string) (count : int) =
System.String.Format ("The file '{0}' contains {1} entries.", filename, count)