【问题标题】:Is it a good idea to use lambdas in one function instead of spreading the function across multiple functions? [closed]在一个函数中使用 lambdas 而不是将函数分散到多个函数中是个好主意吗? [关闭]
【发布时间】:2021-01-30 19:12:49
【问题描述】:

基本上,我的意思是:

void funcForFoo1()
{
  // ...
}

void funcForFoo2()
{
  // ...
}

void foo()
{
  // Other two functions will be used here and here only
}

VS

void foo()
{
  auto lambdaForFoo1 = []()
  {
    // ...
  }
  
  auto lambdaForFoo2 = []()
  {
    // ...
  }
  // Use the lambdas later on
}

lambda 的作用域被缩减为仅在函数内部使用,这是一件好事,并且可能比使用其他函数更有优势。但是,我相信类函数中的 lambdas 不能访问类成员,除非它捕获 this,并且使用 lambdas 而不是其他函数可能与使用其他函数相比看起来有点混乱。在您看来,哪一个最终会是更好的选择?

【问题讨论】:

  • 请注意,如果类成员函数中的 lambda 捕获 this,则它可以访问其他成员。
  • 啊,我不知道。我会把它添加到答案中。
  • 为了使这个问题不是基于意见的,你需要不那么抽象,而不是太长的问题。这是一个可笑的狭隘眼线。
  • 我不同意这是意见基础。从我的观察来看,lambda 版本的代码更难阅读和维护,更难遵循控制流程(很多时候我正在分析代码片段,突然发现顺序不同,因为片段实际上在 lambda 内部)。函数版本允许您在多个函数中重用现有代码。还有一个 lambda 捕获,这将使这个问题更加令人沮丧。
  • @MarekR “根据我的观察......”这只是证明它是基于意见的。您可能会发现 lambda 更难阅读。其他人可能更喜欢它们。然而其他人不会在意这种或另一种方式。这是将这个线程变成现场辩论的秘诀。这就是为什么存在“基于意见”的密切原因。

标签: c++ function lambda


【解决方案1】:

基本上,这取决于。

如果您想访问本地函数成员并轻松修改输入参数,那么 lambda 绝对是更好的选择。调试和调整代码时非常棒。但是如果过度使用会变得一团糟。

如果您想在许多地方重用函数(和/或类),那么 lambda 显然不适合该角色,而函数/类是首选。

在您的示例中,您似乎只在一个函数中使用它们,但它们都没有使用任何局部变量。所以在这个特定的例子中,它并不重要,更多的是一种风格选择。 Lambda 有一个次要优势,即它们不会生成可能被损坏的链接符号,并且它还可以确保没有人会在其他地方使用 lambda,如果这是您想要的……那么如果它在.cpp 文件。另一个考虑因素是,在函数版本中,除非进行搜索,否则不清楚在哪里使用它,但函数中的大 lambda 也永远不会太漂亮,而且很容易变得一团糟。

【讨论】:

  • 对不起,我自己的帖子这么晚了,我不得不去睡觉了。在我的函数版本中,这两个函数在最后一个函数中使用。我的主要问题基本上是外部函数与 lambdas 的可读性,由于范围缩小,这对我来说更符合逻辑,但恕我直言,可读性降低。
  • @mediocrevegetable 现在大多数编辑器都可以隐藏 lambda/函数的内在函数,这样它们就不会占用空间。因此,无论如何,可读性上的差异也不显着……除非您在整个函数中随机散布这些定义并使其混乱。
  • 是的,没错。事实上,当我尝试在函数中使用 lambda 时,我确保将它们都放在顶部,所以我想你在这个意义上是对的。
猜你喜欢
  • 1970-01-01
  • 2015-06-04
  • 2013-09-16
  • 2012-04-19
  • 2011-04-05
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
相关资源
最近更新 更多