当前位置: 首页 > news >正文

SAP-ABAP:条件判断与循环控制语句(7篇)第一篇:零基础入门:一文搞懂if-else条件判断核心逻辑

条件判断与循环控制语句7篇第一篇零基础入门一文搞懂if-else条件判断核心逻辑在生活中我们几乎每时每刻都在做判断如果下雨就带伞否则不带。如果饿了就吃饭如果很饿就吃两碗否则只吃一碗。这些“如果…就…否则…”的逻辑在编程中就是条件判断。ABAP中的IF-ELSEIF-ELSE语句正是实现这种分支逻辑的核心工具。本文从生活场景类比切入系统拆解条件判断的语法规则、执行优先级并通过大量入门案例和常见错误分析帮助新手彻底掌握IF语句避开那些“坑”。一、为什么需要条件判断程序之所以“智能”是因为它能根据不同的输入或状态执行不同的代码路径。没有条件判断程序只能像流水线一样从头走到尾毫无灵活性。例如根据用户输入的月份输出该月的天数。根据采购订单金额决定是否需要上级审批。根据库存数量决定是否触发补货提醒。这些场景的核心都是“如果满足某个条件就做A否则做B。”二、IF语句的基本结构ABAP中的IF语句由以下几个关键字组成关键字作用IF开始一个条件判断后面跟一个逻辑表达式结果为真或假。ELSEIF可选用于增加额外的条件分支可以有多个。ELSE可选用于处理所有不满足上面条件的情况。ENDIF必须标记条件判断的结束。2.1 最简单的IF不带ELSEIF condition. 当 condition 为真时执行的代码 ENDIF.示例如果年龄大于等于18输出“成年”。DATA(lv_age) 20. IF lv_age 18. WRITE 成年. ENDIF.2.2IF-ELSE二选一IF condition. 条件为真时执行 ELSE. 条件为假时执行 ENDIF.示例判断成绩是否及格。DATA(lv_score) 55. IF lv_score 60. WRITE 及格. ELSE. WRITE 不及格. ENDIF.2.3IF-ELSEIF-ELSE多分支IF condition1. condition1 为真时执行 ELSEIF condition2. condition1 为假且 condition2 为真时执行 ELSEIF condition3. 前面的条件均为假且 condition3 为真时执行 ELSE. 所有条件均为假时执行 ENDIF.示例根据成绩输出等级。DATA(lv_score) 85. IF lv_score 90. WRITE 优秀. ELSEIF lv_score 80. WRITE 良好. ELSEIF lv_score 70. WRITE 中等. ELSEIF lv_score 60. WRITE 及格. ELSE. WRITE 不及格. ENDIF.三、执行优先级自上而下命中即止IF语句的执行规则非常明确从上到下依次判断每个IF或ELSEIF的条件。当遇到第一个为真的条件时立即执行其对应的代码块。执行完毕后直接跳到ENDIF之后不再判断后续的ELSEIF或ELSE。关键点ELSEIF不是独立判断它仅在前面所有条件都不成立时才会被考虑。反例误区lv_score 95. IF lv_score 60. WRITE 及格. ELSEIF lv_score 90. WRITE 优秀. ENDIF.输出结果是“及格”而不是“优秀”。因为lv_score 60为真执行后直接退出永远不会进入ELSEIF。正确的顺序应该把更严格的条件放在前面。四、条件表达式什么是“真”在IF后面的括号实际ABAP中不需要括号中我们需要写一个逻辑表达式。这个表达式的结果必须是布尔值真或假。ABAP中真任何非零、非空、非初始值具体取决于类型通常被视为真。但最规范的是使用系统提供的布尔变量abap_true和abap_false。假数值0、空字符串、初始值等。4.1 比较运算符运算符含义示例或EQ等于IF lv_num 10.或NE不等于IF lv_char A.或GT大于IF lv_date sy-datum.或LT小于IF lv_quantity 0.或GE大于等于IF lv_age 18.或LE小于等于IF lv_price 100.4.2 逻辑运算符用于连接多个条件运算符含义示例AND且所有条件必须同时为真IF lv_age 18 AND lv_age 60.OR或至少一个条件为真IF lv_status A OR lv_status B.NOT非取反IF NOT lv_flag IS INITIAL.4.3 字符串比较ABAP中字符串比较默认忽略尾部空格。如果需要精确比较可以使用CO、CA等模式运算符或STRLEN。IF lv_text ABAP. 如果 lv_text ABAP 尾部有空格仍然视为相等五、常见坑点与规避方法坑点1忘记写ENDIF现象激活时报错“ENDIF expected”。解决养成写完IF立即写ENDIF的好习惯然后再在中间填充代码。坑点2把赋值当成比较IF lv_flag X. 正确比较 IF lv_flag X. 如果将X赋值给lv_flag应该用 lv_flag X. 但这里不能写为 IF lv_flag X这是比较实际上ABAP中既用于赋值也用于比较但编译器会根据上下文区分。容易混淆的是在条件中误写单等号不ABAP中比较也用。所以这不是坑。真正的坑是IF lv_flag X. 比较正确 lv_flag X. 赋值正确没有混淆。但新手可能误以为比较需要用EQ而赋值用其实两者都可用。坑点3条件顺序不当导致逻辑错误前面已经举例严格条件应放在前面。坑点4对C类型字符串使用IS INITIAL的误解DATA lv_char(10) TYPE c. IF lv_char IS INITIAL. 结果为真因为C类型初始化为空格如果想检查是否为空字符串长度为0对C类型无法做到因为固定长度永远有内容空格。应使用STRING类型。坑点5浮点数比较的精度问题DATA: a TYPE f VALUE 0.1, b TYPE f VALUE 0.2, c TYPE f. c a b. IF c 0.3. 可能为假因为浮点精度误差解决使用P类型或比较时允许一个小的误差范围。六、实用示例合集6.1 判断年份是否为闰年DATA(lv_year) 2024. IF ( lv_year MOD 4 0 AND lv_year MOD 100 0 ) OR lv_year MOD 400 0. WRITE 闰年. ELSE. WRITE 平年. ENDIF.6.2 根据用户输入的折扣等级计算价格PARAMETERS: p_price TYPE p DECIMALS 2, p_level TYPE i. DATA(lv_final) p_price. IF p_level 1. lv_final p_price * 0.9. ELSEIF p_level 2. lv_final p_price * 0.8. ELSEIF p_level 3. lv_final p_price * 0.7. ELSE. MESSAGE 无效等级按原价 TYPE S. ENDIF. WRITE: 折后价格:, lv_final.6.3 嵌套IF示例判断物料是否需要补货DATA: lv_stock TYPE i VALUE 50, lv_reorder TYPE i VALUE 100, lv_max TYPE i VALUE 500. IF lv_stock lv_reorder. 低于补货点 IF lv_stock 0. WRITE 紧急库存为零立即补货. ELSE. WRITE 库存低于补货点建议补货。. ENDIF. ELSEIF lv_stock lv_max. WRITE 库存过高暂停采购。. ELSE. WRITE 库存正常。. ENDIF.七、总结语句用途注意事项IF ... ENDIF单一条件不要忘记ENDIFIF ... ELSE ... ENDIF二选一ELSE处理剩余所有情况IF ... ELSEIF ... ELSE ... ENDIF多分支严格条件放前注意命中即止IF语句是编程世界里的“红绿灯”控制着代码的流向。掌握了它你就具备了编写有逻辑的程序的基础能力。下一篇将进入进阶实战探讨多重条件嵌套与switch语句的选型对比。下篇预告进阶实战多重条件嵌套与switch语句的选型对比作者你的ABAP学习伙伴版本记录2026年5月 你在初学IF语句时是否遇到过“条件为真却没执行”的诡异情况欢迎留言分享。
http://www.rkmt.cn/news/1392454.html

