我有这些冗长的陈述,我将在这里称为x,y等.我的条件语句的结构如下:
if(x || y || z || q){
if(x)
do someth
else if (y)
do something
if(z)
do something
else if(q)
do something
}
else
do smthing
Run Code Online (Sandbox Code Playgroud)
有没有更好,更短的方式来写这个东西?谢谢
我一直在学习计划,我才意识到我真的不知道如何正确评论我的功能方案代码.我知道当然如何添加评论 - 你添加一个;并在其后添加评论.我的问题是我应该在评论中加入什么,我应该在哪里评论其他程序员阅读我的代码的最大可读性和可理解性?
这是我写的代码片段.这是一个叫做的函数display-n.可以使用任意数量的参数调用它,并按照提供的顺序将每个参数输出到屏幕.
(define display-n
(lambda nums
(letrec ((display-n-inner
(lambda (nums)
(display (car nums))
(if (not (equal? (cdr nums) (quote ()))
(display-n-inner (cdr nums))))))
(display-n-inner nums))))
Run Code Online (Sandbox Code Playgroud)
编辑:改进黏合,取而代之'()以(quote ())避免SO搞乱格式.
我只是不确定如何/在哪里添加评论以使其更容易理解.我见过的一些方案代码只是在顶部有注释,如果你想使用代码,这很好,但如果你想理解/修改它就没有用.
另外 - 我应该如何评论宏?
scheme comments functional-programming coding-style readability
我正在寻找一种可读,优雅的方式在C++中执行以下操作,这里显示在Python中:
for datum in data[1:]:
do work.
Run Code Online (Sandbox Code Playgroud)
有问题的数据上的迭代器可能不支持随机访问迭代器,所以我不能只使用:
for (mIter = data.begin() + 1; mIter != data.end(); mIter++)
Run Code Online (Sandbox Code Playgroud)
我提出的最好的是以下内容:
iterable::iterator mIter = data.begin();
for (mIter++; mIter != allMjds.end(); mjdIter++) {
do work.
}
Run Code Online (Sandbox Code Playgroud)
它不是太冗长,但它几乎不是说明性的 - 乍一看它实际上看起来像是一个错误!
另一种解决方案是拥有一个"第n个元素"辅助函数,我猜.任何冷静的想法?
我正在使用iOS 4.3并且想知道是否有任何方法可以访问Safari的"读者"功能,通过该功能删除广告和其他riff raff的网页,内容占据中心舞台.
如果在Safari中打开任何文章(在维基百科网站上),则会在URL栏上显示"阅读器"按钮.点击它会显示一个新窗口,精美地呈现内容.
我如何在iOS中利用此功能UIWebView?

PS:我知道有一种叫做可读性项目的东西.但我不知道如何使用它UIWebView.另外对于某些网站,Safari的读者接听电话不启用"读者"功能,也许它没有足够的信心?
请考虑以下代码:
StockcheckJobs =
(from job in (from stockcheckItem in MDC.StockcheckItems
where distinctJobs.Contains(stockcheckItem.JobId)
group stockcheckItem by new { stockcheckItem.JobId, stockcheckItem.JobData.EngineerId } into jobs
select jobs).ToList()
let date = MJM.GetOrCreateJobData(job.Key.JobId).CompletedJob.Value
orderby date descending
select new StockcheckJobsModel.StockcheckJob()
{
JobId = job.Key.JobId,
Date = date,
Engineer = (EngineerModel)job.Key.EngineerId,
MatchingLines = job.Count(sti => sti.Quantity == sti.ExpectedQuantity),
DifferingLines = job.Count(sti => sti.Quantity != sti.ExpectedQuantity)
}).ToList()
Run Code Online (Sandbox Code Playgroud)
ToList()中间有一个因为该GetOrCreateJobData方法无法转换为sql.
因此,我必须用括号括起我的查询的第一部分来执行此操作,然后我使用外部查询来完成.
我知道我可以把它分成两个变量,但我不想这样做(这也是在一个对象初始化器中).
有什么其他语法我可以用来增加可读性,最好不需要外部内部查询,当我必须ToList在linq查询中间做一个(或以其他方式获取linq到对象)?
在一个理想的世界里,我喜欢这样的东西(尽可能接近):
StockcheckJobs =
from stockcheckItem in MDC.StockcheckItems
where distinctJobs.Contains(stockcheckItem.JobId)
group stockcheckItem by …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个需要尽可能少的外部依赖项的C++项目,因此我非常关注STL和Boost.到目前为止,在C++方面,我几乎完全生活在Qt-land.一般来说,我倾向于使用C#和Python.
今天我想检查是否std::vector包含某个项目.有了Qt,我会这样做:
QList< int > list;
list.append( 1 );
list.append( 2 );
list.append( 3 );
if ( list.contains( 2 ) )
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
很好,可读.但std::vector没有contains方法,这是一个惊喜.好的...这样的STL成语是什么?搜索周围,似乎是这样的:
std::vector< int > list;
list.push_back( 1 );
list.push_back( 2 );
list.push_back( 3 );
std::vector< int >::const_iterator result =
std::find( list.begin(), list.end(), 2 );
if ( result != list.end() )
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
那(对我来说)难以理解,而且太冗长了.所以我发现自己编写了一个实用函数,它接受一个向量和一个值,并bool根据是否找到值返回.基本上,模板化的contains()方法; 上述std::find调用的包装器.然后,我可以以类似于Qt示例的方式使用它.
我有几个类似的实用函数,它们可以包装其他STL惯用语,而不是其他原因,但可读性增加(感知).我想知道的是......这是一个坏主意吗?其他人也这样做吗?我错过了一些关键的东西吗 代码将在某一时刻成为OSS,而我宁愿做一些其他C++开发人员会觉得奇怪的特殊事物.
我非常的web开发经验不多,所以这可能是一个非常基本的问题.
这只是从有限的经验,我也有(一点点PHP,和一点点的Ruby on Rails的),似乎这样动态生成HTML的格式只是"不要紧"; 它最终变得难看,带有奇怪的缩进,并且没有人关心,因为这不是用户看到的.
当然,除非用户是开发人员,或者甚至只是想要查看一些HTML以尝试学习某些东西的人.
也许你不知道我在说什么; 所以让我举个例子.
在Ruby文件中,我可能有这样的代码:
<h1>Heading</h1>
<div>
<%= render :partial => '/layouts/body' %>
</div>
Run Code Online (Sandbox Code Playgroud)
然后,在我的"/layouts/_body.html.erb"文件中,我可能会这样:
<p>Here is some content!</p>
<ul>
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
当所有这些都被渲染时,它看起来会很好.但是如果用户试图查看源代码,HTML看起来会很糟糕:
<h1>Heading</h1>
<div>
<p>Here is some content!</p>
<ul>
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
显然,这不是什么大问题.我完全可以理解流行的观点是否只是"无所谓".但这只是它必须的方式吗?HTML的可读性对任何人都无关紧要吗?
我只是想知道这是否曾经让其他任何人足以让他/她为它提出一个"解决方案"(显然它必须是一个将其视为"问题"的人).
我没有特别的原因对此进行过F3,并且惊讶地发现这种方法实现如下:
public static boolean isTrue(Boolean bool) {
if (bool == null) {
return false;
}
return bool.booleanValue() ? true : false;
}
Run Code Online (Sandbox Code Playgroud)
为什么不?
public static boolean isTrue(Boolean bool) {
if (bool == null) {
return false;
}
return bool.booleanValue();
}
Run Code Online (Sandbox Code Playgroud)
这并不重要,所以我想知道它有什么好处吗?可读性是一个足够弱的论点,我认为这是噪音.除非我遗失了一些其他好处.
我遇到过一篇讨论"代码钦佩"问题的文章.基本上,作者讨论了开发人员应该如何对他们编写的代码持更多怀疑态度.我们如何过分"钦佩"我们的代码,将自己与自己联系起来,使我们更容易受到可能在我们面前的错误和其他不幸事件的影响.
你觉得这个问题怎么样?您是否有关于如何避免/更多地意识到这个问题的更多提示?
我有一个变量如下
local armies = {
[1] = "ARMY_1",
[2] = "ARMY_3",
[3] = "ARMY_6",
[4] = "ARMY_7",
}
Run Code Online (Sandbox Code Playgroud)
现在我想为每个值做一个动作.循环这些值的最佳方法是什么?我在互联网上找到的典型事情是这样的:
for i, armyName in pairs(armies) do
doStuffWithArmyName(armyName)
end
Run Code Online (Sandbox Code Playgroud)
我不喜欢它,因为它导致一个未使用的变量i.以下方法避免了这种情况,并且是我目前正在使用的方法:
for i in pairs(armies) do
doStuffWithArmyName(armies[i])
end
Run Code Online (Sandbox Code Playgroud)
然而,这仍然不像我想的那样可读和简单,因为这是迭代密钥然后使用密钥获取值(相当必要).我对这两种方法的另一个好处pairs就是需要.在这里循环的值是我可以控制的值,我希望它可以尽可能容易地循环.
如果我只关心这些值,有没有更好的方法来做这样的循环?有没有办法解决我列出的问题?
我正在使用Lua 5.0(对语言来说很新)
readability ×10
c++ ×2
coding-style ×2
java ×2
c# ×1
comments ×1
formatting ×1
html ×1
if-statement ×1
indentation ×1
ios ×1
iterator ×1
linq ×1
linq-to-sql ×1
loops ×1
lua ×1
objective-c ×1
safari ×1
scheme ×1
stl ×1
syntax ×1
uiwebview ×1