改行を探すプロシージャを書いていて、Environment.NewLineと'\n'の使用を検討していました。
構文的に:Environment.NewLineは'\ n'よりも明確ですか?
そして、移植性は本当にどれほど重要ですか?
改行を探すプロシージャを書いていて、Environment.NewLineと'\n'の使用を検討していました。
構文的に:Environment.NewLineは'\ n'よりも明確ですか?
そして、移植性は本当にどれほど重要ですか?
別のプラットフォームでプログラムを実行する可能性に依存しますか?
プラットフォーム固有のセマンティクス/構文を抽象化する組み込みAPIは、複雑なオーバーヘッドなしで移植性を提供しますが、簡単に使用できるため、常に使用する方が適切です。
一方、ポータブルCを作成することはより複雑であり、その取り組みにはより強力なビジネスケースが必要になる可能性があります。C#、Python、Javaなどを扱う場合は、プラットフォーム間でこれらの煩わしさに対して提供されている抽象化を使用します。これは、多くの場合、それらが削減されるものです。
プログラムが特定の既知のターゲットオーディエンス/プラットフォーム向けに作成されていて、その範囲がそれを超えないことが確実であるかどうかは、それほど重要ではありません。しかし、そこに問題があります。多くの場合、これらのことについて確信が持てません。未来を見ることはできません。
多くの場合、移植可能なコードを書くことは、移植不可能な代替コードを書くことよりも難しくありません。したがって、常に移植可能なコードを書くように努めてください。
私はEnvironment.NewLineを使用します。これは、使用する言語に応じて、その定義を変更できるためです。'\ n'を使用すると、各コンパイラ/言語には独自の理解と解釈があります。
したがって、Environmental.NewLineを使用することをお勧めします。
ポータブルコードを持つことは一種のビジネスチャンスです。現在、Windows用のソフトウェアのみを販売しているとします。次に、あなたの国の政府は、Microsoftにライセンス料を支払いたくないと判断し、すべての政府機関をLinuxに移行します。ソフトウェアをすぐに移植できない場合、それを政府に販売することはできなくなり、それは大きなお金になります。
Environment.NewLineはうまく機能し、過去によく使用しましたが、アプリがWebアプリであり、レンダリングされたhtmlにEnvironment.NewLineを挿入した場合、ブラウザーウィンドウには効果がありません。ただし、ソースレイアウトに影響します。
私が正しく覚えていれば、Environment.NewLineは、システムが期待する場合、キャリッジリターンも追加します。\nはそうではありません。
移植性の面に答えるのを忘れました。コンサルタント会社で働いている人がEnvironment.NewLineを使用してコードを再開発する必要がないので、私は常にコードをより移植性の高いものにします。将来的に再利用されます。
移植性はさておき、Environmental.NewLine(またはプラットフォーム上にある同等のもの)は、人間が読める形式であるため、常に使用できるとは限りません。
2年後、環境のニュアンスを理解していない「ランダムメンテナンスプログラマー」が登場します。\nEnvironmental.NewLineもより強力な証拠です。
意味が異なるため、処理するデータに適したものを使用する必要があります。
Environment.NewLineは、現在のシステムの改行の組み合わせを意味します。
'\n'や"\r \ n"のような文字/文字列リテラルは、現在のシステムに関係なく、特定の改行の組み合わせを意味します。
たとえば、データがシステム内の通常のテキストエディタによって生成されたテキストファイルである場合は、Environment.NewLineを使用して改行を照合します。データが、使用されているシステムに関係なく、改行が特定の文字の組み合わせとして定義されているデータ形式である場合は、その特定のリテラルを使用します。
小さなプロジェクトに取り組んでいない限り、移植性はおそらく非常に重要です。Windows専用のプログラムを実行する場合でも、プログラムを将来のバージョンのWindowsで実行することをお勧めします。新しいバージョンのWindowsで壊れるものはかなりたくさんあります。私が目にする最も一般的なものは、コピー防止です。これは、Windowsの特定のあいまいな文書化されていないランタイム内部構造が存在することに依存します。同様に、UnixライクなO / Sでは、そのプログラムを最新のカーネルで動作させたいので、システムコールなどの使用を避ける必要があります。重要なのは、プログラムがO / Sまたはアーキテクチャに対して非常に移植性がない場合、将来を保証することすらできない可能性が高いということです。ええと、これは私にWindowsレジストリ/ファイルシステムの編成を思い出させます。
そのために...\n、改行文字はASCIIセットの固定文字であるため、ほとんどすべてのものに移植できます。コードがプラットフォーム間で移植可能であることがどれほど重要であるかを決定するのはあなた次第です...この決定を行うには、コードが別のプラットフォームに移植される可能性を把握してください。次に、今すぐ移植できるようにするための投資と、後で移植する場合の投資を考えてみてください。最も安い、または最も便利なものを選択してください...
あなたの質問には2つの側面があります。移植性がどれほど重要であるか、そしてどのように改行を移植可能な方法で表現するかです。
他の人が私の前に言ったように、移植性の必要性はビジネス要件です:あなた自身のプライベートコマンドラインツールは移植可能である必要はありませんが、商用ライブラリはより良いかもしれません。このニーズに基づいて、作業しているプラットフォームを選択できます。
改行文字は、パーサーによって認識される必要があります。Pytho、C ++、...で作業している場合、パーサーは常に'\n'シーケンスを認識します。正規表現を記述している場合、「$」は行末として認識されます。
あなたのコードの聴衆が'\n'に精通しているなら、それはキャラクターとして飛び出すので、私はそれを使うでしょう。「行末」の意味を強調したい場合は、象徴的なものを使用してください。