目前工作当中使用的编程语言是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. 炸金花游戏(4)--炸金花AI基准测试评估

    前言: 本文将谈谈如何评估测试炸金花的AI, 其实这个也代表一类的问题, 德州扑克也是类似的解法. 本文将谈谈两种思路, 一种是基于基准AI对抗评估, 另一种是基于测试集(人工选定牌谱). 由于炸金花 ...

  2. 前端框架Angular、react、vue在github上的数据统计-2018-05

    2018年5月31日09:15:45 突然想看看几个前端框架的数量,然后就截图了如下数据: 分析: react关注.收藏.Fork都高vue一些, 但相差不大 angular比较奇葩,收藏只有二者一半 ...

  3. 取MySQL结果集的第一条记录

    select * FROM SU_supplycontract t WHERE supplyContractCode="CRM20180813002" limit 1;

  4. MYSQL常用命令2

    mysql 的dos命令行大全 2016年11月04日 16:03:59 阅读数:7987 1.连接Mysql(中文乱码在文章的最后) 格式: mysql -h主机地址 -u用户名 -p用户密码 1. ...

  5. JavaSE学习(二):进制转换—数据类型转换—Java运算符

    一.进制转换 1.1 其他进制转十进制(以十六进制为例): 十六进制范围:0-9, A-F对应数字10-15 2A7E(16)  =  14*16(0) +7*16(1) + 10*16(2)  + ...

  6. PY序

    Python实现机器学习依赖于两个类库——SciPy和scikit-learn 一)SciPy SciPy是数学运算的基本类库,在机器学习的过程中,主要运用NumPy.Matplotlib和Panda ...

  7. 第六章Django

    web应用程序 server端建立socket,不断地accept,当收到客户端连接信号之后,服务端向客户端发送数据,将html网页打开,read出来,并发送至客户端,这样客户端就可以浏览到网页的内容 ...

  8. JWT(JSON Web Token) 【转载】

    JWT(JSON Web Token) 什么叫JWTJSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. 一般来说,互联网用户认证是这样子的. 1.用户向服务器发送用户名和密码. ...

  9. VS快捷键大全(总结了一些记忆的口诀)(转载)

    相信.Net开发人员都想能够熟记各种VS快捷键以提高平时开发的效率,但苦于记忆能力太差而快捷键又特别多,特别烦,所以作罢! 下面我将简单介绍一下我记忆VS快捷键的一些方法,希望对大家有所帮助. 1.窗 ...

  10. HashMap解读

    个人理解,欢迎提出问题