I was just writing a procedure that is looking for a newline and I was contemplating using Environment.NewLine vs '\n'.
Syntactically: Is Environment.NewLine clearer than '\n'?
And how important is portability really?
I was just writing a procedure that is looking for a newline and I was contemplating using Environment.NewLine vs '\n'.
Syntactically: Is Environment.NewLine clearer than '\n'?
And how important is portability really?
Depends on how likely you are to run your program on another platform doesn't it?
Any builtin API that abstracts platform specific semantics/syntax is always better to use, as it provides portability without much complexity overhead, but with easy gains for using it.
Writing portable C on the other-hand might be more complex and require a stronger business case for the effort. When dealing with things like C#, Python, Java and others ... use the provided abstractions for those annoyances across platforms, which in many cases is what they are reduced to.
如果程序是为特定的已知目标受众/平台编写的,并且您确定其范围不会超出此范围,那么这并不重要。但这就是问题所在:您通常无法确定这些事情。你无法展望未来。
通常,编写可移植代码并不比编写不可移植的代码更难。因此,始终努力编写可移植的代码。
拥有可移植代码是一种商业机会。假设您现在只销售适用于 Windows 的软件。然后,您所在国家/地区的政府决定不向 Microsoft 支付许可费,并将所有政府机构迁移到 Linux。如果你不能快速移植你的软件,你就不能再把它卖给政府,那是一大笔钱。
I would go with Environment.NewLine. This is because, depending on the language in use, we can change its definition. If we go with '\n', each compiler/language will have its own understanding and intepretation.
So, it would be preferrable to go with Environmental.NewLine.
由于它们具有不同的含义,因此您应该使用对您正在处理的数据正确的那个。
Environment.NewLine 表示当前系统的换行符组合。
像 '\n' 或 "\r\n" 这样的字符/字符串文字表示特定的换行符组合,而与当前系统无关。
例如,如果数据是由系统中的常规文本编辑器生成的文本文件,您将使用 Environment.NewLine 来匹配换行符。如果数据是某种数据格式,其中换行符被定义为特定字符组合,无论它们在什么系统上使用,您都将使用该特定文字。
Environment.NewLine 效果很好,我过去用过很多次,但是,如果应用程序是 Web 应用程序,并且您在呈现的 html 中插入 Environment.NewLine,它将在浏览器窗口中不起作用,它但是会影响您的源布局。
如果我没记错的话,Environment.NewLine 还会在系统需要时添加回车,而 \n 不会。
我忘了回答可移植性方面的问题。我总是会让我的代码更便携,因为在咨询公司工作的人我不想重新开发代码,所以通过使用 Environment.NewLine(例如)我会减少代码需要做的工作量将来可以重复使用。
撇开可移植性不谈,不是总是使用 Environmental.NewLine (或您平台上的任何等价物),因为它更易于阅读吗?
两年后,当“随机维护程序员”出现时,谁不了解 \n Environmental.NewLine 的细微差别。NewLine 也更加防弹。
除非您正在从事一些小型项目,否则可移植性可能非常重要。即使您只为 Windows 编写程序,您也可能希望您的程序在未来版本的 Windows 上运行。在新版本的 Windows 中出现了很多问题,我看到的最常见的事情是复制保护,它依赖于 Windows 的某些模糊的未记录运行时内部结构的存在。同样,在类 Unix 操作系统中,您希望该程序在最新内核上运行,这就是为什么您必须避免使用系统调用之类的原因。问题是,如果您的程序对于 O/S 或体系结构非常不可移植,那么它甚至可能不会成为未来的证明。呵呵,这让我想起了 Windows 注册表/文件系统组织。
对于那些东西... \n,换行符是 ASCII 集中的固定字符,因此几乎可以移植到任何东西。由您来决定您发现代码跨平台可移植的重要性......要做出这个决定,请弄清楚您的代码被移植到另一个平台的可能性有多大。然后考虑一下投资将是什么让它现在可移植与以后移植它,当时机成熟时。选择最便宜或最方便的...
您的问题有两个方面:可移植性有多重要,以及我如何以可移植的方式表示换行符。
正如其他人在我之前所说,对可移植性的需求是一种业务需求:您自己的私有命令行工具不必是可移植的,而商业库可能更好。基于此需求,您可以选择您正在使用的平台。
您的解析器必须识别换行符。如果您使用 Pytho、C++、... 解析器将始终识别 '\n' 序列。如果您正在编写正则表达式,“$”将被识别为行尾。
如果您的代码的读者熟悉'\n',我会使用那个,因为它会作为一个字符跳出来。如果要强调“行尾”的含义,请使用象征性的东西。