热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

用断言好还是if语句?

感觉断言的功能,可以用if语句来对异常情况进行的处理来代替。那这样,断言还有什么意义吗?
感觉断言的功能,可以用if语句来对异常情况进行的处理来代替。那这样,断言还有什么意义吗?

14 个解决方案

#1


if是实的,真正的增加代码量,降低执行效率;而断言是虚的,在Debug的时候可以帮助调试,在Release的时候并不存在。

引用 楼主 explorer8 的回复:
感觉断言的功能,可以用if语句来对异常情况进行的处理来代替。那这样,断言还有什么意义吗?

#2


断言是用于调试的
有了断言,可以再加if语句,做防御编程处理,以策代码安全。
不考虑代码安全,只加上断言,就可以了。

另外断言,实际上也是一种文档。
断言设定了,函数的 入口条件。增加了代码的可读性。

所以能加断言,还是尽量加的好。

#3


首先要分清 流程控制和测试目的的区别

#4


用户输入之类 无法掌控的 用if
比如说 除法计算的时候 除0 错误 
这种情况一般用if 处理

能自己掌控的 
能确定运行到这里 
这个参数必然是有效
用断言 
比如 空指针 [一般没有用户操作生成一个指针传递给你的函数吧]

或者换一种说法 
发布之后 仍然需要进行判断的用if 
发布之后 可以不进行检查的用断言

#5


断言用于在开发阶段监测BUG,进行调试。
其存在的意义在于检测代码在开发过程中是否出现了问题。

而"if... ",更准确的说是错误处理,是在你的release版本中实实在在应该有的,处理程序运行过程中产生的错误并进行处理,以提高程序的健壮性。

对于在开发过程中的程序员来说,加断言是个好习惯,可以帮助调试。

#6


引用 5 楼 fuxiang 的回复:
断言用于在开发阶段监测BUG,进行调试。
其存在的意义在于检测代码在开发过程中是否出现了问题。

而"if... ",更准确的说是错误处理,是在你的release版本中实实在在应该有的,处理程序运行过程中产生的错误并进行处理,以提高程序的健壮性。

对于在开发过程中的程序员来说,加断言是个好习惯,可以帮助调试。
明白了

#7


引用 4 楼 lin5161678 的回复:
用户输入之类 无法掌控的 用if
比如说 除法计算的时候 除0 错误 
这种情况一般用if 处理

能自己掌控的 
能确定运行到这里 
这个参数必然是有效
用断言 
比如 空指针 [一般没有用户操作生成一个指针传递给你的函数吧]

或者换一种说法 
发布之后 仍然需要进行判断的用if 
发布之后 可以不进行检查的用断言
了解

#8


引用 2 楼 lm_whales 的回复:
断言是用于调试的
有了断言,可以再加if语句,做防御编程处理,以策代码安全。
不考虑代码安全,只加上断言,就可以了。

另外断言,实际上也是一种文档。
断言设定了,函数的 入口条件。增加了代码的可读性。

所以能加断言,还是尽量加的好。
第一次听到防御性编程…

#9


防御性编程…不是我的发明创造
只是,为了保证代码安全,为了代码代码的健壮性采取的一种措施。
我们有时会自发的这么处理,不过自觉处理可能更好。

防御性编程,就是预防程序;
因为处理不了,而放任代码出错,采取的措施。

比如
你的程序可以处理3种正常情况;
而你的参数,外部变量,等;可能会出现3种正常情况以外的,异常情况

这些没有处理的情况,在调试的时候,可以采用断言处理。

但是发布版,断言不起作用;
要保证程序,不会因为异常情况出错;

就可以用if 语句,把额外的情况排除掉;

在下面正式处理的代码中,就不会再出现例外的情况,从而排除了异常;
可以按照,正常逻辑,直接编写了代码。

#10


推荐看看这本书
编写安全的代码(write secure code.pdf英文版) 

#11


C安全编码标准.pdf
编写安全的C,C++代码

#12


去看《编程精粹》

#13


两者没任何关系

#14


引用 9 楼 lm_whales 的回复:
防御性编程…不是我的发明创造
只是,为了保证代码安全,为了代码代码的健壮性采取的一种措施。
我们有时会自发的这么处理,不过自觉处理可能更好。

防御性编程,就是预防程序;
因为处理不了,而放任代码出错,采取的措施。

比如
你的程序可以处理3种正常情况;
而你的参数,外部变量,等;可能会出现3种正常情况以外的,异常情况

这些没有处理的情况,在调试的时候,可以采用断言处理。

但是发布版,断言不起作用;
要保证程序,不会因为异常情况出错;

就可以用if 语句,把额外的情况排除掉;

在下面正式处理的代码中,就不会再出现例外的情况,从而排除了异常;
可以按照,正常逻辑,直接编写了代码。
了解…

推荐阅读
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 作为一名程序员,从大学步入职场后,常常感受到一种难以言喻的空虚感。这种感觉或许源于对生活的不满、职业发展的瓶颈,或是日常琐事带来的压力。本文将深入探讨这种复杂的情感,并尝试寻找解决之道。 ... [详细]
  • 深入解析:阿里实战 SpringCloud 微服务架构与应用
    本文将详细介绍 SpringCloud 在微服务架构中的应用,涵盖入门、实战和案例分析。通过丰富的代码示例和实际项目经验,帮助读者全面掌握 SpringCloud 的核心技术和最佳实践。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 深入理解Spring:Aware接口、异步编程与计划任务
    本文将带你深入了解Spring框架中的 Aware 接口、异步编程以及计划任务。通过具体示例和详细解释,帮助你掌握这些核心功能的实现原理和应用场景。 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
author-avatar
helloboris
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有