我想知道声明多个不需要的变量以使我的代码更具可读性是否合适。以下哪个片段的编码更好?它计算两个质量之间的力。
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Year', 'Sales', 'Expenses'],
['2004', 1000, 400],
['2005', 1170, 460],
['2006', 660, 1120],
['2007', 1030, 540]
]);
var options = {
title: 'Company Performance',
curveType: 'function',
legend: { position: 'bottom' }
};
var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
chart.draw(data, options);
}
如何平衡可读性和性能?是否可以在评论中一行完成这一切?
(我意识到Math.pow(Math.sqrt(在第二个例子中可以删除,但这只是一个例子)
答案 0 :(得分:5)
如何平衡可读性和性能?
您提供了一个很好的例子,说明为什么可读性比性能更重要。
Math.pow(2,xPos-b.xPos)
这是
2^(xPos-b.xPos)
而不是
(xPos-b.xPos)^2
正如我想象的那样。
另外
Math.pow(Math.sqrt(x), 2)
只是
x
无论哪种方式,你的表达都太复杂,你应该简化它。
double dx = xPos - b.xPos;
double dy = yPos - b.yPos;
double F = G * mass * b.mass / (dx*dx + dy*dy);
注意:Math.pow
和Math.sqrt
都是昂贵的操作,因此通过使公式更简单,它也会更快。
答案 1 :(得分:3)
始终以简单,最易读的方式编写代码(替代方案1)。您可以使用变量名称来阐明您的代码。
如果您需要观察它们,还可以使用可用变量更轻松地进行调试。如果你得到一个异常,那么它将精确地指出一组指令失败,而不是另一个巨大的,令人困惑的替代方案2。
它不会影响性能,因为Just In Time编译器会自动优化您的代码。
答案 2 :(得分:1)
我会选择替代方案1,因为如果你得到一个例外,它会使调试变得更容易,因为每行会有一个操作,堆栈跟踪将包含发生错误的行号。我个人也觉得它更容易阅读。我想改变的是你的变量名称更有意义。
答案 3 :(得分:1)
如何平衡可读性和性能?正在做所有这一切 评论好吗?
嗯,我认为它不会对性能产生影响。我建议你尽可能多地阅读它。评论长计算公式并没有多大帮助。
答案 4 :(得分:1)
正确性的第一个代码,然后为了清楚起见(当然,这两个经常连接!)。最后,只有你有真正需要的实证证据,你才能看到优化。过早的优化确实是邪恶的。优化几乎总是花费您的时间,清晰度和可维护性。你最好确定你买的是有价值的东西。
过早优化是编程中所有邪恶(或至少大部分)的根源...... Donald Knuth
Should a developer aim for readability or performance first?
答案 5 :(得分:1)
当您声明每个变量时,它不仅使代码更具可读性,还可以帮助防止错误。在求解等式的不同部分时,声明单个变量也很有用。
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent returnIntent = new Intent();
returnIntent.putExtra("BMP", bmp);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
});
通过声明每个变量,您可以显示x方向,y方向,半径和两个物体之间的重力距离。
压缩成一行的代码通常会让人感到困惑并导致愚蠢的错误。
double dx = xPos - b.xPos;
double dy = yPos - b.yPos;
double r = Math.sqrt(dx*dx + dy*dy);
double F = G * mass * b.mass / (r*r);
答案 6 :(得分:0)
没有在一行上编写复杂的代码是不行的,想象一下在一个现实生活的项目中工作,不仅你将对你的代码进行更改,如果可能是你的老板无法理解代码,那么会造成灾难更改它,如果你有一个
,你甚至想知道你的错误来自哪里