目前工作当中使用的编程语言是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. 【OO学习】OO第二单元作业总结

    OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...

  2. 《DSP using MATLAB》Problem 7.14

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  3. python,验证码生成

    <pre>import string import random from PIL import Image from PIL import ImageDraw from PIL impo ...

  4. 查看python的OpenCV版本

    安装"opencv" pip install opencv-python查看版本 import cv2 cv2.__version__

  5. zabbix监测图形界面显示方框乱码解决方法

    思路如下:用Windows下中文字体进行替换,修改配置文件即可 详细步骤如下: 1.在Windows的控制面板里的字体中,选择一种中文字体,将该字体文件复制到桌面.例如,我选择了宋体 常规字体,复制到 ...

  6. C# EnumHelper Enum的值,Description,ToString()的相互转换

    首先定义枚举类型,如下: /// <summary> /// 板块 /// </summary> public enum Plate {         [Descriptio ...

  7. Docker系列(四)Centos6.5 搭建私人镜像仓库 v2

    .下载.运行registry 下载registry镜像: $ docker pull hub.c.163.com/library/registry 这个下载的过程有点长,耐心等待一下.O(∩_∩)O哈 ...

  8. Filebeat工作过程(二)

    Filebeat简介 Filebeat是一个轻量级的收集日志和传输日志的工具(一直以为Filebeat是存储数据,并不是的它只是做一个收集传输功能):Filebeat安装在每一个你想要收集日志的服务器 ...

  9. day04 迭代器&生成器&装饰器

    目录   1.迭代器 2.生成器 3.推导式 4.匿名函数 5.内置函数 6.递归 7.闭包 8.装饰器 一.迭代器 特点: 1. 省内存 2. 只能向前. 不能反复 3. 惰性机制 让不同的数据类型 ...

  10. myEclipse+Spring boot+Hbuilder+jwt Token+mongoDB+企业微信H5开发

    企业微信应用的H5开发 1.参考文档:weUI:http://jqweui.com/ 2.企业微信接口文档:https://work.weixin.qq.com/api/doc#10029 3.百度地 ...