相关文章:

  • SAP-ABAP:变量、常量、结构与内表声明(10篇博客合集) 第十篇:声明环节的常见问题排查:类型不匹配、内表溢出、结构组件缺失的解决方案
  • 2026佛山办公转椅厂家:办公转椅OEM厂家+外贸办公桌椅生产厂家+佛山总裁办公桌厂家优选 - 栗子测评
  • 小样本类增量学习:基于角度间隔的ILAR方法原理与复现实践
  • 2026年昆明企业AI全网推与短视频运营完全选购指南:从GEO优化到私域转化的本地化破局方案 - 年度推荐企业名录
  • JMeter工程化压测:从HTTP接口稳定性诊断到性能基线建设
  • BepInEx游戏模组框架:从零到一,成为你的游戏魔法师!
  • 告别ArcGIS依赖!手把手教你用QGIS+InVEST模型搞定流域土壤侵蚀评估
  • FanControl温控策略调校手册:从系统噪音到精准散热性能调优方案
  • 八年软件测试外包实战:从人力补充到质量伙伴的转型与运营体系构建
  • 通达信缠论分析自动化解决方案:为技术交易者打造的智能决策伙伴
  • vTeststudio图形化测试设计实战:零代码用Test Table搞定ECU自动化测试
  • 三步轻松转换B站缓存视频:告别格式限制的实用指南
  • 你买的 Claude,可能根本不是 Claude
  • 别再手动复制粘贴了!:2024最硬核AI工作流编排方案——支持自然语言定义、自动拓扑校验与故障自愈
  • 天虹提货券回收价格历史最高多少?历年行情与影响因素解析 - 京顺回收
  • 为敏捷开发团队设计基于Taotoken的大模型API管理与成本控制流程
  • 新手友好!从Level 1到18:手把手带你用Burp Suite通关XSS-Game靶场(附实战截图)
  • 北理工论文写作终极指南:BIThesis LaTeX模板完整教程
  • 2026郑州名包回收横向测评,添价收名包回收稳居第一综合实力过硬 - 薛定谔的梨花猫
  • 大连黄金回收优选长悦品牌诚信服务赢得市民广泛信赖 - 专业黄金回收
  • 物联网安全检测:基于采样与优化的机器学习高效训练方案
  • Uncle小说阅读器:打造桌面端全能数字书房
  • 用Intel RealSense T265和ROS Noetic实现机器人自主导航的第一步:位姿数据获取与可视化
  • 闭环神经调控系统:从癫痫治疗到智能神经调节的技术解析
  • 终极指南:5分钟掌握NGA论坛优化插件,让你的浏览体验提升300%
  • B站视频下载终极指南:3分钟掌握BilibiliDown完整使用技巧
  • Windows 11终极瘦身指南:3分钟免费恢复系统极速体验
  • SpecPathGNN:基于通路中心图神经网络的可解释生物网络分析
  • 【独家首发】DeepSeek R1-v2.3.7内核级熔断模块逆向解析:98.7%成功率背后的3个反直觉设计原则
  • BilibiliDown:三步轻松下载B站视频音频的终极免费工具