除了屏幕类型(背光LCD,OLED,哑光,光面等......),什么配色方案在阳光直射下提供最大的可读性?
在谷歌搜索的一天,我无法找到很多.Kindle在灰色上使用黑色.我已经看到一些移动应用程序在黑色上使用浅灰色,声称具有良好的阳光可读性.随着移动应用程序的多样化,我感到惊讶的是,在简单的搜索距离内,这个主题并没有更多.
我甚至在油漆中制作了一堆测试样本,然后到外面翻转它们.今天外面大部分是阴天,所以它不是直射阳光,但是从那个快速的主观测试中,黑色白色是最好的白色黑色,黑色黄色和黑色浅灰色仍然很可读.
注意:请不要将此解释为"作业问题".这只是我很想知道的事情:)
中值为5有时用作算法设计中的练习,并且已知仅使用6次比较可计算.
在C#中实现"使用6次比较的五个中位数"的最佳方法是什么?我的所有尝试似乎都导致了尴尬的代码:(我需要漂亮可读的代码,同时仍然只使用6次比较.
public double medianOfFive(double a, double b, double c, double d, double e){
//
// return median
//
return c;
}
Run Code Online (Sandbox Code Playgroud)
注意:我想我也应该提供"算法":
我发现自己无法像Azereal在论坛帖子中那样清楚地解释算法.所以我会在这里引用他的帖子.来自http://www.ocf.berkeley.edu/~wwu/cgi-bin/yabb/YaBB.cgi?board=riddles_cs;action=display;num=1061827085
好吧,我在我的一个任务中提出了这个问题,我转向这个论坛寻求帮助,但没有帮助.我终于找到了如何做到这一点.
使用前4个元素启动mergesort并订购每对(2个比较)
比较每对中的两个较低的一个并从可能性中消除最低的一个(3个比较)
在没有配对的情况下添加第5个号码并比较两个(4个比较)
比较两个新对中的两个最低对并消除较低对(5个比较)
比较一个单独和最后一对中的较低者,较低的数字是中位数
可能的中位数在肠胃外
(54321)
5:4 3:2 2比较
(4 <5 2 <3 1)
4:2 3比较
2(4 <5 3 1)
1:3 4比较
2(4 <5 1 <3)
4:1 5比较
1,2(4 <5 3)
4:3 6比较
1,2(3)4,5-
三是中位数
编辑:作为您的请求,并防止自己得到更多的downvotes,这是我写的C++代码,找到五个中位数.不要介意它的尴尬:
double StageGenerator::MedianOfFive(double n1, double n2, …
Run Code Online (Sandbox Code Playgroud) 我刚刚看到Java的一个巨大的正则表达式让我想到了一般的正则表达式的可维护性.我相信大多数人 - 除了一些坏蛋perl贩子 - 会同意正则表达式难以维持.
我在考虑如何解决这种情况.到目前为止,我最有希望的想法是使用流畅的界面.举个例子,而不是:
Pattern pattern = Pattern.compile("a*|b{2,5}");
Run Code Online (Sandbox Code Playgroud)
一个人可以写这样的东西
import static util.PatternBuilder.*
Pattern pattern = string("a").anyTimes().or().string("b").times(2,5).compile();
Pattern alternative =
or(
string("a").anyTimes(),
string("b").times(2,5)
)
.compile();
Run Code Online (Sandbox Code Playgroud)
在这个非常简短的例子中,创建正则表达式的常用方法对于任何平庸的有才华的开发人员来说仍然是可读的.但是,请考虑那些填充两行或更多行的怪异表达式,每行包含80个字符.当然,(冗长)流畅的界面需要几行而不是只有两行,但我相信它会更具可读性(因此可维护).
现在我的问题:
你知道正则表达式的任何类似方法吗?
你是否同意这种方法比使用简单的字符串更好?
你会如何设计API?
你会在你的项目中使用这样一个整洁的实用程序吗?
你认为这会很有趣吗?;)
编辑: 想象一下,可能存在比简单构造更高级别的方法,我们都没有来自正则表达式,例如
// matches aaaab@example.com - think of it as reusable expressions
Pattern p = string{"a").anyTimes().string("b@").domain().compile();
Run Code Online (Sandbox Code Playgroud)
编辑 - 评论的简短摘要:
RegexBuddy - 花30欧元让你的代码可读(wtf?!这种产品的纯粹存在证明了我的论文是正确的 - 我们今天所知道的正则表达式是坏事(tm))
Martin Fowler的方法(仍然远非完美)
有趣的是,大多数人都认为正则表达式仍然存在 - 虽然它需要工具来阅读它们,聪明的家伙想办法让它们可维护.虽然我不确定流畅的界面是最好的方法,但我确信有些聪明的工程师 - 我们呢?;) - 应该花一些时间让正则表达式成为过去 - 这已经足够让他们和我们在一起已有50年了,你不觉得吗?
开放的BOUNTY
对于正则表达式的新方法,赏金将被授予最佳想法(无需代码).
编辑 - 一个很好的例子:
这是我正在谈论的那种模式 - 对能够翻译它的第一个人的额外荣誉 …
我正在浏览充满这样代码的代码库:
if let Some(i) = func1() {
if let Some(j) = func2(i) {
if let Some(k) = func3(j) {
if let Some(result) = func4(k) {
// Do something with result
} else {
println!("func 4 returned None");
}
} else {
println!("func 3 returned None");
}
} else {
println!("func 2 returned None");
}
} else {
println!("func 1 returned None");
}
Run Code Online (Sandbox Code Playgroud)
这是一个愚蠢的、简化的例子,但一般模式是:
Option
.None
)传递给下一个函数。Some
,则返回的最终值将用于某些用途。None
,则执行停止并记录某种错误 …我不知道该搜索什么.我发现重命名地图迭代器的第一个和第二个,但它不是我想要做的.
这是我想要做的[见下面的无意义的C++代码].有可能接近这个吗?否则将只需要选择"调整"迭代器作为循环内部的第一行我想.
// what I want to do:
std::map<int, std::string> my_map;
// ... populate my_map
for(auto key, auto & value: my_map){
// do something with integer key and string value
}
Run Code Online (Sandbox Code Playgroud)
C++ 11很好,但如果可能,请避免使用.
我得到的最接近的是
// TODO, can this be templated?
struct KeyVal{
int & id;
std::string & info;
template <typename P>
KeyVal(P & p)
: id(p.first)
, info(p.second)
{
}
};
//...
for ( KeyVal kv : my_map ){
std::cout << kv.info;
}
Run Code Online (Sandbox Code Playgroud)
但这意味着为每个地图编写一个适配器类:(
// slightly joke answer/"what …
Run Code Online (Sandbox Code Playgroud) 在代码文档方面,通常认为代码应该自行解释,内联代码文档(不包括公共API文档)应该只解释元代码问题,例如变通方法,为什么选择特定实现的解释等等.
如何使您的代码更具可读性并更多地解释自己?
除了个人偏好,是否有最佳的标签大小(2个空格?3个空格?8个空格?)以获得代码可读性?在我参与的不同项目中,人们似乎有着截然不同的标准.我似乎无法阅读2个空格缩进,但谷歌等公司将其作为标准使用.
任何人都可以指出文章,研究或有关选项卡最佳尺寸的合理论证吗?
如果我们想要具体,我主要在python中工作.这个问题的目标是为我工作的团队选择一个标准.
我最近的任务是维护一堆使用from module import *
相当多的代码.
这个代码库变得足够大,以至于导入冲突/命名歧义/"这个功能来自何处,有八个导入的模块有一个同名的名字?!"ism变得越来越普遍.
继续前进,我一直在使用显式成员(即import module ... module.object.function()
为了使维护工作更具可读性.
但我想知道:是否有一个IDE或实用程序可以强大地解析Python代码并重构*导入语句到模块导入语句中,然后将完整的模块路径预先添加到该模块成员的所有引用上?
我们没有大量使用元编程/反射/ inspect
/ monkeypatching,所以如果上面的IDE/util在这些事情上表现不佳,那就没关系.
我现在试图将我的代码保持在80或更少,因为我认为它在大多数情况下看起来更美观.但有时,如果我必须在奇怪的地方放置换行符,代码最终会变得更糟.
有一件事我还没弄清楚如何处理非常好的是长串.例如:
#0.........1........2........3........4.........5.........6.........7.........8xxxxxxxxx9xxxxxx
def foo():
if conditional():
logger.info("<Conditional's meaning> happened, so we're not setting up the interface.")
return
#.....
Run Code Online (Sandbox Code Playgroud)
结束了!将它放在下一行也无济于事:
#0.........1........2........3........4.........5.........6.........7.........8xxxxxxxxx9xxxxxx
def foo():
if conditional():
logger.info(
"<Conditional's meaning> happened, so we're not setting up the interface.")
return
#.....
Run Code Online (Sandbox Code Playgroud)
我可以使用换行但看起来很糟糕:
#0.........1........2........3........4.........5.........6.........7.........8
def foo():
if conditional():
logger.info(
"<Conditional's meaning> happened, so we're not setting \
up the interface.")
return
#.....
Run Code Online (Sandbox Code Playgroud)
该怎么办?缩短字符串是一种选择,但我不希望我的消息的可读性受到与该代码恰好有多少缩进级别一样任意的影响.
我有几次使用Python,我发现了"pythonic"编码方式.我在代码中使用了很多元组,其中大部分是极地或笛卡尔位置.
我发现自己在写这个:
window.set_pos([18,8])
Run Code Online (Sandbox Code Playgroud)
而不是这个:
window.set_pos((18,8))
Run Code Online (Sandbox Code Playgroud)
摆脱我发现难以阅读的双重括号.
似乎python自动进行从列表到元组的类型转换,因为我的代码正常工作.
但它是一种很好的编码方式吗?你有任何可用于编写可读代码的演示提示吗?
提前感谢你肯定有启发性的答案.
readability ×10
python ×4
refactoring ×2
algorithm ×1
c# ×1
c++ ×1
c++11 ×1
coding-style ×1
color-scheme ×1
dictionary ×1
ide ×1
iteration ×1
java ×1
median ×1
regex ×1
rust ×1
syntax ×1
tuples ×1