是否有在Ruby库(gem)或Ruby on Rails应用程序中定义自定义错误类型的最佳实践?特别:
不同的图书馆有不同的做事方式,我没有注意到任何真实的模式.有些库总是使用自定义错误类型,而有些库根本不使用它们; 有些错误扩展了StandardError而其他错误有嵌套层次结构; 有些只是空类定义,有些则有各种巧妙的技巧.
哦,只是因为我觉得调用这些"错误类型"有点含糊不清,我的意思是:
class AuthenticationError < StandardError; end
class InvalidUsername < AuthenticationError; end
Run Code Online (Sandbox Code Playgroud) 如果你不得不循环7次循环,你会使用:
for (int i = 0; i < 7; i++)
Run Code Online (Sandbox Code Playgroud)
要么:
for (int i = 0; i <= 6; i++)
Run Code Online (Sandbox Code Playgroud)
有两个注意事项:
为了性能,我假设Java或C#.使用"小于"或"小于或等于"是否重要?如果您对其他语言有所了解,请说明哪些语言.
为了便于阅读,我假设基于0的数组.
UPD:我提到的基于0的数组可能会让人感到困惑.我不是在讨论迭代数组元素.只是一个循环.
关于使用常数可以解释这个神奇数字是什么,下面有一个好点.所以,如果我有" int NUMBER_OF_THINGS = 7"然后" i <= NUMBER_OF_THINGS - 1"看起来很奇怪,不会.
PEP 8说:
- 导入总是放在文件的顶部,就在任何模块注释和文档字符串之后,以及模块全局变量和常量之前.
在发生时,我违反了PEP 8.有时我会在函数中导入内容.作为一般规则,如果导入仅在单个函数中使用,则执行此操作.
任何意见?
编辑(我觉得导入函数的原因可能是一个好主意):
主要原因:它可以使代码更清晰.
from m import xxx.看到m.xxx这个功能可能会告诉我更多.具体取决于m:它是一个众所周知的顶级模块/包(import m)吗?或者它是一个子模块/包(from a.b.c import m)?我一直在阅读关于Swift中的Optionals,我已经看过if let用于检查Optional是否包含值的示例,以及它是否存在 - 使用unwrapped值执行某些操作.
但是,我已经看到在Swift 2.0中,关键字guard主要用于.我想知道是否if let已从Swift 2.0中删除或是否仍然可以使用它.
我应该改变我的计划包含if let到guard?
由于std::list和std::vector存在,是有什么原因在C++中使用传统的C数组,还是应该尽量避免,只是喜欢malloc?
大多数博客或教程或书籍都在任何类/模块的底部都有私有方法.这是最好的做法吗?
我发现有必要使用私人方法更方便.例如:
public
def my_method
# do something
minion_method
end
private
def minion_method
# do something
end
public
def next_method
end
Run Code Online (Sandbox Code Playgroud)
这样我发现代码更具可读性,而不是连续上下滚动,这是非常恼人的.
这种方法有什么可怕的错误吗?在底层有私人方法不仅仅是最佳实践和其他东西吗?
我在哪里可以找到学习Ant路径样式约定的资源?我已经去了Ant站点,但找不到路径样式的任何信息.
在Cocoa中,何时应该使用NSAssert,NSException,NSError?
这就是我一直在想的:
NSAssert - 在创建任何用于程序员自身利益的客户端程序时,可以仔细检查规则,约定,假设或前置条件和后置条件?
NSException - 为了使用该库的其他程序员的利益创建第三方库,以便他们立即知道输入何时无效?
NSError - 当与外部系统连接以获取不保证给我结果的文件,数据库或Web服务等数据时?
我正在阅读McConell的Code Complete,他讨论了使用布尔变量来记录代码.例如,而不是:
if((elementIndex < 0) || (MAX_ELEMENTS < elementIndex) ||
(elementIndex == lastElementIndex)){
...
}
Run Code Online (Sandbox Code Playgroud)
他建议:
finished = ((elementIndex < 0) || (MAX_ELEMENTS < elementIndex));
repeatedEntry = (elementIndex == lastElementIndex);
if(finished || repeatedEntry){
...
}
Run Code Online (Sandbox Code Playgroud)
这让我感到逻辑,良好的实践和非常自我记录.但是,我对于经常使用这种技术犹豫不决,因为我几乎从未遇到过这种技术; 也许只是因为稀有而令人困惑.然而,我的经验还不是很大,所以我有兴趣听听程序员对这种技术的看法,我很想知道是否有人经常使用这种技术或者在阅读代码时经常看到它.这是一个值得采用的约定/风格/技术吗?其他程序员会理解并欣赏它,还是认为它很奇怪?
NetBeans 7.4 beta目前可供公众下载,默认情况下它引入了一个奇怪的警告规则:
方法长度为16行(允许10行)
我的问题是:这是一个公认的代码约定规则,可以在某个地方证明某种程度吗?NetBeans支持/开发人员说它不是一个bug,但是不要说明为什么它们只允许10行,以及这个规则究竟来自何处.
conventions ×10
ruby ×2
ant ×1
arrays ×1
boolean ×1
c++ ×1
cocoa ×1
coding-style ×1
control-flow ×1
java ×1
methods ×1
netbeans ×1
objective-c ×1
optional ×1
path ×1
performance ×1
python ×1
readability ×1
swift ×1
swift2 ×1