目前工作当中使用的编程语言是SAP平台的ABPA语言,出于好奇心,我想把之前用JAVA(用C++也写过,事实上,我每学一个新的语言,就会尝试去实现这个小程序)写过的计算一个正整数的因子的程序用ABAP写出来。JAVA的版本如下:

import java.util.ArrayList;

public class GetNumberFactors {
    private static int origin_n;
    private static ArrayList result_list = new ArrayList();
    public static ArrayList get_factor(int n, int x){
        origin_n = n;
        judge(n, x);
        return result_list;
    }
    public static ArrayList get_factor(int n){
        return get_factor(n, 2);
    }
    public static void judge(int n, int x){
        if (n % x == 0){
            result_list.add(x);
            n = n / x;
            judge(n, x);
        }else {
            if (x < n){
                x = x + 1;
                judge(n, x);
            }
        }
    }
}

这个小程序用的编程要素主要有三个:面向对象、动态数组、递归。只要是有这三个要素的编程语言应该都能实现这个小程序。ABAP作为在SAP平台上用来编写报表查询程序或者和用户交互的数据库程序的一种语言,业务当中是绝对不会遇到需要编写类似上面这样的程序的情况的。大概也是因为这个原因,ABAP一直听低调的,基本看不到有人用ABAP编写一些有趣的东西的。由于我是财务人出身,半路开始学习编程语言,所以好奇心有些过剩,因此,就冒出了用ABAP编写上面这样的程序的想法。代码如下:

class ZM_GET_NUMBER_FACTORS definition
  public
  abstract
  final.
    "一个虚的final类,也不能实例化,也不能继承
public section.

  class-methods GET_FACTOR "公用类方法
    importing "参数
      value(N) type I
      value(X) type I default
    returning "返回值
      value(RETURN_RESULT) type /BA1/F4_TAB_INT_NUMBERS .
protected section.
private section.

  . "用来把原始的n存下来,目前没用什么用
  class-data RESULT_LIST type /BA1/F4_TAB_INT_NUMBERS . "用来接受结果
    "/BA1/F4_TAB_INT_NUMBERS是sap内部定义好的一个内表,可以作为I型array,也可以自定义一个
  class-methods JUDGE "私用方法,用来做递归计算
    importing
      value(N) type I
      value(X) type I .
ENDCLASS.

CLASS ZM_GET_NUMBER_FACTORS IMPLEMENTATION.

  METHOD get_factor.
    origin_n = n.
    .
    return_result = result_list.
  ENDMETHOD.

  METHOD judge.

    DATA result_list_line LIKE LINE OF result_list.

    .
      MOVE x TO result_list_line.
      APPEND result_list_line TO result_list.
      n = n / x.
      CALL METHOD judge EXPORTING n = n x = x.
    else.
      IF x le n.
        add  to x.
        CALL METHOD judge EXPORTING n = n x = x.
      ENDIF.
    ENDIF.

  ENDMETHOD.
ENDCLASS.

ABAP写出来看上去要长好多,一个原因是因为ABAP有类定义和类实现两个部分,并且语法类似VB,所以写出来比较多,但实际上,上面的代码没有比JAVA麻烦。可以看到,ABAP原理也可以递归的呢,真是个好语言。不过能用在什么实际场合呢?

调用上面的ABAP类很简单,甚至比JAVA还用简单:

 ) INTO data(get_result).
    "1000里的因子,应该有三个2和三个5.
  WRITE / get_result.
ENDLOOP.

ABAP其实也是挺好的语言的更多相关文章

  1. ABAP OO的八大理由

    原贴地址:http://scnblogs.techweb.com.cn/abaplv/archives/127.html 几年前SAP BASIS 4.6为ABAP扩展了OO功能,这是很多传统的ABA ...

  2. 半个月使用rust语言的体验

    从第一次下载rust语言的编译器到今天刚好第14天. 简单说一下对这个语言的感觉吧. 一.性能 把以前用java写的一个中文地址切分的算法,用rust重新实现了一下(https://github.co ...

  3. C语言|博客作业11

    问题 回答 这个作业属于哪个课程 C语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/10127 我在 ...

  4. 在Spring中使用脚本

    Spring支持3中不同的脚本语言(看来支持地还挺多的嘛):JRuby.Groovy和BeanShell. 这三个都是java社区的脚本语言(反正到目前为止我一个都没用过,可见我有多挫). JRuby ...

  5. 字段符号FIELD-SYMBOLS

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. 【DataStructure In Python】Python模拟二叉树

    使用Python模拟二叉树的基本操作,感觉写起来很别扭.最近做编译的优化,觉得拓扑排序这种东西比较强多.近期刷ACM,发现STL不会用实在太伤了.决定花点儿时间学习一下STL.Boost其实也很强大. ...

  7. 为什么选择Typescript

    上一节,我简单介绍了Typescript,并将Typescript和JavaScript进行了对比,有些网友提出了一些疑问,可能有些网友对于这个Typescript还不是特别的熟悉,这节,我做一些演示 ...

  8. SAP中的一些简称及简要介绍

    SAP-(System Applications and Products) 基础部分: R/3系统内核.数据库.支持各类平台的接口.ABAP(Advanced Business Applicatio ...

  9. 日志收集之nxlog

    一,软件介绍 nxlog 是用 C 语言写的一个开源日志收集处理软件,它是一个模块化.多线程.高性能的日志管理解决方案,支持多平台.可以处理来自许多不同来源的大量事件日志.支持的日志处理类型包括重写, ...

随机推荐

  1. UTC,BJT时间转换-python

    #UTC,BJT Conversion.py #接收一个BJT时间 bjt = eval(input("输入时间")) #转换 utc = bjt + 2400 - 800 if ...

  2. Centos中安装gitlab

    安装依赖: sudo yum install curl openssh-server openssh-clients postfix cronie sudo service postfix start ...

  3. 个人 git-hub使用方法

    注册码云 安装git hub git init here         创建本地仓库(repository),将会在文件夹下创建一个 .git 文件夹,.git 文件夹里存储了所有的版本信息.标记等 ...

  4. 2050 Programming Competition

    http://2050.acmclub.cn/contests/contest_show.php?cid=3 开场白 Time Limit: 2000/1000 MS (Java/Others)    ...

  5. rviz初接触2.0

    用rviz之前需要安装arbotix 在catkin_ws/src中 git clone https://github.com/vanadiumlabs/arbotix_ros.git 回到catki ...

  6. [C++]_ELVE_Windows下QT5.12连接MySql8.0解决方案

    #0x01 准备 1)要保证QT和MySQL都是一样的位数,我的就是都安装的64位. 2)安装Qt5.12,这里主要提一点,在安装时候,有个选择插件那块,尽量都选上,里面有个database选项,记得 ...

  7. Thing in java 第四章,控制执行流程,练习题答案

    /** * Created by Sandy.Liu on 2018/7/19. * Thinking in java, version 4, chapter 4, practice 1 * Writ ...

  8. SQL列子 转载

  9. Charles断点调试

  10. delphi 调用QQ邮箱发送邮件

    procedure TForm1.FormCreate(Sender: TObject); begin try IdSMTP1.AuthenticationType := atLogin; IdSMT ...