我使用Resharper,当我制作几行代码时:
foreach (var posCombination in possibleCombinations)
{
if (posCombination .Count == combo.Count && posCombination .Select((l, i) => combo.Contains(l)).All(b => b))
{
return true;
}
}
return false;
Run Code Online (Sandbox Code Playgroud)
它会问我是否要将其转换为LINQ表达式:
return possibleCombinations.Any(possibleCombination =>
possibleCombination.Count == combo.Count
&& possibleCombination.Select((l, i) => combo.Contains(l)).All(b => b));
Run Code Online (Sandbox Code Playgroud)
我有很多人告诉我他们很难读懂LINQ语句中的内容......那么为什么我要将它转换为LINQ表达式,如果它使我的代码不那么可读?
假设我有一个冗长,复杂的条件列表,必须为true才能运行if语句.
if(this == that && foo != bar && foo != that && pins != needles && apples != oranges)
{
DoSomethingInteresting();
}
Run Code Online (Sandbox Code Playgroud)
通常情况下,如果我被迫做这样的事情,我会把每个语句放在自己的行上,如下所示:
if
(
this == that
&& foo != bar
&& foo != that
&& pins != needles
&& apples != oranges
)
{
DoSomethingInteresting();
}
Run Code Online (Sandbox Code Playgroud)
但我仍觉得这有点乱.我很想将if语句的内容重构为它自己的属性
if(canDoSomethingInteresting)
{
DoSomethingInteresting();
}
Run Code Online (Sandbox Code Playgroud)
但是那只是将所有的混乱移动到canDoSomethingInteresting()并没有真正解决问题.
正如我所说,我的goto解决方案是中间解决方案,因为它不会像最后一个那样模糊逻辑,并且比第一个更具可读性.但必须有更好的方法!
响应Sylon评论的示例
bool canDoSomethingInteresting
{
get{
//If these were real values, we could be more descriptive ;)
bool thisIsThat = this == that; …Run Code Online (Sandbox Code Playgroud) 标题有点难以理解,但我的问题很简单.
我有一个程序需要采取sqrt()一些东西,但这是我唯一需要的东西math.导入整个模块以获取单个函数似乎有点浪费.
我可以说from math import sqrt,但是然后sqrt()会被添加到我的程序的主命名空间中,我不希望这样(特别是因为我打算将程序改为可用作模块;这样导入会导致那种情况出现问题吗?).有没有办法在保留math.sqrt()语法的同时只导入那个函数?
我在这个特定情况下使用的是Python 2.7,但是如果对Python 3有不同的答案,我也希望听到它以供将来参考.
我目前正在学习Lisp,我认为我掌握了基础知识(我使用的是优秀的Land of Lisp,到目前为止我已阅读并完成了大约四分之一的工作).
我尝试根据我已经学到的东西创建自己的Lisp程序.不知何故,它的工作原理.但这只是某种方式.到目前为止,我一直在开发主要使用C语法的语言,例如C#和JavaScript(请注意,我完全清楚JavaScript不是基于C语言).
不过,我习惯用C语法"思考",当我用C#或JavaScript编写代码时,我可以用一种非常直接的方式写下来.相比之下,在编写Lisp代码时,我很难将所有这些括号包围起来.
如果我有一个简单的陈述,如
(setf x (+ 2 3))
Run Code Online (Sandbox Code Playgroud)
我总是发现自己试图从左到右阅读它,发现它不起作用,然后搜索最里面的一对括号,然后从里到外进行处理.对于这个简单的表达式,这非常快.
但是如果我有更复杂的代码(虽然它根本不复杂),比如一个使用的函数,let更难(至少对我来说)找到最里面的括号:
(defun foo ()
(let ((x 23)
(y 42))
(+ x y)))
Run Code Online (Sandbox Code Playgroud)
在这里,看到什么后发生了什么,以及什么是嵌套到什么,已经有点难了.现在添加一些cond东西,也许结合几个lambdas,我完全迷失了,并发现自己计算括号几分钟(字面意思).
在编写它时也是如此,我在括号中迷失了,我不认为我甚至看到了"复杂"的Lisp代码.
随着时间的推移,这会变好吗?即,你习惯了吗?或者,有没有关于如何处理读取和编写Lisp代码以使事情变得更容易的技巧?经验丰富的Lisp程序员如何做到这一点?任何提示?
我想知道声明多个不需要的变量以使我的代码更具可读性是否合适.以下哪个片段的编码更好?它计算两个质量之间的力.
// 1
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);
// 2
double Fx = G * mass * b.mass / Math.pow( Math.sqrt(Math.pow(2,xPos-b.xPos) + Math.pow(2,yPos-b.yPos)), 2);
Run Code Online (Sandbox Code Playgroud)
如何平衡可读性和性能?是否可以在一行中完成评论好吗?
(我意识到Math.pow(Math.sqrt(在第二个例子中可以删除,但这只是一个例子)
// Standard pattern matching.
let Foo x =
match x with
| 1 ->
// ... lots of code, only evaluated if x == 1
| 2 ->
// ... lots of code, only evaluated if x == 2
// Standard pattern matching separated out, causing exception.
let Bar x =
let valueOne = //... lots of code, evaluated always. Exception if value <> 1.
let valueTwo = //... lots of code, evaluated always. Exception if value <> 2.
match …Run Code Online (Sandbox Code Playgroud) f# pattern-matching lazy-evaluation code-readability active-pattern
试图找出最干净的方法来执行以下操作:
我对一些结果进行了两次过滤,并且我正在使用 Lodash 过滤器来执行此操作。目前,我的代码如下所示:
resultsOne = _.filter(results, functionOne);
resultsTwo = _.filter(resultsOne, functionTwo);
Run Code Online (Sandbox Code Playgroud)
我意识到我可以组合 functionOne 和 functionTwo,但我喜欢将它们分开以提高可读性。是否有使用 Lodash 或纯 ol' Javascript 过滤两个函数的最佳实践?
谢谢!
我想知道,Python 文件中的标准位置是__all__什么?
我的假设直接在导入语句下方。但是,我在任何地方都找不到明确说明/询问的内容。那么,一般来说,应该放__all__哪里呢?
它会放在下面的示例文件中的什么位置?
#!/usr/bin/env python3
"""Where to put __all__."""
from time import time
# I think it should go here: __all__ = ["Hello", "Hello2"]
SOME_GLOBAL = 0.0
class Hello:
def __init__(self):
pass
class Hello2:
def __init__(self):
pass
if __name__ == "__main__":
pass
Run Code Online (Sandbox Code Playgroud)
先感谢您!
我有这个if-else声明做我想要的.正如你应该能说的那样,它正在做的事情非常简单.
if (width != null && height != null)
{
if (top != null && left != null)
{
ret.type = VMLDimensionType.full;
}
else
{
ret.type = VMLDimensionType.size;
}
}
else
{
if (top != null && left != null)
{
ret.type = VMLDimensionType.positon;
}
else
{
ret.type = VMLDimensionType.unset;
}
}
Run Code Online (Sandbox Code Playgroud)
的enum被称为是:
private enum VMLDimensionType
{
unset = 0,
full = 1,
size = 2,
position = 3
}
Run Code Online (Sandbox Code Playgroud)
它非常简单,我确信有更简洁,更易读的方式来表达这一点.
注意如果不是因为默认情况下VS强加的荒谬的"每条一条线"规则,我可能不会那么烦恼.例如在VB中,我可能会从此代码块中丢失大约10行!(关于那个的任何想法?)
c# refactoring code-readability code-snippets conditional-statements
我搜索了这个网站,人们说你应该避免使用using namespace std.我完全同意.但是,怎么样using std::cin和using std::string?应该避免还是鼓励这样做?
我知道总是类型std::cin是最安全的选择,但是一次又一次地输入它们是非常繁琐的.
但是,当你using std::cin在文件的开头键入etc 时,它似乎非常人群.例如,这个简单的程序读取和计算学生成绩,在它面前,有太多 using std::,看起来很不舒服.
#include <iostream>
#include <ios>
#include <iomanip>
#include <stdexcept>
#include <vector>
using std::cin; using std::cout;
using std::istream; using std::vector;
using std::setprecision; using std::domain_error;
using std::string; using std::getline;
using std::streamsize;
istream& read_hw(istream& in, vector<double>& homework);
double grade(double mid_exam, double final_exam, \
const vector<double>& homework);
int main() {
std::string name;
std::getline(std::cin, name);
std::cout << "Hello, " + name + "!" …Run Code Online (Sandbox Code Playgroud) code-readability ×10
c# ×3
python ×2
readability ×2
c++ ×1
coding-style ×1
common-lisp ×1
f# ×1
filter ×1
flake8 ×1
if-statement ×1
java ×1
javascript ×1
linq ×1
lisp ×1
lodash ×1
math ×1
pep8 ×1
python-2.7 ×1
refactoring ×1