博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程规范之 if 语句的简单规则
阅读量:7098 次
发布时间:2019-06-28

本文共 2638 字,大约阅读时间需要 8 分钟。

原文:

 


 

代码应该是可阅读就像你的自然语言一样。我将从一个有趣的条件语句开始。

if ( !notOk != false ) {  userObj.ask();}

这样的表达式有点混乱,你永远不会使用自然语言构建这样的表达式。通过几个步骤,这个问题可以很简单解决:

( !notOk != false )( !notOk == true )( !notOk)

现在你应该重新想一个变量名啦:

isOk = !notOk

这个结果更适合阅读:

if ( isOk ) {  userObj.ask();}

if – if – if 层级树

删除一些注释和其他一些代码行后, 这是另一个典型的编码风格:

if ( A ) {  if ( !B ) {    if ( C ) {      f();    }  }}

一些聪明的程序员有较短的变体看起来像这一行:

if ( A ) if ( !B ) if ( C ) { f(); }

但使用逻辑运算符使代码更加可读的:

if ( A && !B && C ) { f(); }

如果你使用一些If层级语句重构一个函数, 可以尝试使用逻辑运算符来代替if层级树。但它应该有像自然语言一样的可读性。


 

小心而使用与(&)和或比较整数! 单个 & 在多数编程语言里是按位与(AND)操作符。

请看下面的例子:

ANSI-C:1 & 2 = 01 && 2 = 1 // true, 并且true 等于1JavaScript:1 & 2 = 01 && 2 = 2 // 第一个为 true, 所以返回第二个python:1 & 2 = 01 and 2 = 2 # 类似 JavaScript 的变体Java:1 & 2 = 01 && 2 // 使用int值不合法

if – true – false 赋值函数
function isNameSet(name) {  if (name===null || name==="") {    return false;  } else {    return true;}

有时这种结构隐藏在多行代码里面, 其它一些语言也可以找到类似的结构。 但下面这个简单的形式是更优雅的解决方案, 也很好理解:

function isNameSet(name) {  return !(name==null || name=="");}

但你只想看看名字的值是否已经声明。 很多语言,例如 Javascript (阅读  Matthias Reuter 写的  )能将值直接转换为真值(阅读  Douglas Crockford 写的   )。
function isNameSet(name) {  return name;}

在代码简无可减后,在判断中直接使用字符串值。

if (!name) {  name = window.prompt("What’s your name?");}

使用三元运算符(小心)
function genderStr(gender) {  if ( gender == "m" ) {    return "male";   } else {    return "female";  }}

程序也可以总结为:

function trueFalseStr(cond, trueStr, falseStr) {  if (cond) {    return trueStr;  } else {    return falseStr;  }}

或者你可以使用三元运算符(很多语言都有提供):

return (gender == "m")? "male" : "female"

对于 python(版本之后)可以用下面的语法替代 '?'运算符:

return "male" if gender == "m" else "female"

另一个可用的变体同样可读性很高:

return (gender=="m") and "male" or "female"

yoda 条件

我提供一篇旧文章帮助你理解什么是 . 下面的例子显示它们的不同之处:

if (value = 42) {   ...}

为了防止条件式赋值,通常把常量写在前面(这样会得到一个编译时警告):

if (42 = value) {   ...}

在  里, 我不得不收回关于代码可读性的建议。

 


 

利用if语句映射值

我在  看到一篇好文:

function norm(v) {  size = 7;  if ( v > 10 ) size = 6;  if ( v > 22 ) size = 5;  if ( v > 51 ) size = 4;  if ( v > 68 ) size = 3;  if ( v > 117 ) size = 2;  if ( v > 145 ) size = 1;  return size;}

其中有很多变体,下面这个以 Javascript 用三元操作符编写的程序可读性很差:

function norm(v) {  return return v > 145 ? 1 : v > 117 ? 2 : v > 68 ? 3 : v > 51 ? 4 : v > 22 ? 5 : v > 10 ? 6 : 7;}

下面这个 ANSI C 编写的计算。只有当值能够转换为布尔量时才能运行。

int norm(int x){  return 7 - (x>10) - (x>22) - (x>51) - (x>68) - (x>117) - (x>145);}

If语句能够使的条件限定更加可读(python):

def norm(v):    if   v< 11: size=7    elif v< 23: size=6    elif v< 52: size=5    elif v< 69: size=4    elif v

且现在变体可以写成 list 形式的(好吧,虽然可读性没有变好,但是很好玩):

def norm(v):    return 1+len([x for x in [11, 23, 52, 69, 118, 146] if v

转载于:https://www.cnblogs.com/code-style/p/3503787.html

你可能感兴趣的文章
ibatis example Class 使用
查看>>
android的触摸事件(转)
查看>>
springMVC与struts2的区别
查看>>
【DB2数据库在windows平台上的安装】
查看>>
课后作业-阅读任务-阅读笔记-4
查看>>
Yii2数据缓存详解
查看>>
02Scala-函数定义、流程控制、异常处理入门实战
查看>>
jquery,smarty,dedecms的插件思路------dede未实践
查看>>
php pdo错误:SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
查看>>
Team Foundation Server:CodeUI Automation Test 学习笔记4
查看>>
Linux 小知识翻译 - 「cron」
查看>>
docker 一些简略环境搭建及部分链接
查看>>
android studio获取SHA1
查看>>
怎么才能在windows使用git命令
查看>>
Sigar应用
查看>>
从单体架构到微服务的演变之路
查看>>
Valgrind内存泄露检测工具使用初步
查看>>
PDF 补丁丁 0.5.0.2657 发布
查看>>
vue之axios使用
查看>>
VBA批量删除excel表高级版
查看>>