Questions tagged «syntax»

语法是指一组规则,这些规则定义了如何用语言编写结构正确的程序。它显然不处理程序的含义或解释。

7
为什么分号和逗号在for循环中互换?
在许多语言中(从C到JavaScript的广泛列表): 逗号,分隔参数(例如func(a, b, c)),而 分号;分隔顺序指令(例如instruction1; instruction2; instruction3)。 那么,为什么要使用相同的for循环语言来反转此映射: for ( init1, init2; condition; inc1, inc2 ) { instruction1; instruction2; } 而不是(对我来说似乎更自然) for ( init1; init2, condition, inc1; inc2 ) { instruction1; instruction2; } ? 当然,for(通常)不是一个函数,但是参数(即init,condition,increment)的行为更像指令序列的函数的参数。 是由于历史原因/惯例造成的,还是in ,和;in循环互换的合理依据?

9
“语法”和“语法糖”有什么区别
背景 语法糖上的Wikipedia页面指出: 在计算机科学中,语法糖是编程语言中的语法,旨在使事物更易于阅读或表达。它使人类可以使用这种语言“变甜”:可以更清楚,更简洁地表达事物,或者以某些人可能喜欢的替代方式表达事物。 我不太了解语法糖和语法之间的区别。 我赞赏含糖版本可以更清晰,更简洁,甚至可以简化一些观点。但是我觉得在某种程度上,所有语法实际上都是这样做的,以形成对代码进行编译的抽象。 在同一Wikipedia页面上: 语言处理器(包括编译器,静态分析器等)通常在处理之前将加糖的结构扩展为更基本的结构,此过程有时称为“反加糖”。 作为思想练习,如果我在此语句中将“经常”表示为“始终”:如果区别仅在于编译器在进入下一阶段之前是否“降低语法”,那么不了解内部条件的编码器又将如何?的编译器知道(或关心)什么是Sugar'd语法? 该网站上一个非常相关的问题“语法糖的严格定义?” 有一个开始的答案: 恕我直言,我认为您无法对语法糖进行定义,因为该短语是BS,很可能被那些在“真实操作系统”上使用“真实工具”谈论“真实程序员”的人使用。 哪个可能向我表明,使用该语言的编码人员也许并没有太大的区别?也许差异仅是编译器编写者可以感知的?尽管在某些情况下使用该语言来了解语法糖背后的含义对编码人员有帮助。(但实际上,有关该主题的任何论述都倾向于使用“火焰诱饵”这个词?) 问题的核心 所以...问题的简短版本: 语法和语法糖之间有真正的区别吗? 对谁重要? 思考的额外食物 关于主题矛盾的奖励: 在Wikipedia页面上给出了一个示例: 例如,在C语言中,a[i]表示法是*(a + i) 而上述链接问题的另一个答案是关于同一示例的: 现在考虑a[i] == *(a + i)。考虑任何以任何实质性方式使用数组的C程序。 并总结为: 该[]符号有助于这种抽象。这不是语法糖。 同一示例的相反结论!


4
为什么C#开发人员用换行符括起来?[关闭]
在过去的几年中,我大部分时间主要用于C#和SQL。在那段时间里,与我合作的每个程序员都习惯将函数或控制流语句的左括号放在新的一行上。所以... public void MyFunction(string myArgument) { //do stuff } if(myBoolean == true) { //do something } else { //do something else } 我一直对这是多么浪费空间感到震惊,尤其是在if / else语句中。而且我知道在C#的更高版本中存在替代方法,例如: if(myBoolean == true) //do something on one line of code 但是几乎没有人使用过它们。每个人都在做换行符。 缺席很久之后,我又重新开始使用JavaScript。在我的记忆中,JavaScript开发人员曾经做过完全相同的curl-brace-newline事情,但是对于所有花哨的新库和新东西,大多数开发人员都在声明后加上了大括号: function MyJavaScriptFunction() { //do something } 您可以从中看到这种感觉,因为自从使用闭包和函数指针在JavaScript中变得很流行以来,它就节省了大量空间并提高了可读性。所以我想知道为什么它在C#中没有被视为完成的事情。实际上,如果您在Visual Studio 2013中尝试上述构造,它实际上会为您重新格式化,将开括号放在新的一行上! 现在,我在Code Review SE上看到了这个问题:https : …
44 java  c#  javascript  syntax 

18
语法在编程语言中真的重要吗?[关闭]
我的一位教授说“语法是一种编程语言的用户界面”,像Ruby这样的语言具有很好的可读性,并且还在不断增长,但是我们看到很多程序员都能用C \ C ++高效工作,因此程序员确实对语法很重要应该可以接受吗? 我很想知道您对此的看法。 免责声明:我不是要吵架。我认为这是一个很好的讨论话题。 更新:原来这是一个很好的话题。我很高兴你们都参与其中。

12
为什么大多数编程语言都具有用于声明函数的特殊关键字或语法?[关闭]
大多数编程语言(动态和静态类型的语言)都具有特殊的关键字和/或语法,这些关键字和/或语法与用于函数声明的变量大不相同。我认为函数就像声明另一个命名实体一样: 例如在Python中: x = 2 y = addOne(x) def addOne(number): return number + 1 为什么不: x = 2 y = addOne(x) addOne = (number) => return number + 1 同样,使用Java之类的语言: int x = 2; int y = addOne(x); int addOne(int x) { return x + 1; } 为什么不: int x …

