当前位置:首页 > 科技  > 软件

函数设计心得:尽量避免布尔型参数

来源: 责编: 时间:2023-10-27 09:15:08 404观看
导读通常来说,我认为在设计一个函数原型的时候,应该尽量避免使用布尔类型的参数,除非函数名称能十分清楚的将这个参数的意思表达出来。我并没有想教你做事,但是请听我细说先举两个正面的例子,有一个 API 函数 EnableWindow,它用

通常来说,我认为在设计一个函数原型的时候,应该尽量避免使用布尔类型的参数,除非函数名称能十分清楚的将这个参数的意思表达出来。4oZ28资讯网——每日最新资讯28at.com

我并没有想教你做事,但是请听我细说

先举两个正面的例子,有一个 API 函数 EnableWindow,它用来启用或禁用一个窗口。它的第二个参数是一个布尔型参数,如果此参数传入 TRUE,则调用此函数会将指定的窗口启用,传入 FALSE,则禁用窗口。4oZ28资讯网——每日最新资讯28at.com

另外一个是 ShowScrollBar 的最后一个参数,它也是一个布尔型的。它的含义也十分明显,如果传入 TRUE,则表明将会显示滚动条,如果传入 FALSE,则会将滚动条隐藏。4oZ28资讯网——每日最新资讯28at.com

这两个例子中,布尔型参数的含义都清楚的体现在了函数的名称中,是一个良好设计。4oZ28资讯网——每日最新资讯28at.com

但下面的例子就没那么显而易见了。4oZ28资讯网——每日最新资讯28at.com

我们看看这个函数 CreateEvent,它的第一个参数是布尔型的,但如果不查看函数的文档,则开发者很难想象这个参数具体的作用是什么。看了文档之后,才会明白:这个参数用来控制是否创建一个自动重置的事件对象。更进一步地,到底是传入 TRUE 还是 FALSE 来创建一个自动重置对象呢?每次当我调用这个函数的时候,我都只能老老实实的翻开函数文档认真阅读,才知道具体应该传入什么布尔值。4oZ28资讯网——每日最新资讯28at.com

我认为,这个参数应该被设计为一个 DWORD 或者,如果更优雅一些的话,应该设计为一个枚举,类似于:EVENTTYPE_AUTORESET 和 EVENTTYPE_MANUALRESET,这样就一眼可以看出来参数的含义了。4oZ28资讯网——每日最新资讯28at.com

更加糟糕的是,CreateEvent这个函数中,总共有两个布尔型参数,你需要弄明白这些布尔值的含义,还得小心不要记错顺序了,这可太糟了。4oZ28资讯网——每日最新资讯28at.com

另外一个反面例子是:StreamReader(Stream, bool) 这个函数,我想问问聪明的你,如果先不看函数文档的话,你能猜到它的第二个参数是什么意思吗?4oZ28资讯网——每日最新资讯28at.com

总结

以上只是我的个人看法,怎么设计你的函数害得你自己决定。
但,为什么不让生活变得更美好一些呢?
帮助他人(你代码的阅读者),善待自己(三个月后的自己)。4oZ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-15324-0.html函数设计心得:尽量避免布尔型参数

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 认识一些常见的Spring Boot内置Health Indicator

下一篇: 深入理解并发编程艺术之JVM内存模型

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
Top