我遇到过一篇讨论"代码钦佩"问题的文章.基本上,作者讨论了开发人员应该如何对他们编写的代码持更多怀疑态度.我们如何过分"钦佩"我们的代码,将自己与自己联系起来,使我们更容易受到可能在我们面前的错误和其他不幸事件的影响.
你觉得这个问题怎么样?您是否有关于如何避免/更多地意识到这个问题的更多提示?
我今天写了这个,我很惭愧.我需要做些什么来使这些混乱的东西更准确和可读?
switch ((RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType)Enum.Parse(typeof(RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType), ihdType.Value))
{
//REF:This can (but should it?) be refactored through strategy pattern
case RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType.ReportPlanWithEffects:
grvEconomicCriteria.DataSource = RequestReportsCalculatingStoredProcedures.ReportsDataParser(
RequestReportsCalculatingStoredProcedures.ReportPlanWithEffects(requestNo, RequestReportsCalculatingStoredProcedures.GetAlgorithmNoByRequestNo(requestNo)));
break;
case RequestReportsCalculatingStoredProcedures.RequestReportStoredProcedureType.ReportPlanWithEffectsForFacts:
DateTime factDate;
try
{
factDate = Convert.ToDateTime(ihdDate.Value);
}
catch(FormatException)
{
grvEconomicCriteria.DataSource = RequestReportsCalculatingStoredProcedures.ReportsDataParser(
RequestReportsCalculatingStoredProcedures.ReportPlanWithEffectsForFacts(requestNo, RequestReportsCalculatingStoredProcedures.GetAlgorithmNoByRequestNo(requestNo), DateTime.MinValue));
break;
}
grvEconomicCriteria.DataSource = RequestReportsCalculatingStoredProcedures.ReportsDataParser(
RequestReportsCalculatingStoredProcedures.ReportPlanWithEffectsForFacts(requestNo, RequestReportsCalculatingStoredProcedures.GetAlgorithmNoByRequestNo(requestNo), factDate));
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud) 是的我知道你不应该在C++中使用C风格的演员表,但在某些情况下我真的认为它更具可读性,比较这两个例如:
d = ((double)i * 23.54) / (d + (double)j);
d = (static_cast<double>(i) * 23.54) / (d + static_cast<double>(j));
Run Code Online (Sandbox Code Playgroud)
哪一个更具可读性?
现在谈谈我的主要问题.显然我更喜欢上面一个,但有一种方法可以让它在我看来更具可读性:
d = (double(i) * 23.54) / (d + double(j));
Run Code Online (Sandbox Code Playgroud)
我的问题是,效率会降低吗?在这种情况下,编译器是否会创建比使用其他方法更多的双打,或者它是否足够聪明?这或多或少比典型的C风格演员阵容差吗?
我看到的一些PHP代码中充斥着"<?php"和"?>"标签,具体取决于它是否输出HTML.是否有任何性能优势而不是使用echo来编写HTML?当代码通过<?php标记在代码和HTML之间不断切换时,它使代码极难阅读.
请注意,我不只是在谈论偶尔的转换.我正在查看的代码(mantis-bt源代码)让我头疼的是它切换的次数.非常难读.我想知道他们是否有理由这样做?
我写了科学研究代码,特别是生物信息学.当然,在科学中,结果应该是可重复的.那些没有定期参与项目并且不详细了解基础设施的人可能合法地希望看到我的代码来重现结果.问题在于,使代码自足以容易地给这样的人提供/解释似乎严重限制了可能的重用量.
将几个相关项目中使用的功能分解为个人库通常很方便,但是将这些库转储5000行(不可否认的文档很少,因为它不是生产/发布质量)代码没有任何帮助是不方便的.处理那些想要快速重现结果的人手头的问题.
在您的系统上安装一组几个密钥库并且可以随时使用而不必考虑两次通常很方便,但向主要是科学家的人解释并不方便,而不是程序员如何设置所有这些东西.如果您自己不记得某些细节,尤其如此.(注意,虽然有问题的细节是与科学无关的技术细节.)
将研究项目的几个相关方面的所有代码保存在一个大型程序中通常很方便,而不是为您尝试的每个轻微变化/事物编写完全自包含的代码,但同样,转储所有代码并不方便这个,或解释所有这些,只是想要重现结果的人.
有哪些方法可以解决这些问题,以便我可以重用代码,但是仍然允许想要重现我的结果的人以合理的努力来启动和运行代码?请注意,我的问题的核心是创建可重用的代码库的可能性,这些代码库不是很成熟.
maintenance readability scientific-computing self-contained libraries
我注意到,即使尊重OOD的单一责任原则,有时课程仍然会变得很大.有时直接在方法中访问成员变量感觉就像拥有全局状态一样,当前范围中存在很多东西.仅通过查看当前工作的方法,就不可能确定当前范围中可访问的invidiual变量的来源.
最近和朋友一起工作时,我意识到我编写了比他更详细的代码,因为我将成员变量作为参数传递给每个方法.
这是不好的做法吗?
编辑:示例:
class AddNumbers {
public:
int a, b;
// ...
int addNumbers {
// I could have called this without arguments like this:
// return internalAlgorithmAddNumbers();
// because the data needed to compute the result is in members.
return internalAlgorithmAddNumbers(a,b);
}
private:
int internalAlgorithmAddNumbers(int sum1, int sum2) { return sum1+sum2; }
};
Run Code Online (Sandbox Code Playgroud) 我已经做了近十年的Java开发,我从未见过类似[2]的表达式(见下文).我第一次在JavaScript库中看到过这种情况.
1.
if(isValid) {
statement();
}
Run Code Online (Sandbox Code Playgroud)
2.
isValid && statement();
Run Code Online (Sandbox Code Playgroud)
[1]和[2]的结果是相同的,因为statement()
不会对其进行评估if isValid == false
.
if
语句的替代方法,我是否会有任何惊喜?编辑:
我在Groovy
控制台测试了这个.我想它会使这个问题无效.无论如何,谢谢你的回复.
我非常想念它(在C#中经常使用它).你能用C++做到吗?
我是一名java程序员,但现在进入"python领域"的一些东西,Python更好用.我非常确定我的代码的很大一部分对于Python程序员来说看起来很奇怪(例如,在每个if上都使用括号).
我知道每种语言都有自己的惯例和一套"习惯".因此,从可读性的角度来看,什么是Java中"走的路"的约定和实践,但实际上并不是"pythonic方式"?
我意识到,作为一名编程学生,我最大的弱点就是我很难理解其他人的代码.
我对"教科书"代码或明确注释的代码没有任何麻烦,但是当给出几百行的程序,包含十几个不同的函数而没有注释时,我发现它甚至很难开始.
我知道这种类型的代码是我在职业生涯中可能遇到的代码,我认为代码理解能力差对我来说是一个很大的障碍,所以我想专注于提高我的技能在这方面.
哪些工具/技术有助于提高您的体验中的代码理解力?
你如何处理不熟悉的,未注释的代码?为什么?你认为你的技术有用吗?
谢谢
readability ×10
c++ ×3
java ×2
boolean ×1
c ×1
c# ×1
casting ×1
coding-style ×1
conventions ×1
libraries ×1
maintenance ×1
oop ×1
php ×1
pragma ×1
python ×1