• ABAP——编码规范


    转载:ABAP的编码规范

    1.大写与小写
    ABAP是一种大小写不敏感的语言。这自然会引起一个问题:使用大写还是小写?SAP给出的ABAP编辑器为我们提供了4种选项:

    (全部)大写

    (全部)小写

    (关键字)大写

    (关键字)小写

    建议选择(关键字)大写,让代码的其余部分保持小写,这么做的好处如下:

    (一)阅读大写字母组成的文本比阅读小写字母组成的文本要难。

    (二)程序的读者通常会对关键字极为熟悉(即使不熟悉,也有文档可看),而其他人可能对写出的非关键字不太可能熟悉。这两个理由使得,相比关键字,我们更需要让代码的非关键字保持良好的可读性。因此,非关键字的小写是一种必然的选择。在此基础上,让关键字保持大写,可以帮助我们区分关键字和非关键字。当然,由于关键字高亮的功能的存在,也可以不通过大小写区别它们,所以(全部)小写同样是一种可行的选项,部分SAP标准代码也是这样的风格。

    2.缩进
    SE38的代码编辑器提供了自动缩进的功能,别忘了点击“格式优化”(Pretty Printer),所有人的代码会得到同样的缩进...然后再根据个人喜好进行微调。

    3.表达式vs关键字
    ABAP是一门包含有大量关键字的语言。SAP似乎意识到了关键字过多带来的不便,在尝试着在近期的更新中引入更多表达式的写法。

    "实例化对象
     DATA(e_receiver) = NEW event_receiver( )."推荐的写法
     DATA e_receiver TYPE REF TO event_receiver. "不推荐的写法
     CREATE OBJECT e_receiver.
     
    *调用方法(可以看到,传统的写法居然要5行...)
    val = object->method( parameter = a ) "建议的写法
     
    CALL METHOD object->method  "不建议的写法
        EXPORTING
           parameter = a
        RECIEVING
           return    = val.
     
    *访问内表
    SELECT * INTO TABLE @DATA(itab) FROM sflight
      UP TO 10 ROWS ORDER BY carrid.
     
    TRY.
        DATA(ls) = itab[ 2 ].   "推荐的写法
      CATCH cx_sy_itab_line_not_found.
     
    ENDTRY.
     
    DATA ls TYPE sflight.
    READ itab INTO ls INDEX 2.  "不推荐的写法
    IF sy-subrc <> 0.
     
    ENDIF.

    表达式的写法比关键字更加简洁、可读,推荐尽量使用表达式代替关键字,比如:Open SQL语句抽取字段尽量竖排,方便查看

    SELECT  carrid
            connid
            fldate
            seatsocc
            seatsmax
    FROM    sflight
    INTO TABLE sflight_tab
    WHERE seatsmax < sflight~seatsocc.

    4.命名规则      

    ABAP程序通常使用一系列前缀来为变量命名,比如:

    LT_ = Local internal table

    LS_ = Local structure(work area)

    LR_ = Local reference

    GT_ = Global internal table

    GS_ = Global structure(work_area)

    GR_ = Global reference

    这样做是有好处的,一方面,通常的ABAP编辑器不具备自动提示类型的功能,合理前缀可以降低阅读代码的心智负担;另一方面,如上一节所述,如果为变量取一个和数据类型/数据库字段完全相同的名字,会在某些情况下产生意外的混淆(当然这个naming convention各个项目有所不同)。

    比如:

    DATA s1 LIKE sflight.

    DATA s2 TYPE sflight.

    "以上这段代码会声明两个相同的结构s1, s2

    DATA sflight TYPE i.

    DATA s1 LIKE sflight.

    DATA s2 TYPE sflight.

    "如果声明过一个名为sflight的i类型变量,则使用like的语句会声明一个i类型的s1,使用type的语句会声明一个有着sflight行类型的结构s2..

    但是前缀的滥用也会导致很多问题,合理的ABAP代码中应该尽量避免多余的变量名前缀。

    5.单行长度 

    有种观点认为,单行的代码长度不应超过72个字符。大体上,对于ABAP代码而言,这么做没什么不好。

     如图,80个字符已经稍稍超出了编辑器核心区域的边界(虽然远未达到编辑器支持的最大长度)。如果只是打开单个编辑器窗口的话,这种长度还可以接受,但如果要并排打开2个窗口,一部分代码也许会无法直接显示。

    此外,在SAP自身的代码比较工具中,过长的单行内容是无法直接展示的:

     这种情况下,需要点击工具栏中的按钮换页,不利于阅读。如果能有意限制单行代码的长度,就可以避免处于这种不利的情况。

    6.不定义带表头的内表      

    ABAP提供了关键字with header line用来创建代表头的内表。      

    DATA: LT_SFLIGHT TYPE STANDARD TABLE OF SFLIGHT WITH HEADER LINE.      

    但是用同一个名字代表两样不同的东西本来就是很不好的事情,容易混淆、为了让代码有更好的可读性,最好放弃带表头的内表。

    7.主程序表头注释

    Copyright 2018 Wiwi Dongguan *
    * All Rights Reserved *
    *----------------------------------------------------------------------*
    * Program Name : ZXXXXX *
    * Project : WiwiSAP Implementation Project *
    * Program Title: *
    * Created by : DEVXX *
    * Created on : 2019/06/18 *
    * Version : 1.0 *
    * Function Description: *
    * *
    *----------------------------------------------------------------------*
    * Data Table List: *
    *如维护操作的表,数据计算来源等表
    *----------------------------------------------------------------------*
    * Refrence Table List: *
    *如联络处描叙,输入帮助等用到的表
    *----------------------------------------------------------------------*
    * Modification Log: *
    ************************************************************************
    * Date                 Programmer  Correction Number DesingDoc Number *
    * YYYY/MM/DD    XXXXXXXX   DEVK9nnnnnn *
    ************************************************************************

    注意:版本修改信息中设计文档版本有对应的文档则必须填写。

    8.包含及子程序命名规则       

    对于复杂的程序,可以将其编写为多个INCLUDE,不同作用的代码放在不同的INCLUDE 中,各个INCLUDE 的名称按下表编写

     其中:ZXXXX 为程序名。事件代码必须遵循编写顺序

    Initialization
    At Selection-Screen OutPut
    At Selection-Screen
    START-OF-Selection
    At Select-Screen on XXXX
    At Select-Screen on value request for XXXXX
    At Select-Screen on help request for XXXXX
    共用函数的格式
    ************************************************************************
    * Function Name : XXXXX *
    * Created by : DEVXX *
    * Created on : 2018/12/18 *
    * Function Description: *
    * *
    *----------------------------------------------------------------------*
    *参数说明 *
    * *
    *----------------------------------------------------------------------*
    * Modification Log: *
    ************************************************************************
    * Date Programmer Description *
    * YYYY/MM/DD XXXXXXXX *
    子函数的格式
    ************************************************************************
    * Form Name : XXXXX *
    * Created by : DEVXX *
    * Created on : 2019/06/18 *
    * Form Description: *
    * *
    *----------------------------------------------------------------------*
    *参数说明 *
    * *
    *----------------------------------------------------------------------*
    * Modification Log: *
    ************************************************************************
    * Date Programmer Description *
    * YYYY/MM/DD XXXXXXXX *
    ************************************************************************

    9.变量命名规则

    Type Name:T_

    Internal tables (global): gt_

    Internal Tables (Local):it_

    工作区(structure): wa_

    全局变量: g_

    局部变量: l_

    Ranges = r_

    Selection screen parameter: p_

    select-options : s_

    函数参数命名规则:

    IMPORTING parameters IM_<parameter name>

    EXPORTING parameters EX_<parameter name>

    CHANGING parameters CH_<parameter name>

    返回参数 RE_<result>

    变量定义顺序

    ************************************************************************
    *DATA DECLARATION *
    ************************************************************************
    *----------------------------------------------------------------------*
    * CONSTANTS *
    *----------------------------------------------------------------------*
    CONSTANTS:
    C_TOTAL(8) TYPE C VALUE 'WA_TOTAL'.
    *----------------------------------------------------------------------*
    *TABLES *
    *----------------------------------------------------------------------*
    TABLES: AFKO, "Order header data PP orders
    AFPO, "Order item
    JEST, "Object status
    RESB, "Reservation/Dependent Requirements
    AUFK, "Order master data
    MAKT, "Material Descriptions
    TJ02T. "System status texts
    *----------------------------------------------------------------------*
    * TYPES OR TYPE-POOLS *
    *----------------------------------------------------------------------*
    TYPES: BEGIN OF T_AUFK,
    AUFNR LIKE AUFK-AUFNR, "Order number
    AUART LIKE AUFK-AUART, "Order type
    LOEKZ LIKE AUFK-LOEKZ, "Deletion flag
    OBJNR LIKE AUFK-OBJNR, "Object number
    END OF T_AUFK.
    *----------------------------------------------------------------------*
    * INTERNAL TABLES AND WORK AREAS *
    *----------------------------------------------------------------------*
    DATA: I_AUFK TYPE T_AUFK OCCURS 0,
    WA_AUFK TYPE T_AUFK.
    *----------------------------------------------------------------------*
    * GLOBAL VARIABLES *
    *----------------------------------------------------------------------*
    DATA: G_FLAG.

    10.屏幕编号规则

    选择屏幕编号范围:1000-1999

    录入屏幕编号范围:1-999

    子屏幕编号范围:3000-4999

    注释规则

    任何全局变量要简单解释作用或使用地方任何函数超过30 行的函数或form 必须在关键位置加注释,解释操作意图

    消息提示使用规则

    消息请使用ZDEV 的标准的消息文本;

    如果标准消息文本中没有的请找管理员增加,自己不得维护;

    注释里的创建日期和修改日期必须认真填写为实际日期

    Status 命名规则为:Menu+屏幕号,共用的为Menu+Main

    木叶飞舞之处,火亦生生不息
  • 相关阅读:
    Python selenium —— 父子、兄弟、相邻节点定位方式详解
    Python爬虫入门教程石家庄链家租房数据抓取
    自动化测试 selenium 环境搭建
    python3爬虫(find_all用法等)
    python网络爬虫抓取动态网页并将数据存入数据库MySQL
    mvc设计模式和mvc框架的区别
    python正则表达式贪婪与非贪婪模式
    python3获取一个网页特定内容
    使用exceljs 前端导出表格并自定义样式和超链接
    如何在devtools中找到未使用 JavaScript 和 CSS 代码
  • 原文地址:https://www.cnblogs.com/StephenAmell/p/12490438.html
Copyright © 2020-2023  润新知