为什么流行的编程语言不使用其他字符来分隔字符串?

时间:2009-06-08 15:22:04

标签: string character language-design delimiter

我所知道的每种编程语言(Perl,Javascript,PHP,Python,ASP,ActionScript,Commodore Basic)使用单引号和双引号来分隔字符串

这会产生持续的情况,即必须转到很长的来正确处理引号,因为引号在字符串的内容中非常常见。

为什么编程语言不使用某些其他字符来分隔字符串,一种在正常会话中不使用的字符 \,|或者{} 例如)所以我们可以继续我们的生活吗?

这是真的,还是我忽略了什么?是否有一种简单的方法可以停止在现代编程语言中使用字符串的引号?

print<<<< END
我知道 here document 语法,但是对于较小的字符串操作,它过于复杂并且使格式化变得复杂。
END;

[更新] 许多人都对使用ASCII字符的重要性提出了一个很好的观点。我已更新示例以反映(反斜杠管道大括号)。

14 个答案:

答案 0 :(得分:12)

Perl允许您使用whatever characters you like

 "foo $bar" eq
 qq(foo $bar) eq
 qq[foo $bar] eq
 qq!foo $bar! eq
 qq#foo $bar# etc

Meanwhile
 'foo $bar' eq
 q(foo $bar) eq
 q[foo $bar] eq
 q!foo $bar! eq
 q#foo $bar# etc

语法扩展到其他功能,包括正则表达式,如果您处理URI,这将非常方便。

 "http://www.example.com/foo/bar/baz/" =~ /\/foo/[^\/]+\/baz\//;
 "http://www.example.com/foo/bar/baz/" =~ m!/foo/[^/]+/baz/!;

答案 1 :(得分:8)

当前:“打字机”'引号'标记

使用我们目前使用的引号有很多充分的理由:

  • 在键盘上很容易找到引号 - 所以它们很容易打字,而且必须很容易,因为经常需要字符串。

  • 引用是ASCII - 大多数编程工具只能处理好ASCII。您几乎可以在任何可以想象的环境中使用ASCII。当你通过某个远程服务器上的telnet连接修复你的程序时,这很重要。

  • 引号有多个版本 - 单引号,双引号,后引号。因此,语言可以为不同的引用字符串分配不同的含义。这些不同的引号也可以解决“引号”问题中的“引号”。

  • 引用很自然 - 在编程语言出现之前很久,英语使用引号标记文本段落。在语言学中,引号的使用方式与编程语言完全相同。引用是自然的,+和 - 是添加和减法的自然方式。

替代方案:“印刷”“正确”引用

从技术上讲,他们是优越的。一个很大的优点是您可以轻松区分开始和结束报价。但它们很难打字,而且它们不是ASCII格式。 (我不得不把它们放在标题中,使它们在StackOverflow字体中可见。)

希望有一天,只有历史学家关心并且键盘已经变成完全不同的东西(如果我们甚至会有键盘),那么将会出现一种使用更好的引号的编程语言......

答案 2 :(得分:5)

Python确实有一个替代的字符串分隔符,其中包含三重双引号“”“Some String”“”。

单引号和双引号用于大多数语言,因为这是大多数书面语言的标准分隔符。

答案 3 :(得分:4)

语言(应该)尽可能简单易懂,并且使用与引号不同的东西来处理字符串会带来不必要的复杂性。

答案 4 :(得分:3)

使用引号将一组字符定义为与封闭文本分开对我们来说更自然,因此更容易阅读。此外,“和”在键盘上,而你提到的那些其他字符不是,所以它更容易输入。也许可以使用键盘上广泛使用的字符,但我想不出一个赢得的字符没有同样的问题。

E:我错过了管道角色,这实际上可能是一个可行的选择。除了它目前被广泛用作OR运算符,可读性问题仍然存在。

答案 5 :(得分:3)

因为您列出的其他字符不是ASCII。我不确定我们已经准备好了,或者需要unicode中的编程语言......

编辑:至于为什么不使用{},|或\,那些符号在大多数语言中都具有意义。想象一下C或Perl对'{'和'}'有两种不同的含义!

|意味着或者,在某些语言中已经连接了字符串。你怎么会得到\ n如果\是分隔符?