6
为什么不在语法级别测试语言是受支持的功能?
您可以找到无穷无尽的博客,文章和网站列表,这些列表可以宣传对单元代码进行单元测试的好处。几乎可以保证,为Java,C ++,C#和其他类型的语言编写编译器的开发人员使用单元测试来验证其工作。 那么,为什么在这些语言的语法中,尽管它很流行,却为什么缺少测试呢? 微软在C#中引入了LINQ,那么为什么他们也不能添加测试呢? 我并不是要预测这些语言的变化,而是要阐明为什么它们一开始就没有。 例如:我们知道您可以编写一个for没有该语句语法的循环for。您可以使用while或if/ goto语句。有人认为for声明更有效,并将其引入语言。 为什么测试没有遵循编程语言的相同演变?

7
为什么大多数主流语言不支持“ x <y <z”语法进行三路布尔比较?
如果我想比较两个数字(或其他排序良好的实体),则可以使用x &lt; y。如果我想比较其中的三个,那位高中代数的学生会建议尝试x &lt; y &lt; z。然后,我中的程序员将回答“不,那是无效的,您必须这样做x &lt; y &amp;&amp; y &lt; z”。 我遇到的大多数语言似乎都不支持这种语法,考虑到它在数学中的普遍性,这很奇怪。Python是一个明显的例外。JavaScript 看起来像是一个异常,但实际上,它只是运算符优先级和隐式转换的不幸产物。在node.js中,1 &lt; 3 &lt; 2评估为true,因为它确实是(1 &lt; 3) &lt; 2 === true &lt; 2 === 1 &lt; 2。 所以,我的问题是这样的:为什么x &lt; y &lt; z具有预期语义的编程语言不常见?



9
'<'与'!='作为'for'循环中的条件?
假设您有以下for循环*: for (int i = 0; i &lt; 10; ++i) { // ... } 通常也可以写成: for (int i = 0; i != 10; ++i) { // ... } 最终结果是相同的,因此是否有真正的论据来使用一个?我个人使用前者,以防万一i由于某种原因而陷入混乱,并跳过了值10。 *对不起幻数的用法,但这只是一个例子。
31 syntax 

16
我正在写有关语言语法的文章。在方法名称中是否存在将参数置于其中的语言?
在JavaScript中: function getTopCustomersOfTheYear(howManyCustomers, whichYear) { // Some code here. } getTopCustomersOfTheYear(50, 2010); 在C#中: public List&lt;Customer&gt; GetTopCustomersOfTheYear(int howManyCustomers, int whichYear) { // Some code here } List&lt;Customer&gt; customers = GetTopCustomersOfTheYear(50, 2010); 在PHP中: public function getTopCustomersOfTheYear($howManyCustomers, $whichYear) { // Some code here } $customers = getTopCustomersOfTheYear(50, 2010); 是否有任何语言支持以下语法: function GetTop(x)CustomersOfTheYear(y) { // …

10
为什么大多数编程语言都没有“!>”(不大于)和“!<”(不小于)运算符?
我想知道是否有任何原因-或者仅仅是历史的偶然- 大多数编程语言中都没有!&gt;和!&lt;运算符? a &gt;= b (大于或等于b)可以写成!(a &lt; b) (a不小于b)等于a !&lt; b。 当我编码自己的表达式树生成器时,这个问题使我震惊。大多数编程语言都有的a != b运算符!(a=b),那么为什么不!&gt;加!&lt;? 更新: !&lt;(不少于)比(大于或等于)更容易发音&gt;= !&lt;(不少于)的类型比&gt;=(大于或等于)的类型短 !&lt;(不少于)比(大于或等于)更容易理解*&gt;= *因为OR是二进制运算符,所以您的大脑需要操作两个操作数(grater,等于),而因为NOT是一元运算符,并且您的大脑仅需要操作一个操作数(较小)。

22
为什么VB如此受欢迎?[关闭]
对我来说,Visual Basic看起来笨拙,丑陋,容易出错并且难以阅读。我让别人解释 原因。尽管就功能而言,VB.net显然是该语言的巨大飞跃,但我仍然不明白为什么有人会选择使用VB而不是C#进行编码。 但是,我仍然看到(似乎是)“ MS商店”中的绝大多数商业Web应用程序都是在VB中构建的。我可以对此进行纠正,但是VB似乎仍然比应有的受欢迎。 任何人都可以帮助回答以下任何(或全部)问题: 我在VB中缺少什么吗?它比C#更容易学习还是“更友好”?有我不知道的功能吗? 为什么今天这么频繁使用VB / VB.net,尤其是在Web项目中?

13
为什么编程语言不能自动管理同步/异步问题?
我没有找到很多有关此的资源:我想知道是否有可能/以同步方式编写异步代码的好主意。 例如,下面是一些JavaScript代码,该代码检索数据库中存储的用户数(异步操作): getNbOfUsers(function (nbOfUsers) { console.log(nbOfUsers) }); 能写这样的东西会很好: const nbOfUsers = getNbOfUsers(); console.log(getNbOfUsers); 因此,编译器将自动处理等待响应的内容,然后执行 console.log。在必须将结果用于其他任何地方之前,它将始终等待异步操作完成。我们将减少回调承诺,异步/等待或其他方法的使用,并且不必担心操作结果是否立即可用。 nbOfUsers使用try / catch或类似Swift中的可选参数仍然可以管理错误(得到整数还是错误?)语言。 可能吗?这可能是一个可怕的主意/乌托邦……我不知道。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.