0

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?

4

10 回答 10

7

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.

于 2009-07-15T10:22:25.960 回答
4

如果程序是为特定的已知目标受众/平台编写的,并且您确定其范围不会超出此范围,那么这并不重要。但这就是问题所在:您通常无法确定这些事情。你无法展望未来。

通常,编写可移植代码并不比编写不可移植的代码更难。因此,始终努力编写可移植的代码。

于 2009-07-15T10:26:20.460 回答
2

拥有可移植代码是一种商业机会。假设您现在只销售适用于 Windows 的软件。然后,您所在国家/地区的政府决定不向 Microsoft 支付许可费,并将所有政府机构迁移到 Linux。如果你不能快速移植你的软件,你就不能再把它卖给政府,那是一大笔钱。

于 2009-07-15T10:30:21.310 回答
2

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.

于 2009-07-15T10:24:10.230 回答
1

由于它们具有不同的含义,因此您应该使用对您正在处理的数据正确的那个。

Environment.NewLine 表示当前系统的换行符组合。

像 '\n' 或 "\r\n" 这样的字符/字符串文字表示特定的换行符组合,而与当前系统无关。

例如,如果数据是由系统中的常规文本编辑器生成的文本文件,您将使用 Environment.NewLine 来匹配换行符。如果数据是某种数据格式,其中换行符被定义为特定字符组合,无论它们在什么系统上使用,您都将使用该特定文字。

于 2009-07-15T10:58:12.330 回答
1

Environment.NewLine 效果很好,我过去用过很多次,但是,如果应用程序是 Web 应用程序,并且您在呈现的 html 中插入 Environment.NewLine,它将在浏览器窗口中不起作用,它但是会影响您的源布局。

如果我没记错的话,Environment.NewLine 还会在系统需要时添加回车,而 \n 不会。

我忘了回答可移植性方面的问题。我总是会让我的代码更便携,因为在咨询公司工作的人我不想重新开发代码,所以通过使用 Environment.NewLine(例如)我会减少代码需要做的工作量将来可以重复使用。

于 2009-07-15T10:25:51.430 回答
1

撇开可移植性不谈,不是总是使用 Environmental.NewLine (或您平台上的任何等价物),因为它更易于阅读吗?

两年后,当“随机维护程序员”出现时,谁不了解 \n Environmental.NewLine 的细微差别。NewLine 也更加防弹。

于 2009-07-15T10:28:12.657 回答
0

除非您正在从事一些小型项目,否则可移植性可能非常重要。即使您只为 Windows 编写程序,您也可能希望您的程序在未来版本的 Windows 上运行。在新版本的 Windows 中出现了很多问题,我看到的最常见的事情是复制保护,它依赖于 Windows 的某些模糊的未记录运行时内部结构的存在。同样,在类 Unix 操作系统中,您希望该程序在最新内核上运行,这就是为什么您必须避免使用系统调用之类的原因。问题是,如果您的程序对于 O/S 或体系结构非常不可移植,那么它甚至可能不会成为未来的证明。呵呵,这让我想起了 Windows 注册表/文件系统组织。

于 2009-12-24T04:54:21.157 回答
0

对于那些东西... \n,换行符是 ASCII 集中的固定字符,因此几乎可以移植到任何东西。由您来决定您发现代码跨平台可移植的重要性......要做出这个决定,请弄清楚您的代码被移植到另一个平台的可能性有多大。然后考虑一下投资将是什么让它现在可移植与以后移植它,当时机成熟时。选择最便宜或最方便的...

于 2009-07-15T10:27:58.320 回答
0

您的问题有两个方面:可移植性有多重要,以及我如何以可移植的方式表示换行符。

正如其他人在我之前所说,对可移植性的需求是一种业务需求:您自己的私有命令行工具不必是可移植的,而商业库可能更好。基于此需求,您可以选择您正在使用的平台。

您的解析器必须识别换行符。如果您使用 Pytho、C++、... 解析器将始终识别 '\n' 序列。如果您正在编写正则表达式,“$”将被识别为行尾。

如果您的代码的读者熟悉'\n',我会使用那个,因为它会作为一个字符跳出来。如果要强调“行尾”的含义,请使用象征性的东西。

于 2009-07-15T10:54:23.557 回答