从根本上说,我真的不明白为什么这是一个问题。 “真的很难吗?”我的意思是,在C中,你经常需要使用\%,和\以及其他几个双字符字符......嗯。

答案 6 :(得分:3)

Python有一个额外的字符串类型,使用三重双引号,

"""like this"""

除此之外,Perl允许您使用任何所需的分隔符,

q^ like this ^

我认为在大多数情况下,使用常规字符串分隔符是因为它们有意义。字符串用引号括起来。除此之外,大多数开发人员习惯于使用他们的常识,因为字符串会大大改变字符串的呈现方式,这可能是一个困难的学习曲线。

答案 7 :(得分:2)

因为没有人使用其他受欢迎的角色创建语言。

我认为这很大程度上是因为改变角色的需求并不存在,大多数程序员习惯于标准引用,并没有看到改变现状的令人信服的理由。

比较以下内容。

print "This is a simple string."
print "This \"is not\" a simple string."

print ¤This is a simple string.¤
print ¤This "is not" a simple string.¤

我真的觉得第二个更容易或更易读。

答案 8 :(得分:2)

啊,所以你想要老式的FORTRAN,你可以通过计算字符串中的字符数并将其嵌入H格式来引用,例如:13HHello, World!。正如那些在语言名称全部上限的情况下用FORTRAN做了一些事情的人,引号和逃避它们是一件好事。 (例如,如果您在手动字符数中没有完全搞定,则不会完全搞砸。)

说真的,没有理想的解决方案。在某些时候,总是需要一个包含你喜欢的任何引用字符的字符串。出于实际目的,引用分隔符需要在键盘上并且易于访问,因为它们被大量使用。如果字符串包含每个可能字符的示例,则Perl的q@...@语法将失败。 FORTRAN的Hollerith常数更糟。

答案 9 :(得分:2)

你说“必须竭尽全力正确对待报价”;但它只在文本表示中。所有现代语言都将字符串视为二进制块,因此它们实际上并不关心内容。请记住,文本表示只是程序员告诉系统要做什么的一种简单方法。一旦字符串被实习,管理报价就没有任何问题。

答案 10 :(得分:2)

一个很好的理由可能是,如果这是您想要改进现有语言的唯一内容,那么您实际上并没有创建新语言。

如果您正在创建一种新语言,那么为字符串引号选择正确的字符可能是对实际实现的待办事项列表的理解方式。

答案 11 :(得分:1)

你可能最好选择一个存在于所有常用键盘和终端表示集上的分隔符,所以你建议的大多数分隔符都是正确的...

在任何情况下,引用机制仍然是必要的......你使用引用的次数会减少,这会使语言更难以让非专业人士阅读。

所以现在还不完全清楚这是一场胜利,然后就有了习惯的力量。

答案 12 :(得分:1)

Ada不对字符串使用单引号。这些仅用于字符,不必在字符串内进行转义。

我发现双引号字符出现在我输入计算机程序的普通文本字符串中非常罕见。当它这样做时,几乎总是因为我将该字符串传递给命令解释器,并且需要在其中嵌入另一个字符串。

我认为其中没有其他字符用于字符串分隔符的主要原因是它们不在原始的7位ASCII代码表中。也许现在这不是一个好借口,但是在这个大多数语言设计师都害怕克服疯狂蹩脚的C语法的世界里,你不会因为一个不寻常的字符串分隔符选择而获得很多接受者。

答案 13 :(得分:1)

Python允许您混合使用单引号和双引号将引号括在字符串中。

print "Please welcome Mr Jim 'Beaner' Wilson."
>>> Please welcome Mr Jim 'Beaner' Wilson.

print 'Please welcome Mr Jim "Beaner" Wilson.'
>>> Please welcome Mr Jim "Beaner" Wilson

您还可以使用前面提到的三重引号。它们还可以扩展到多行,以便您不必打印换行符。

print """Please welcome Mr Jim "Beaner" Wilson."""
>>> Please welcome Mr Jim "Beaner" Wilson

最后,您可以像其他人一样打印字符串。

print "Please welcome Mr Jim \"Beaner\" Wilson."
>>> Please welcome Mr Jim "Beaner" Wilson