我有一些函数偶尔(并不总是)会收到回调并运行它.检查回调是否定义/功能是一种好的风格还是有更好的方法?
例:
function save (callback){
.....do stuff......
if(typeof callback !== 'undefined'){
callback();
};
};
Run Code Online (Sandbox Code Playgroud) 我经常在XML和HTML标记的结尾斜杠之前看到一个空格.XHTML换行符可能是规范的例子:
<br />
Run Code Online (Sandbox Code Playgroud)
代替:
<br/>
Run Code Online (Sandbox Code Playgroud)
这个空间似乎是多余的.事实上,我认为这是多余的.
写这个空间的原因是什么?
我已经读到这个空间解决了一些"向后兼容性问题".哪些向后兼容性问题?这些问题是否仍然相关,或者我们是否仍然为IE3兼容性添加额外的空间?是否存在一些关于此的确定答案的规范?
如果不是向后兼容性,那么它是否是可读性问题?类似于Great Open Curly Brace辩论?
void it_goes_up_here() {
int no_you_fool_it_goes_down_there()
{
Run Code Online (Sandbox Code Playgroud)
我当然可以尊重不同的风格意见,所以我很高兴得知,写作空间只是一种品味问题.
我最近注意到的一个短语是"无点"风格的概念......
然后,我在这里发现他们提到"另一个可能值得讨论的话题是作者不喜欢点自由风格."
什么是"免费"风格?有人可以给出简明的解释吗?它与"自动"曲线有关吗?
为了了解我的水平 - 我一直在教自己Scheme,并编写了一个简单的Scheme解释器...我理解"隐含"currying是什么,但我不知道任何Haskell或ML.
我倾向于在我的C++代码中添加许多断言,以便在不影响发布版本性能的情况下简化调试.现在,assert是一个纯C宏设计,没有考虑到C++机制.
另一方面std::logic_error,C++定义了在程序逻辑中存在错误(因此名称)的情况下抛出的内容.抛出一个实例可能只是一个完美的,更多的C++替代品assert.
问题是,assert并且abort两者都立即终止程序而不调用析构函数,因此跳过清理,而手动抛出异常会增加不必要的运行时成本.解决这个问题的一种方法是创建一个自己的断言宏SAFE_ASSERT,它就像C对应物一样工作,但在失败时抛出异常.
我可以想到关于这个问题的三种看法:
#define在C++中使用s同样糟糕.NDEBUG这种情况在发布版本中永远不会发生.捕获是不必要的,并公开内部代码的实现细节main().这个问题有明确的答案吗?有专业的参考吗?
编辑:跳过析构函数当然没有未定义的行为.
使用Eclipse和java,我有点被宠坏了.我开始使用vim在linux环境中进行C编码,有没有办法让vim自动为块做适当的间距?
因此在输入{下一行后将有2个空格缩进,并且该行的返回将使它保持相同的缩进,并且}将向后移动2个空格?
我已经看到了一些关于这个习语的提及(包括SO):
// Deliberately empty subscriber
public event EventHandler AskQuestion = delegate {};
Run Code Online (Sandbox Code Playgroud)
好处很明显 - 它避免了在提升事件之前检查null的必要性.
但是,我很想知道是否有任何缺点. 例如,它是否被广泛使用并且足够透明以至于不会引起维护问题?空事件用户呼叫是否有明显的性能影响?
代码中标题的问题:
@Transactional (readonly = true)
public interface FooService {
void doSmth ();
}
public class FooServiceImpl implements FooService {
...
}
Run Code Online (Sandbox Code Playgroud)
VS
public interface FooService {
void doSmth ();
}
@Transactional (readonly = true)
public class FooServiceImpl implements FooService {
...
}
Run Code Online (Sandbox Code Playgroud)