如果在所选的IDE中启用"查看右边距",则可能默认为80个字符.我倾向于将它改为120,除了它是几年前我公司的标准,没有其他公司告诉我做不同的事情.
我的问题是,是否有任何研究实际上显示80个字符是代码可读性的最佳最大宽度,或者这个值只是"它一直是这样的方式"而没有人真正知道为什么会这样?并且,一行代码的宽度是否应该是编码标准的一部分?
我有一个关于习语和可读性的问题,似乎有一个针对这个特殊情况的Python哲学冲突:
我想从字典B中构建字典A.如果B中不存在特定的键,则不执行任何操作并继续.
哪种方式更好?
try:
A["blah"] = B["blah"]
except KeyError:
pass
Run Code Online (Sandbox Code Playgroud)
要么
if "blah" in B:
A["blah"] = B["blah"]
Run Code Online (Sandbox Code Playgroud)
"做并请求原谅"与"简单和明确".
哪个更好?为什么?
我一直想知道在最佳实践中是否允许不使用该containsKey()方法java.util.Map,而是对结果进行空检查get().
我的理由是,对值进行两次查找似乎是多余的 - 首先是for containsKey(),然后是for get().
另一方面,可能是大多数标准实现的Map高速缓存是最后一次查找,或者编译器可以以其他方式取消冗余,并且为了代码的可读性,优选维护该containsKey()部分.
我非常感谢你的评论.
我有一个列表理解,近似于:
[f(x) for x in l if f(x)]
Run Code Online (Sandbox Code Playgroud)
其中l是列表,f(x)是返回列表的昂贵函数.
我想避免对f(x)的每次非空出现进行两次f(x)求值.有没有办法在列表理解中保存其输出?
我可以删除最终条件,生成整个列表然后修剪它,但这似乎是浪费.
我刚刚尝试用Pylint lint一些代码,最后剩下的错误是
R0902: too-many-instance-attributes (8/7)
Run Code Online (Sandbox Code Playgroud)
我理解限制实例属性数量的基本原理,但有七个看起来有点低.我也意识到短号不应该有最后一个字.但是,我想知道我应该做什么,而不是:
def __init__(self, output_file=None, output_dir=None):
"""
Set the frobnicator up, along with default geometries
"""
self.margin = 30
self.pos = [0, 0]
self.sep = [5, 5]
self.cell = [20, 20]
self.frobbr = library.Frobbr()
page = self.frobbr.get_settings('page')
self.lim = [page.get_width() - self.margin,
page.get_height() - self.margin]
self.filename = output_file
self.moddir = output_dir
Run Code Online (Sandbox Code Playgroud)
我应该将几何包装到一个字典中,做一些其他的事情来阻止Pylint抱怨,或者只是忽略它(我真的不想这样做)?
python instance-variables pylint code-readability code-structure
我是JavaScript的新手.我理解这个语言的许多概念,我一直在阅读原型继承模型,而且我正在用越来越多的交互式前端东西吹口哨.这是一种有趣的语言,但我总是被回调意大利面关闭,这是很多非平凡互动模型的典型特征.
对我来说一直以来都很奇怪的是,尽管可读性噩梦是JavaScript嵌套回调的嵌套,但在很多示例和教程中我很少看到的一件事是使用预定义的命名函数作为回调参数.白天我是一名Java程序员,并且放弃了关于企业名称的陈规定型单元代码单元我喜欢用一种具有强大功能的IDE选择的语言来享受的是使用有意义的,如果长,名称可以使代码的意图和含义更加清晰,而不会使实际生产变得更加困难.那么为什么不在编写JavaScript代码时使用相同的方法呢?
考虑到这一点,我可以提出支持和反对这一观点的论据,但我对该语言的天真和新颖性使我无法得出任何结论,为什么这在技术层面上是好的.
有这么多现代浏览器显示出比以前更快地执行JavaScript代码的能力,我没有看到使用匿名回调可能获得的任何微不足道的性能获得是必要的.看来,如果您处于使用命名函数是可行的情况(可预测的行为和执行路径),那么就没有理由不这样做.
那么有什么技术原因或陷阱我不知道这使得这种做法如此普遍吗?
javascript coding-style callback anonymous-function code-readability
在您忽略/投票关闭此问题之前,我认为这是一个有效的问题,因为代码清晰度是讨论的一个重要主题,编写可维护代码至关重要,我非常感谢那些之前遇到过这些问题的人的答案. .
我最近遇到了这个问题,由于嵌套量很大,LINQ查询可能会非常快速.
下面是我提出的格式差异的一些示例(对于相同的相对非复杂的查询)
没有格式化
var allInventory = system.InventorySources.Select(src => new { Inventory = src.Value.GetInventory(product.OriginalProductId, true), Region = src.Value.Region }).GroupBy(i => i.Region, i => i.Inventory);
Run Code Online (Sandbox Code Playgroud)
提升格式
var allInventory = system.InventorySources
.Select(src =>
new {
Inventory = src.Value.GetInventory(product.OriginalProductId, true),
Region = src.Value.Region })
.GroupBy(
i => i.Region,
i => i.Inventory);
Run Code Online (Sandbox Code Playgroud)
块格式
var allInventory = system.InventorySources
.Select(
src => new
{
Inventory = src.Value.GetInventory(product.OriginalProductId, true),
Region = src.Value.Region
})
.GroupBy(
i => i.Region,
i => i.Inventory
);
Run Code Online (Sandbox Code Playgroud)
列表格式 …
如果在条件下缩进很长时间,你通常会做这样的事情(实际上,PyDev会这样缩进):
if (collResv.repeatability is None or
collResv.somethingElse):
collResv.rejected = True
collResv.rejectCompletely()
Run Code Online (Sandbox Code Playgroud)
但是,这会将if语句启动的块放在与if条件的最后一部分相同的缩进级别上,这使得它在我看来非常难看/难以阅读,因为您没有立即看到块的开始位置.
我想到的其他一些风格:
if (collResv.repeatability is None or
collResv.somethingElse):
collResv.rejected = True
collResv.rejectCompletely()
Run Code Online (Sandbox Code Playgroud)
这看起来非常不一致,因为第二行缩进比第一行缩进得多,但它是可读的.
if (collResv.repeatability is None or
collResv.somethingElse):
collResv.rejected = True
collResv.rejectCompletely()
Run Code Online (Sandbox Code Playgroud)
这也比第一个例子更具可读性,但缩进不再是4的倍数,而且它看起来不对,因为第二行的缩进比第一行中条件的开头少.
所以,我的主要问题是:对于那些不需要过长行(即单行条件)的情况,是否有建议的缩进样式?如果没有,你更喜欢这样的情况?
最终,代码将(最终)编译成CPU的指令.然而,代码(以我的拙见)是为了让人类阅读,更新和互动.这引出了以下观察:
其他工程师无法读取的代码,即使它的功能正常,也是错误的代码.
考虑到这一点,这个程序员可以做些什么来使人们更容易阅读代码?
命名约定?(乔尔有相当多的说法)
代码结构/布局?(请为了上帝的爱,不要进入{安置辩论)
分句?(是否可以编写看起来更像英语的代码)
我想知道在类中声明模板功能是否有任何优势.
我试图清楚地了解这两种语法的优缺点.
这是一个例子:
不合时宜:
template<typename T>
struct MyType {
template<typename... Args>
void test(Args...) const;
};
template<typename T>
template<typename... Args>
void MyType<T>::test(Args... args) const {
// do things
}
Run Code Online (Sandbox Code Playgroud)
同班同学:
template<typename T>
struct MyType {
template<typename... Args>
void test(Args... args) const {
// do things
}
};
Run Code Online (Sandbox Code Playgroud)
是否有第一版或第二版更容易使用的语言功能?使用默认模板参数或enable_if时,第一个版本是否会妨碍?我想看看这两个案例如何使用不同的语言特征(如sfinae)以及未来潜在的特征(模块?)进行比较.
将编译器特定行为考虑在内也很有趣.我认为MSVC需要inline在某些地方使用第一个代码片段,但我不确定.
编辑:我知道这些功能的工作方式没有区别,这主要是品味问题.我想看看两种语法如何使用不同的技术,以及一种优于另一种的优势.我看到大多数答案都有利于一个人,但我真的很想得到双方的支持.更客观的答案会更好.
code-readability ×10
python ×4
coding-style ×2
.net ×1
c++ ×1
callback ×1
defaultdict ×1
formatting ×1
idioms ×1
indentation ×1
java ×1
javascript ×1
linq ×1
map ×1
performance ×1
pylint ×1
readability ×1
templates ×1