Questions tagged «syntax»

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

20
“ break”和“ continue”是否是不好的编程习惯?
我的老板一直提满不在乎地那么糟糕的程序员使用break,并continue在循环中。 我一直在使用它们,因为它们很有意义。让我向您展示灵感: function verify(object) { if (object->value < 0) return false; if (object->value > object->max_value) return false; if (object->name == "") return false; ... } 这里的要点是,首先该功能检查条件是否正确,然后执行实际功能。IMO同样适用于循环: while (primary_condition) { if (loop_count > 1000) break; if (time_exect > 3600) break; if (this->data == "undefined") continue; if (this->skip == true) continue; ... …

15
为什么像Java,Javascript和C#这样的内存管理语言保留了“ new”关键字?
newJava,Javascript和C#等语言中的关键字会创建类的新实例。 该语法似乎是从C ++继承的,在C ++中该语法new专门用于在堆上分配类的新实例,并返回指向该新实例的指针。在C ++中,这不是构造对象的唯一方法。您还可以在不使用new-的情况下在堆栈上构造一个对象,实际上,这种构造对象的方式在C ++中更为常见。 因此,来自C ++背景,newJava,Javascript和C#等语言中的关键字对我来说似乎很自然并且很明显。然后,我开始学习没有new关键字的Python 。在Python中,只需调用构造函数即可构造实例,例如: f = Foo() 最初,这对我来说似乎有点不对劲,直到我想到Python没有理由拥有它new,因为所有内容都是一个对象,因此无需区分各种构造函数语法。 但是后来我想new-Java 的真正意义是什么?我们为什么要说Object o = new Object();?为什么不只是Object o = Object();呢?在C ++中,绝对需要new,因为我们需要区分在堆上分配和在堆上分配之间的区别,但是在Java中,所有对象都在堆上构造,那么为什么还要使用new关键字呢?对于Javascript,可能会问同样的问题。在我不太熟悉的C#中,我认为new在区分对象类型和值类型方面可能有一些用途,但是我不确定。 无论如何,在我看来,C ++之后的许多语言只是“继承”了new关键字-并不需要它。它几乎像一个残余关键字。我们似乎出于任何原因都不需要它,但是它在那里。 问题:我对此是否正确?还是有一些令人信服的理由new需要以C ++启发的内存管理语言(例如Java,Javascript和C#)而不是Python?

1
为什么下划线没有减价?[关闭]
我想知道为什么下划线没有markdown语法?我知道可以嵌入基本的html标签来实现这一点,但是我试图理解为什么underline在存在粗体和斜体时为什么会省略
133 syntax  editor 


3
为什么编程语言(尤其是C)使用大括号而不是方括号?
实际上,“ C样式语言”的定义可以简化为“使用花括号({})”。我们为什么要使用该特定字符(为什么不使用更合理的字符(如[],至少在美国键盘上不需要Shift键)? 这些花括号会给程序员的生产力带来实际的好处,还是新的语言设计师应该寻找替代品(例如,Python背后的人)? Wikipedia告诉我们C 使用大括号,但不是为什么。Wikipedia上有关基于C的编程语言列表的一篇文章表明,此语法元素有些特殊: 广义上讲,C系列语言是使用类似C的块语法的语言(包括大括号来开始和结束块)。


8
C#中“ yield”关键字的实际使用
经过将近4年的经验,我还没有看到使用yield关键字的代码。有人可以告诉我该关键字的实际用法(以及解释)吗?如果可以,是否还有其他方法可以更轻松地实现它的功能?
76 c#  syntax 

5
为什么要将函数存储在python字典中?
我是python的初学者,我刚刚学习了一种涉及字典和函数的技术。语法很简单,看似微不足道,但是我的python感觉有点刺痛。有人告诉我这是一个深层的,非常Python化的概念,我不太了解它的重要性。有人可以给这项技术起个名字,并解释它为何/为什么有用吗? 该技术是当您拥有python字典和打算在其上使用的函数时。您在dict中插入一个额外的元素,其值是函数的名称。当您准备调用该函数时,可以通过引用dict元素而不是按名称引用该函数来间接发出该调用。 我正在使用的示例来自第2版的《学习Python的艰难方法》。(这是您通过Udemy.com注册时可用的版本;可惜的是,实时免费HTML版本当前是Ed 3,并且不再包含此示例)。 释义: # make a dictionary of US states and major cities cities = {'San Diego':'CA', 'New York':'NY', 'Detroit':'MI'} # define a function to use on such a dictionary def find_city (map, city): # does something, returns some value if city in map: return map[city] else: return …

10
当与“ if”和“ while”一起使用时,为什么语言需要在表达式周围加上括号?
如C,Java中,和C ++语言在使用时都需要围绕整个表达式括号if,while或switch。 if (true) { // Do something } 相对于 if true { // Do something } 我觉得这很奇怪,因为括号是多余的。在此示例中,true是一个单独的表达式。括号不会以我所知的任何方式改变其含义。为什么存在这种奇怪的语法?为什么如此常见?我不知道有什么好处吗?

6
为什么在SQL查询中的“从”之前选择“选择”?[关闭]
这件事让我在学校很困扰。 五年前,当我学习SQL时,我总是想知道为什么我们首先指定想要的字段,然后再指定它们的来源。 根据我的想法,我们应该写: From Employee e Select e.Name 那么,为什么规范说以下内容? Select e.Name -- Eeeeek, what does e mean? From Employee e -- Ok, now I know what e is 我花了数周的时间来理解SQL,而且我知道很多时间都花在了错误的元素顺序上。 就像用C#编写: string name = employee.Name; var employee = this.GetEmployee(); 因此,我认为它具有历史原因。为什么?
67 sql  history  syntax 

10
语法设计-为什么在不传递任何参数的情况下使用括号?
在许多语言中,语法function_name(arg1, arg2, ...)用于调用函数。当我们想不带任何参数地调用函数时,我们必须这样做function_name()。 我感到奇怪的是,编译器或脚本解释器需要()成功将其检测为函数调用。如果已知一个变量是可调用的,那为什么还function_name;不够? 另一方面,在某些语言中,我们可以执行以下操作:function_name 'test';甚至function_name 'first' 'second';可以调用函数或命令。 我认为如果只需要用括号声明优先顺序,括号会更好,而在其他地方则是可选的。例如,doing if expression == true function_name;应该和一样有效if (expression == true) function_name();。 我认为最烦人的事情是'SOME_STRING'.toLowerCase()原型函数显然不需要参数时。设计师为什么决定反对更简单的选择'SOME_STRING'.lower? 免责声明:不要误会我的意思,我喜欢类似C的语法!;)我只是在问是否会更好。需求是否()具有任何性能优势,还是使理解代码更容易?我真的很好奇原因到底是什么。

5
显式或隐式实现接口有什么区别?
在Visual Studio中,我可以右键单击一个接口,然后选择“实现接口”或“明确实现接口”。 public class Test : ITest { public string Id // Generated by Implement Interface { get { throw new NotImplementedException(); } } string ITest.Id // Generated by Implement Interface Explicitly { get { throw new NotImplementedException(); } } } 我看到的两者之间的唯一区别是,如果选择显式实现接口,则在创建接口属性和方法时会将接口名称添加到接口属性和方法中。 我发现它使代码更具可读性,因为我可以看到该方法/属性的来源,但是这对使用或编译该类的方式有什么不同吗?我隐式或显式实现接口真的重要吗?
64 c#  syntax 

2
为什么按位运算符的优先级比比较低?
有人可以解释其原理,为什么在一堆最流行的语言中(请参见下面的注释),比较运算符(==,!=,<,>,<=,> =)的优先级要高于按位运算符(&,|,^ ,〜)? 我认为我从未遇到过这种优先次序自然的用途。总是这样的: if( (x & MASK) == CORRECT ) ... // Chosen bits are in correct setting, rest unimportant if( (x ^ x_prev) == SET ) // only, and exactly SET bit changed if( (x & REQUIRED) < REQUIRED ) // Not all conditions satisfied 我要使用的情况: flags = …


3
在Java 8中使用方法引用语法而不是lambda语法是否会对性能产生好处?
方法引用是否跳过了lambda包装器的开销?他们将来可能吗? 根据有关方法参考的Java教程: 有时... lambda表达式除了调用现有方法外什么也不做。在这种情况下,通常更容易按名称引用现有方法。方法引用使您可以执行此操作;它们是紧凑的,易于阅读的lambda表达式,用于已经具有名称的方法。 由于以下几个原因,我更喜欢lambda语法而不是方法引用语法: Lambda更清晰 尽管有Oracle的主张,但我发现lambda语法比对象方法引用的简写形式更易于阅读,因为方法引用的语法是模棱两可的: Bar::foo 您是否在x的类上调用静态的一参数方法并将其传递给x? x -> Bar.foo(x) 还是在x上调用零参数实例方法? x -> x.foo() 方法参考语法可以代表任何一种。它隐藏了您的代码实际在做什么。 Lambda更安全 如果将Bar :: foo引用为类方法,并且Bar以后添加了同名的实例方法(反之亦然),则代码将不再编译。 您可以始终使用lambda 您可以将任何函数包装在lambda中-因此您可以在所有位置一致地使用相同的语法。方法引用语法不适用于采用或返回原始数组,引发已检查异常或具有与实例和静态方法相同的方法名称的方法(因为该方法引用语法对于调用哪种方法尚不明确) 。当您使用相同数量的参数重载方法时,它们不起作用,但是无论如何您都不应这样做(请参见Josh Bloch的第41项),因此我们不能将其与方法引用相对应。 结论 如果这样做不影响性能,我很想在我的IDE中关闭警告,并始终使用lambda语法,而不会将偶然的方法引用散布到我的代码中。 聚苯乙烯 无论在这里还是那里,但在我的梦中,对象方法引用看起来都更像这样,并且无需lambda包装器就直接在对象上对方法应用invoke-dynamic: _.foo()

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.