标签: code-readability

为什么要使用LINQ表达式?

我使用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表达式,如果它使我的代码不那么可读?

c# linq code-readability

3
推荐指数
1
解决办法
2011
查看次数

是否有更可读的方式来制作一长串的&&陈述?

假设我有一个冗长,复杂的条件列表,必须为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)

c# design-patterns if-statement code-readability

3
推荐指数
1
解决办法
179
查看次数

从导入同时保留模块访问权限

标题有点难以理解,但我的问题很简单.

我有一个程序需要采取sqrt()一些东西,但这是我唯一需要的东西math.导入整个模块以获取单个函数似乎有点浪费.

我可以说from math import sqrt,但是然后sqrt()会被添加到我的程序的主命名空间中,我不希望这样(特别是因为我打算将程序改为可用作模块;这样导入会导致那种情况出现问题吗?).有没有办法在保留math.sqrt()语法的同时只导入那个函数?

我在这个特定情况下使用的是Python 2.7,但是如果对Python 3有不同的答案,我也希望听到它以供将来参考.

python code-readability python-2.7

3
推荐指数
1
解决办法
130
查看次数

如何有效地读写Lisp代码?

我目前正在学习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程序员如何做到这一点?任何提示?

lisp readability common-lisp code-readability

3
推荐指数
1
解决办法
669
查看次数

Java最佳实践 - 在一行上进行大数学计算?

我想知道声明多个不需要的变量以使我的代码更具可读性是否合适.以下哪个片段的编码更好?它计算两个质量之间的力.

    // 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(在第二个例子中可以删除,但这只是一个例子)

java math code-readability

3
推荐指数
1
解决办法
682
查看次数

在F#模式匹配中拆分代码块以提高可读性

// 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

3
推荐指数
1
解决办法
162
查看次数

具有多种功能的 Lodash 过滤器

试图找出最干净的方法来执行以下操作:

我对一些结果进行了两次过滤,并且我正在使用 Lodash 过滤器来执行此操作。目前,我的代码如下所示:

resultsOne = _.filter(results, functionOne);
resultsTwo = _.filter(resultsOne, functionTwo);
Run Code Online (Sandbox Code Playgroud)

我意识到我可以组合 functionOne 和 functionTwo,但我喜欢将它们分开以提高可读性。是否有使用 Lodash 或纯 ol' Javascript 过滤两个函数的最佳实践?

谢谢!

javascript filter code-readability lodash

3
推荐指数
1
解决办法
4448
查看次数

将 __all__ 放在 Python 文件中的什么位置?

我想知道,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)

先感谢您!

python readability pep8 code-readability flake8

3
推荐指数
1
解决办法
348
查看次数

在C#中重写此最佳/最惯用的方法

我有这个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

2
推荐指数
3
解决办法
212
查看次数

应该避免或鼓励使用std :: cin`和`使用std :: cout`吗?

我搜索了这个网站,人们说你应该避免使用using namespace std.我完全同意.但是,怎么样using std::cinusing 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)

c++ coding-style code-readability

2
推荐指数
1
解决办法
1557
查看次数