if-else语句注意事项

23 篇文章 0 订阅
3 篇文章 0 订阅

(转载请注明出处,射射)


欢迎关注我的个人网站《程序员网》 
->https://www.itmangoto.cn/


参考文章:

《C语言if、else超级组合》

《c++ -if语句比较注意》


背景:

        不管是在C/C++还是其它语言的编程中,流程控制语句几乎是入门常识,而(if...else)语句算得上是最基本最简单的流程控制语句了。如果连这个都不会,那就不用编程了。

        但是,其实(if...else)语句的使用有一些技巧和注意事项,有可能对于那些有数年编程经验的开发人员来说,也未必会注意到。下面我将简单的归纳一下。

正文:

下面将从下面几点来阐述:

(1)bool变量与0,1

(2)“==”与“=”

(3)int变量与0比较

(4)float 变量与“零值”进行比较

(5)if语句中的指针型变量

(6)先处理正常情况,再处理异常情况


一、bool型与0,1

记得以前去面试的时候,偶尔会碰到一些比较奇葩的问题。其中一中就是给你一个不太常见的if语句,让你去分析结果。例如if(a-5)。对于这种题目,我往往只会回答一句:"fuck your flower!"

对于if语句中括号包含的内容,理论上只有真和假两种,但是到底真和假用什么值来表示呢?不同的语言、不同的平台定义是不一样的。就好像if(a-5)这句话,加入a=5,那就是if(0),但是问题是0表示真和假在不同的环境下是不同的,面试出个这样的题目,是鼓励人家写这种代码么???


C++的编程指南里面,人家推荐的风格是:

if (!flag) // 表示flag 为假

其它的用法都属于不良风格,例如:

if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)

具体我就不多说了。


二、“==”与“=”

没有碰到过这个问题的人,估计是没有写过C/C++程序的了。基本上,刚开始写程序的都会碰到这个坑,而且最坑的是编译器很多时候是不会报错或者有提示的(当然,现在的编译器聪明了很多),查起来非常困难。

知乎上面有这个讨论 对于这个问题,意见似乎不太统一。

(1)有人赞成if(常量==变量)的形式,因为有部分语言、编译器环境下,无法检测出把“==”写成“=”这种错误。

(2)有人认为写成上面那种形式有悖于人的思维习惯,不利于代码的阅读和理解。

个人在这里只是做个提醒,大家见仁见智吧。


三、int变量与0比较

假设整型变量的名字为value,它与零值比较的标准if 语句如下:

if (value == 0)
if (value != 0)

个人不太赞成如下这种写法
if (value) // 会让人误解 value 是布尔变量
if (!value)

四、float 变量与“零值”进行比较(下面引自《c++ -if语句比较注意》)

无论是float 还是double 类型的变量,都有精度限制,都不可以用“==”或“!=”与任何数字比较。

应该设法转化成“>=”或“<=”形式。


假设浮点变量的名字为x,应当将

if (x == 0.0)         // 隐含错误的比较
转化为
if ((x>=-EPSINON) && (x<=EPSINON))    //EPSINON 是允许的误差(即精度)

标准答案示例:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)

如下是错误的写法。
if (x == 0.0) 
if (x != 0.0) 


五、if语句中的指针型变量

标准写法

if (p == NULL)
if (p != NULL)

如下写法均属不良风格。
if (p == 0)        // 容易让人误解p是整型变量
if (p != 0) 
if (p)                // 容易让人误解p是bool型变量
if (!p)


六、逻辑顺序问题

        上面提到的那些,大部分都没有统一的说法,更多的时候是个人习惯的问题,个人在这里提出只是作为一个总结。但是关于if语句,个人强烈反对把复杂难以理解的语句放到if的条件里面,这样会严重影响代码的阅读。

        除了语法和习惯的问题,关于if/else语句最重要的其实是逻辑的问题。建议大家看一下:

《化简复杂逻辑,编写紧凑的if条件语句》

《化简复杂逻辑,编写紧凑的if条件语句(二):依据if子句顺序化简条件》

《化简复杂逻辑,编写紧凑的if条件语句(三):确定最简的if子句顺序》



欢迎关注我的个人网站《程序员网》 
->https://www.itmangoto.cn/


IT从业人员需要及时关注技术动态,但是互联网的内容却过于离散,好东西往往隐藏得很深。现在可以在微信公众号里面
搜索关注“小鱼儿的IT技术分享”,订阅我为大家每天汇总的IT技术信息。欢迎大家关注!




  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
if-else语句是一种条件控制结构,用于根据给定条件的真假执行不同的代码块。以下是一些if-else语句注意事项: 1. 确保条件表达式的准确性:条件表达式应该是能够返回布尔值(True或False)的表达式。请仔细检查条件是否正确地评估为真或假。 2. 注意代码块的缩进:在大多数编程语言中,if和else语句后面的代码块需要缩进,以表示它们属于对应的条件分支。请确保正确缩进代码块,否则会导致逻辑错误。 3. 注意if和else的顺序:if-else语句按照自上而下的顺序评估条件。如果某个条件为真,那么对应的代码块将被执行,而其他代码块将被跳过。因此,请确保将最常见和最具体的条件放在前面。 4. 使用适当的比较运算符:条件表达式通常涉及比较运算符(例如==、!=、>、<等)。请确保使用适当的比较运算符,并考虑数据类型和数值范围,以避免错误。 5. 考虑使用嵌套的if-else语句:如果需要多个条件判断,可以使用嵌套的if-else语句。在这种情况下,要注意正确缩进和逻辑顺序。 6. 考虑使用if-elif-else结构:如果存在多个互斥的条件,可以使用if-elif-else结构。elif是else if的缩写,可以用于处理多个互斥的条件分支。 7. 考虑使用switch语句(适用于支持该特性的编程语言):在一些编程语言中,可以使用switch语句替代多个if-else语句。请查阅相应编程语言的文档,了解如何正确使用switch语句。 这些是使用if-else语句时需要注意的一些事项。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值