你真的会使用“布尔类型(Boolean)”么?
布尔型(Boolean)是一种数据的类型,这种类型只有两种值,即"真"与"假"。但你真的会使用么?
本文列举了布尔型的常见错误用法,以及在ABAP语言中使用布尔型的一些最佳实践。
1. 典型的误区
1.1 用布尔型声明状态
要点1: 布尔类型不是一种“类型代码”。布尔型是“逻辑运算”的结果类型。
在编程中,我们会直觉地将一些变量声明成布尔型,例如男性/女性, 国内/国外, 看起来这些状态有且仅有2个状态。
data(is_male) = abap_ture.
这是一个典型的误区, 因为使用布尔类型指示状态经常被一些特殊场景打脸(如下例),迫使我们不得不改用其它类型,例如枚举类型。
lv_gender = gs_gender=>male.
lv_gender = gs_gender=>female.
lv_gender = gs_gender=>unkonwn.
lv_gender = gs_gender=>not_applicable.
lv_gender = gs_gender=>answer_refused.
解决上述尴尬场景的方法很简单,使用状态变量标识“状态”,让布尔型回归“逻辑运算”,使用is_male( ), is_female( )等方法来返回逻辑运算结果。
METHOD is_male.IF mv_state = gs_gender=>male.rv_yes = abap_true.ELSE.rv_yes = abap_false.ENDIF.
ENDMETHOD.
1.2 在API中使用布尔型控制行为
要点2:遵循“单一职责”原则,一个API仅负责一个职责。
有时为了功能的扩展,我们经常尝试使用一些布尔类型的变量来控制一个API的行为,如下例:
METHOD dosomething." setup" ..." algorithm IF iv_flag = abap_true." path AELSE." path BENDIF." cleanup" ...
ENDMETHOD.
然而,这样的API设计会直接降低代码的可读性,同时强化了不同逻辑间的耦合关系。
调用方在使用API时,不得不去了解这个布尔型变量的含义,同时运维的同事在阅读代码时,也不得不去猜测这个布尔型变量的含义。
" what's the difference ?mo_document->create_file(filename, filecontent, true);mo_document->create_file(filename, filecontent, false);
如果一个API有两种职责,那么应当拆分成两个不同的API, 方法名称要有明确的含义.
" split to different APIsmo_document->create_file(filename, filecontent);mo_document->create_temp_file(filename, filecontent);
2. ABAP语言中,布尔类型的使用规范
2.1 使用ABAP_BOOL声明布尔变量
对于布尔类型的运行变量,不要使用generic的类型,而是要明确地使用abap_bool。
" bad
DATA lv_has_entries TYPE CHAR1. " good
DATA lv_has_entries type abap_bool.
2.2 使用ABAP_TRUE和ABAP_FALSE
逻辑表达式中,不要使用’X’ , ’ ', space来进行比较,而是更直接地使用ABAP_TRUE和ABAP_FALSE。
" bad
lv_has_entries = 'X'.IF lv_has_entries = ''.ENDIF.
" good
lv_has_entries = abap_true.IF has_entries = abap_false.ENDIF.
2.3使用XSDBOOL来赋值布尔类型
XSDBOOL( log_exp )会判断一个逻辑表达式,并直接返回一个type XSDBOOLEAN 类型的变量,无任何歧义, 并且更加简洁。
" bad
IF lt_lines IS INITIAL.lv_has_entries = abap_false.
ELSE.lv_has_entries = abap_true.
ENDIF.
" good
DATA(has_entries) = xsdbool( lt_lines IS NOT INITIAL ).
2.4 数据元素BOOLE_D和XFELD
如果是数据字典中需要使用到布尔类型,我们可遵循下面的原则:
- 如果xml/json转换为xsd时需要布尔类型,此时可用数据元素xsdboolean (data element)或xsdboolean (domain)
- 其他情况,在数据字典中则可直接使用数据元素boole_d或xfeld,或定义你自己的布尔类型数据元素
3 小结
本文介绍了布尔类型的两种典型“错误用法”,并以ABAP语言为例,介绍了布尔类型变量的一些最佳实践。
Functions are cheap, but bugs are not.
心怀敬畏,审慎地使用布尔类型,让程序更合理地存在。
本博客专注于技术分享,干货满满,持续更新。
欢迎关注❤️、点赞你真的会使用“布尔类型(Boolean)”么?相关推荐
- 布尔类型(boolean/Boolean)自动生成的get方法需要注意的小细节
idea会自动生成get/set方法的, 对于布尔类型,要非常注意生成的get方法,到底是is开头还是get开头. 先说结论: 1.Boolean类型,生成的get方法是get开头的(建议使用这个). ...
- Python基础教程:基本数据类型之布尔类型(Boolean)
计算机的本质就是计算,在其内部是0和1的比特位的变化,对外表现就是数据的变化.那么,计算机都能处理什么数据呢?本质上,数据都是以字节(Byte)存储的,表现上看,它们就是整数.浮点数和字符串等.Pyt ...
- 布尔类型(boolean)在oracle存储过程中支持情况
文章目录 1.布尔类型在oracle存储过程中支持情况 (1)布尔类型在过程.函数.包中的支持情况 (2)布尔类型与其他类型的兼容情况 (3)布尔类型作为cast函数参数情况 (4)存储过程case- ...
- 学习笔记(01):【中国PHP教育大牛高洛峰】亲授php教程-PHP布尔类型(boolean)...
立即学习:https://edu.csdn.net/course/play/914/13355?utm_source=blogtoedu boolean false int 0 float 0.0 或 ...
- mysql boolean类型_mysql 布尔类型
...对象的原型创建的函数: var myvar = new Boolean(1); myvar.constructor; 结果输出: function Boolean() { [native cod ...
- Python学习day02_数字类型 与 布尔类型 短路逻辑和运算符优先级
目录 一.数字类型 1.1 整数 integers 1.2 浮点数 floating point numbers 1.3 复数 complex numbers 1.5 数字运算 二.布尔类型 Bool ...
- 简自动类型提升,精度损失类型强制转换,常用转义字符,简单帮你回顾Java基本数据类型整形浮点型字符型布尔型Boolean及其运算规则
文章目录 整形 浮点型 字符型 布尔型boolean 自动类型提升 强制类型转换 注意 整形 bit是计算机中的最小存储单位. byte是计算机中的基本存储单元. 1MB=1024KB--1KB=10 ...
- MySQL 中的boolean/bool/tinyint(1)表示布尔类型
结论:boolean/bool/tinyint(1)都可以表示布尔类型,没有区别,使用1 和0 表示真和假 数据库设计的时候经常会用到只有真假两种情况的字段,在java中有boolean类型 在mys ...
- 布尔类型(boolean)常量与变量
boolean类型有两个常量值,true和false,在内存中占一位(不是一个字节),不可以使用0或非0整数替代true或false.Boolean类型用于判断逻辑条件,一般用于程序流程控制. boo ...
最新文章
- 吐血,经过4个小时,终于发现这个可以解决虚拟机ubuntu不能联网的问题
- The Linux device model
- fluorinefx C# 版的开源rtmp服务器
- 互掐盗播风云再起 三大视频网站存和解可能
- 终于把Redis场景设计搞清楚了,需要掌握的都在这了
- Composer php 类库商店
- 查看exe代码_【安全风险通告】Windows Type 1字体解析远程代码执行漏洞安全风险通告...
- 一个自定义的C#数据库操作基础类 SqlHelper
- netbeans写登录界面java_NetBeans 界面美化与字体设置
- 灵雀云 CTO 陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?
- html提示版本过低升级,IE8浏览器提示版本过低怎样升级呢?
- 最近抖音超火的60帧高清视频制作教程
- JAVA 循环结构while简单方法使用
- 学习笔记 - excel筛选分组
- oracle在运行存储的时候出现:同义词转换不再有效
- 2020 第一周工作总结:TAGE分支预测器算法
- Protobuf简单使用
- CSS HTML 实现虚线横线分隔线
- 如何使WooCommerce产品属性更加突出
- 谷歌Flan-T5诞生!1800种语言任务超大规模微调
热门文章