Coding style 将尽可能多的逻辑放在最少(一行代码)的代码中的利弊是什么?

Coding style 将尽可能多的逻辑放在最少(一行代码)的代码中的利弊是什么?,coding-style,Coding Style,很酷吗 IMO one liners降低了可读性,使调试/理解更加困难。在某些情况下,ONLINERS可能很有用 int value = bool ? 1 : 0; 但在大多数情况下,它们使代码更难遵循。我认为你只应该把事情放在一行,当它很容易遵循,意图是明确的,它不会影响调试 大多数情况下都是这样,但在某些情况下,一行是常见的习惯用法,那么它是可以接受的可能就是一个例子。关闭可能是另一个问题 如果有一种简单的方法可以在一行代码中表达某种东西,那就太好了。如果只是把很多表达式塞进一行,那就不太

很酷吗


IMO one liners降低了可读性,使调试/理解更加困难。

在某些情况下,ONLINERS可能很有用

int value = bool ? 1 : 0;

但在大多数情况下,它们使代码更难遵循。我认为你只应该把事情放在一行,当它很容易遵循,意图是明确的,它不会影响调试

大多数情况下都是这样,但在某些情况下,一行是常见的习惯用法,那么它是可以接受的可能就是一个例子。关闭可能是另一个问题

如果有一种简单的方法可以在一行代码中表达某种东西,那就太好了。如果只是把很多表达式塞进一行,那就不太好了

为了解释我的意思,LINQ允许您以相对简单的方式表达相当复杂的转换。那太好了,但我不会尝试在一行中加入一个巨大的LINQ表达式。例如:

var query = from person in employees
            where person.Salary > 10000m
            orderby person.Name
            select new { person.Name, person.Deparment };
比以下内容更具可读性:

var query = from person in employees where person.Salary > 10000m orderby person.Name select new { person.Name, person.Deparment };
它也比手动进行所有过滤、排序和投影更容易阅读。这是一个很好的甜蜜的地方


尝试“聪明”很少是个好主意,但如果你能简单、简洁地表达一些东西,那就好了。

不,这很烦人。

最大限度地提高代码的可理解性

有时,这意味着将(简单、易于理解的)表达式放在一行,以便在给定的屏幕空间(即源代码编辑器)中获得更多代码

其他时候,这意味着采取一些小步骤,让代码的含义变得显而易见


一行程序应该是副作用,而不是目标(也不是要避免的东西)。

一行程序可读性更强,可读性更低。你得逐案判断


当然,根据提示一行规则。

根据定义,这是主观的,而且由于问题的模糊性,你可能会在地图上找到答案。您指的是单个物理线还是逻辑线?你是说:

int x = BigHonkinClassName.GetInstance().MyObjectProperty.PropertyX.IntValue.This.That.TheOther;

对我来说,一行是“什么感觉是对的”的问题。在上面的例子中,我可能会将其分为物理和逻辑两行,获取BigHonkinClassName的实例,然后将完整路径拉到另一行。但那只是我。其他人会不同意。(这是有余地的。就像我说的,主观的。)

关于可读性,请记住,对于许多语言,即使是“一行”也可以分成多行。例如,如果您对条件三元运算符(
?:
)有一组很长的条件,您可能需要将其拆分为多个物理行以提高可读性:

int x = (/* some long condition */) ?
        /* some long method/property name returning an int */ :
        /* some long method/property name returning an int */ ;
在一天结束时,答案总是:“视情况而定。”一些框架(如许多DAL发电机,如亚音速)几乎需要非常长的一行程序才能完成任何实际工作。其他时候,将其分成多行是非常可取的

如果有具体的例子,社区可以提供更好、更实际的建议

一般来说,我绝对不认为你应该把一堆代码“挤”到一行物理代码上。这不仅损害了易读性,还让人觉得有人公然蔑视维护程序员。正如我以前教我的学生的那样:总是为维护程序员编写代码,因为它通常是你


:)

一条经验法则是,如果你能用简单的语言在一个很短的句子中表达一行的概念。“如果是真的,则将其设置为该值,否则将其设置为该值”

一行程序在正确使用时,可以清楚地传达您的意图,并使代码的结构更易于掌握

python的一个示例是列表理解:

new_lst = [i for i in lst if some_condition]
而不是:

new_lst = []
for i in lst:
    if some_condition:
        new_lst.append(i)

这是一个常用的习惯用法,它使代码更具可读性和紧凑性。因此,在某些情况下,两个方面都可以达到最佳效果。

一行程序应根据具体情况进行处理。有时,它确实会损害可读性,应该使用更详细的(阅读:易于理解)版本

然而,有时,一条班轮看起来更自然。采取以下行动:

int Total = (Something ? 1 : 2)
          + (SomethingElse ? (AnotherThing ? x : y) : z);
int Total;

if (Something)
  Total = 1;
else
  Total = 2;

if (SomethingElse)
  if (AnotherThing)
    Total += x;
  else
    Total += y;
else
  Total += z
或同等标准(可读性稍差?):

IMHO,我更喜欢上述任何一项,而不是以下内容:

int Total = (Something ? 1 : 2)
          + (SomethingElse ? (AnotherThing ? x : y) : z);
int Total;

if (Something)
  Total = 1;
else
  Total = 2;

if (SomethingElse)
  if (AnotherThing)
    Total += x;
  else
    Total += y;
else
  Total += z
使用嵌套的if语句,我很难在不进行跟踪的情况下计算出最终结果。“一行”感觉更像是它的预期数学公式,因此更容易遵循

至于酷的因素,在“看,妈,我一行写了一个完整的程序!”中有一种成就感/炫耀因素。但我不会在任何情况下使用它,除了玩游戏;我当然不想回去调试它


最终,对于真实的(生产)项目,任何使其最容易理解的都是最好的。因为总有一天你或其他人会再次查看代码。他们所说的是正确的:时间是宝贵的。

对于一个代码构造,整个结构的最终目标是决定使用适当的格式设置单个变量的值,将多个条件放入一个语句几乎总是更清楚的。使用多个嵌套的if end if ELSE,总体目标是设置变量

“变量名称=

必须在每个嵌套子句中重复,眼睛必须阅读所有嵌套子句才能看到这一点。。有了singlr语句,它就更清晰了,有了适当的格式,复杂性也更容易管理

decimal cost =
      usePriority?        PriorityRate * weight:
      useAirFreight?      AirRate * weight:
      crossMultRegions?   MultRegionRate:
                          SingleRegionRate;

更重要的是发展和坚持一贯的风格

您将更快地发现bug,更好地与他人共享代码,如果您仅仅开发并坚持一种模式,甚至可以更快地编写代码

其中一个方面是对一行程序作出决定。这里有一个来自我的商店的例子(我经营一家小鳕鱼店)
a().b().c(d() + e())
A = a();
B = A.b();
D = d();
E = e(); // here i can query A B D and E

B.C(d + e);