我知道在C#中使用Null合并运算符的标准方法是设置默认值。 string nobody = null; string somebody = "Bob Saget"; string anybody = ""; anybody = nobody ?? "Mr. T"; // returns Mr. T anybody = somebody ?? "Mr. T"; // returns "Bob Saget" 但还有什么可以?? 用于? 它看起来不像三元运算符那样有用,除了比以下更简洁和更易读: nobody = null; anybody = nobody == null ? "Bob Saget" : nobody; // returns Bob Saget 所以,即使知道更less的空合并操作符… […]
我有一个使用枚举的类,枚举目前在它自己的文件,这似乎是浪费。 什么是关于枚举的一般意见被放在文件的命名空间,他们被消耗? 还是应该枚举真的生活在自己的CS文件? 编辑 我应该提到,虽然有问题的类使用这些枚举,但外部调用者也使用这些枚举。 换句话说,另一个类可以设置这些枚举。 所以他们不是在课堂上内部使用,否则这个问题将是一个明智之举。
我发现自己最近经常做的事情是声明与该类中的特定类相关的typedef,即 class Lorem { typedef boost::shared_ptr<Lorem> ptr; typedef std::vector<Lorem::ptr> vector; // // … // }; 这些types然后在代码中的其他地方使用: Lorem::vector lorems; Lorem::ptr lorem( new Lorem() ); lorems.push_back( lorem ); 我喜欢它的理由: 它减less了由类模板引入的噪声, std::vector<Lorem>变成了Lorem::vector等 它作为一个意图声明 – 在上面的例子中,Lorem类旨在通过boost::shared_ptr引用计数并存储在一个向量中。 它允许实现改变 – 例如,如果需要改变Lorem,以便在后期对引用计数(通过boost::intrusive_ptr )进行入侵式引用计数,那么这将对代码产生最小的影响。 我认为它看起来更漂亮,可以说比较容易阅读。 我不喜欢的原因: 如果你想在另一个类中embedded一个Lorem::vector ,但是只需要(或者想)转发declare Lorem(而不是在头文件中引入依赖),那么你最终会必须使用显式types(例如boost::shared_ptr<Lorem>而不是Lorem::ptr ),这有点不一致。 这可能不是很常见,因此难以理解? 我试着用自己的编码风格来客观,所以最好能有一些其他的意见,所以我可以稍微剖析一下我的想法。
认真。 在一台22英寸的显示器上,它只能覆盖屏幕的四分之一,我需要一些弹药来打破这个规则。 我不是说没有限制, 我只是说,80个字是非常小的。
我知道这不是最重要的问题,但我只是意识到,我可以在注释之前或之后放置javadoc注释块。 我们希望采用什么作为编码标准? /** * This is a javadoc comment before the annotation */ @Component public class MyClass { @Autowired /** * This is a javadoc comment after the annotation */ private MyOtherClass other; }
我似乎有一种奇怪的习惯,至less据我的同事说。 我们一起在一个小项目上工作。 我写这些类的方法是(简单的例子): [Serializable()] public class Foo { public Foo() { } private Bar _bar; public Bar Bar { get { if (_bar == null) _bar = new Bar(); return _bar; } set { _bar = value; } } } 所以,基本上,我只在初始化任何字段,当一个getter被调用,并且该字段仍然为空。 我想这会减less过载,不要初始化任何地方没有使用的属性。 ETA:我这样做的原因是我的类有几个属性返回另一个类的实例,反过来也有更多类的属性,等等。 调用顶级类的构造函数随后会调用所有这些类的所有构造函数,但并不总是需要。 除个人喜好外,是否有人反对这种做法? 更新:我已经考虑了许多关于这个问题的不同意见,我会支持我接受的答案。 但是,现在我对这个概念有了更好的理解,我可以决定何时何时使用它。 缺点: 线程安全问题 传递的值为空时不服从“setter”请求 微优化 exception处理应该在构造函数中进行 需要在类的代码中检查null 优点: 微优化 […]
在过去,我一直使用下划线来定义HTML中的类和id属性。 在过去的几年中,我改变了破折号,主要是为了与社会潮stream保持一致,不一定是因为这对我有意义。 我一直认为破折号有更多的缺点,我没有看到好处: 代码完成和编辑 大多数编辑器将短划线作为单词分隔符,所以我无法选中所需的符号。 说class级是“ featured-product ”,我必须自动完成“ featured ”,input连字符,并完成“ product ”。 下划线“ featured_product ”被视为一个单词,因此可以一步填充。 导航整个文档也是如此。 跳字或双击class名被连字符打破。 (更一般地说,我把class和id当作token ,所以对于我来说一个token在连字符上应该很容易被分割是没有意义的。) 含算术运算符的歧义 使用破折号破坏对象属性访问以在JavaScript中形成元素 。 这只可能与下划线: form.first_name.value='Stormageddon'; (不可否认,我自己并不是以这种方式访问表单元素,但是当把破折号与下划线作为一个普遍规则来决定时,可以考虑有人可能)。 像Sass这样的语言(特别是在整个Compass框架中)已经以破折号作为标准,甚至是variables名称。 他们原来也是在开始时使用了下划线。 事实上,这是不同的parsing让我感到奇怪: $list-item-10 $list-item – 10 不同语言的variables命名不一致 回到当天,我曾经为PHP,Ruby,HTML / CSS和JavaScript中的variables编写underscored_names 。 这是方便和一致的,但为了“适应”我现在使用: dash-case在HTML / CSS中 在JavaScript中使用camelCase 在PHP和ruby underscore_case 这并不是真的让我感到困扰,但我想知道为什么这些变得如此失调,似乎是故意的。 至less有下划线是可以保持一致的: var featured_product = $('#featured_product'); // instead of var featuredProduct […]
我已经看到了用Python编写文档的几种不同风格,是否有官方的或“同意”的风格?
对于以下代码块: For I = 0 To listOfStrings.Count – 1 If myString.Contains(lstOfStrings.Item(I)) Then Return True End If Next Return False 输出是: 情况1: myString: C:\Files\myfile.doc listOfString: C:\Files\, C:\Files2\ Result: True 案例2: myString: C:\Files3\myfile.doc listOfString: C:\Files\, C:\Files2\ Result: False 列表(listOfStrings)可能包含几个项目(最less20),它必须检查数千个string(如myString)。 有没有更好(更有效)的方式来编写这段代码?
我碰到一些包含以下内容的代码: struct ABC { unsigned long array[MAX]; } abc; 什么时候使用这样的声明是有道理的?