函数什么时候太长? [关闭]

2024-01-08

35线、55线、100线、300线?你什么时候应该开始把它分开?我这么问是因为我有一个有 60 行(包括注释)的函数,并且正在考虑将其拆分。

long_function(){ ... }

into:

small_function_1(){...}
small_function_2(){...}
small_function_3(){...}

这些函数不会在 long_function 之外使用,使函数更小意味着更多的函数调用,等等。

什么时候你会把一个函数分解成更小的函数?为什么?

  1. 方法应该只做一件合乎逻辑的事情(考虑功能)
  2. 您应该能够用一句话解释该方法
  3. 它应该适合您显示器的高度
  4. 避免不必要的开销(指出明显问题的评论......)
  5. 对于小型逻辑功能来说单元测试更容易
  6. 检查部分函数是否可以被其他类或方法重用
  7. 避免过度的类间耦合
  8. 避免深层嵌套的控制结构

谢谢大家的回答,编辑列表并投票选出正确答案,我会选择那个;)

我现在正在重构这些想法:)


以下是可能表明函数太长的危险信号列表(排名不分先后):

  1. 深度嵌套的控制结构: 例如for 循环深度为 3 层,甚至只有 2 层,并且具有复杂条件的嵌套 if 语句。

  2. 太多国家定义参数: By 状态定义参数,我的意思是一个函数参数,它保证函数的特定执行路径。如果获取太多此类参数,则会出现执行路径的组合爆炸(这通常与#1 同时发生)。

  3. 其他方法中重复的逻辑:糟糕的代码重用是造成单一程序代码的一个巨大因素。很多这样的逻辑重复可能非常微妙,但一旦重新考虑,最终结果可能是更加优雅的设计。

  4. 类间耦合过度:缺乏适当的封装会导致函数与其他类的密切特征相关,从而延长它们。

  5. 不必要的开销:指出明显的深层嵌套类、私有嵌套类变量的多余 getter 和 setter 以及异常长的函数/变量名称的注释都可能在相关函数中产生语法噪音,最终会增加其长度。

  6. 您的大型开发人员级显示器不够大,无法显示它:实际上,当今的显示器已经足够大,任何接近其高度的功能都可能太长。但是,如果是的话larger,这是确实有问题的证据。

  7. 您无法立即确定该函数的用途: 另外,一旦你真的do确定它的目的,如果你不能用一句话概括这个目的或者碰巧非常头疼,这应该是一个线索。

总之,单体函数可能会产生深远的影响,并且通常是重大设计缺陷的症状。每当我遇到绝对的代码时joy读起来,它的优雅立刻显而易见。你猜怎么着:这些功能通常是very长度短。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数什么时候太长? [关闭] 的相关文章

随机推荐

  • 具有无限参数但具有相同(固定)类型的 C++ 函数

    我想要一个具有无限数量参数的函数 但我还想确保这些都是同一类型的指针 像这样的事情 void myFunc float value MyClass take all pointers of type MyClass and call fun
  • SQL Server 脚本生成器从十六进制转换日期时间值

    我需要从 SQL Server 生成插入脚本 当我使用 SQL Server 脚本生成器时 它会从十六进制转换日期时间值 例如 CAST xxxxxxxxxxxxx as dateTime 我怎样才能避免这种情况 我想要脚本中的实际值 不幸
  • Google Picker API 和选择 Google 云端硬盘项目的问题

    我正在尝试集成 Google Picker 以从 Google Drive 选择文件 如下这个例子 https developers google com drive integrate open 打开选择器时 我在 javascript
  • 使用 NSTask 和 NSPipe 导致 CPU 使用率 100%

    我正在尝试使用 NSTask 运行一个简单的 bash 脚本并将输出定向到文本视图 任务执行后 我的应用程序的 CPU 使用率为 100 即使它是一个简单的任务echo 目前 我创建了一个全新的项目来隔离该问题 interface AppD
  • 如何将 Byte[](解码为 PNG 或 JPG)转换为 Tensorflows 张量

    我正在尝试在 Unity 的项目中使用 Tensorflowsharp 我面临的问题是 对于转换 您通常使用第二个图将输入转换为张量 Android 不支持使用的函数 DecodeJpg 和 DecodePng 那么如何将该输入转换为张量
  • 如何使用 PHP 处理邮件发送错误

    我正在构建一个用于发送新闻通讯的 symfony 模块 这个想法是建立一个地址队列列表来接收邮件 然后使用 cron 作业 一次发送 50 个邮件 我现在不知道如何做是阅读当电子邮件地址不存在或邮件已满时服务器发回的邮件传送报告 这个想法是
  • 在 HTML 中查找值的快速方法 (Java)

    使用正则表达式 获取网站 HTML 并查找此标记内的值 或与此相关的任何属性值 的最简单方法是什么 snip snip 取决于您需要构建的 Http 请求的复杂程度 身份验证等 这是我过去见过的一种简单方法 StringBuilder ht
  • 检查丢失的软件包并安装它们的优雅方法?

    这些天我似乎与合著者分享了很多代码 他们中的许多人都是 R 新手 中级用户 并且没有意识到他们必须安装他们尚未安装的软件包 有没有一种优雅的调用方式installed packages 将其与我正在加载和安装的那些进行比较 如果丢失 是的
  • Windows 批处理文件中一行中的多个命令

    在 Unix 中 我们可以将多个命令放在一行中 如下所示 date ls l date 我在Windows中尝试过类似的事情 gt echo TIME dir echo TIME 但它打印了时间并且不执行命令dir 我怎样才能实现这个目标
  • 在mapview中绘制透明的圆

    我的地图视图和叠加有问题 每次改变 GPS 位置时 我都必须在地图上画一个圆圈 我在覆盖类中使用了扩展覆盖的方法绘制 问题是我必须以透明度绘制这些圆圈 但是当圆圈在交点处相互重叠时 颜色会有所不同 因为存在 alpha 之和 我该如何修复它
  • 多线程Hello World

    使用两个线程 您应该打印 Hello World Hello World Hello World Hello World Hello World Hello World 在两个线程中 一个应该打印 Hello 另一个线程应该打印 World
  • 将本地时间转换为 UTC 时,如何使 Time::Piece 尊重 DST?

    我想将时间戳从当地时间转换为 GMT 我有遗留代码 手动 执行此操作Time Local timelocal and gmtime 它有效 但我不喜欢它并想使用Time Piece反而 我用了这个答案 https stackoverflow
  • pyinstaller 没有名为 pyinstaller 的模块

    我的 mac osx sierra 下安装了 2 个 python 版本 蟒蛇3 5 蟒蛇2 7 我使用以下命令在 python3 5 下安装了 pyinstaller python3 5 m pip install pyinstaller
  • 设置 CSS 列中第一项的样式

    我有一个显示在多列上的列表 每个列表项都是块元素 display block 并附加了一些样式 底部有 1px 边框 目前看起来是这样的 List item List item List item List item List item L
  • 如何以编程方式确定蓝牙主/从角色?

    因此 在蓝牙微微网中 有一个主设备和最多七个从设备 主设备设置从设备同步的时钟和跳频 但有没有办法确定哪个设备是主设备 哪个设备是从设备呢 我主要对便携式设备 Android iPhone 感兴趣 但乞丐不能是选择者 如果有人有这个领域的信
  • 将 cmd 错误捕获到当前目录中的文件中?

    我有一个 PowerShell 脚本 可以重新启动文件中列出的服务器 foreach server in servers try cmd c shutdown exe r f m server t 0 d p 0 0 c PlannedRe
  • 模糊屏幕截图中的矩形

    我正在开发一个使用背景的 Android 应用程序Service以编程方式捕获当前屏幕上的任何内容的屏幕截图 我获得的屏幕截图是Bitmap 接下来我成功导入了OpenCV https docs opencv org 2 4 doc tut
  • 如何为 Laravel Fortify + Inertia + vue 添加角色和权限?

    我的项目使用 laravel fortify 惯性与 vue 我必须添加基于角色的权限 就像 spatie 权限包一样 我对于强化和惯性还是一个初学者 但我有 spatie 包的经验 我对如何添加角色和权限进行强化感到困惑 目前我计划创建像
  • 在 WordPress(或 .htaccess)中创建 URL 别名

    我有一个在 Wordpress 上运行的网站 我想创建一个自定义短网址 如果页面 URL 是 www mysite com category post 我希望用户能够访问 www mysite com alias 如果有一种 Wordpre
  • 函数什么时候太长? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi