目前工作当中使用的编程语言是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. vim 加密(crypt)文本文档

    算法 vim7.3版本支持两种加密方式——PKzip算法(已知有缺陷的).Blowfish算法(从7.3版本开始支持).Blowfish2算法(从7.4.399版本开始支持)而vim -x 默认采用P ...

  2. sync.Pool的使用

    一定要搞明白sync.Pool的正确用法,避免出现以下问题: kline := this.pool.Get() defer this.pool.Put(kline) kline.UnMarshal(d ...

  3. RSA 格式 - 转载

    转载自 RSA(三) 密钥的格式 https://www.shangyang.me/2017/05/24/encrypt-rsa-keyformat/#%E5%89%8D%E8%A8%80 PEM 和 ...

  4. vue 使用canvas仿芝麻分信用表

    如图所示: 画布组件:dashboard.vue <template> <div> <canvas ref="canvas" v-if="c ...

  5. git 提交本地工程

    1> 进入github 建立repository 2> 得到git master 地址 3> 得到进入本地工程目录 右键->git bash here 4>执行 以下命令 ...

  6. 一张图看懂AI、机器学习和深度学习的区别

    AI(人工智能)是未来,是科幻小说,是我们日常生活的一部分.所有论断都是正确的,只是要看你所谈到的AI到底是什么. 例如,当谷歌DeepMind开发的AlphaGo程序打败韩国职业围棋高手Lee Se ...

  7. Pycharm桌面图标(Fedora)

    1.解压pycharm压缩包至/usr/local/pycharm文件夹下 2.在/usr/share/applications/目录下,新建Pycharm.desktop文件,内容如下: [Desk ...

  8. EBS查询在线用户

    转自:https://www.cnblogs.com/benio/archive/2011/03/10/1979417.html SELECT u.user_name, app.application ...

  9. LVS详细介绍以及遇到的坑

    LVS详细介绍以及遇到的坑 一,概述 本文介绍了我搭建LVS集群的步骤,并且在使用LVS(Linux Virtual Server)过程中遇到的问题和坑, 二,LVS简单介绍 大家都知道,LVS中文意 ...

  10. vue 项目 使用sass,node-sass 安装方法及cnpm下如何安装node sass

    内容为转载,方便用时查阅,原文地址: https://www.cnblogs.com/crazycode2/p/6535105.html 1,使用save会在package.json中自动添加. 1 ...