条件分岐と計算式
19.1 条件分岐と計算式
条件分岐、計算式について以下の流れで説明します。
- 条件分岐
- 計算式
代入
条件分岐
「もし○○が△△だった場合は、□□します」というように、条件に応じて処理を分けたい場合、 IF文とCASE文を使用して条件に応じた処理を記述します。
ここでは条件分岐の命令について以下の流れで説明します。
- IF文
- CASE文
条件分岐(IF文)
IF文の構文です。
論理式は、上から順にチェックされていき、どの論理式にも合致しない場合は、ELSE内の処理
(上記だと[処理4])が実行されます。
例えば、ある値が赤、青、黄、黒のいずれかをIF文を使って判断する例を次のページの参考コードで示します。
その例では、結果が「BLUE」として表示されます。
サンプルコード
REPORT Z_SAMPLE195_IF.
" 色名(サンプル用の定数)
CONSTANTS:
LC_RED TYPE C LENGTH 3 VALUE 'RED',
LC_BLUE TYPE C LENGTH 4 VALUE 'BLUE',
LC_YELLOW TYPE C LENGTH 6 VALUE 'YELLOW'.
DATA:
LV_COLOR TYPE STRING, " 判定対象
LV_RESULT TYPE STRING. " 判定結果
" 今回は BLUE を判定する例
LV_COLOR = LC_BLUE.
IF LV_COLOR = LC_RED.
LV_RESULT = LC_RED.
ELSEIF LV_COLOR = LC_BLUE.
LV_RESULT = LC_BLUE.
ELSEIF LV_COLOR = LC_YELLOW.
LV_RESULT = LC_YELLOW.
ELSE.
LV_RESULT = 'BLACK'.
ENDIF.
WRITE: / |RESULT: { LV_RESULT }|.
結果
条件分岐(CASE文)
CASE文の構文です。
変数の値と比較し、同一だった場合にWHEN以下の処理を行います。
変数の値と同一のものがない場合は、WHEN OTHERS 以下の処理を行います。
※IF文と同様に上から順にチェックされていくことに注意してください。
CASE文を使ったコーディング例を次のページで示します。
例では、CASE-1に「RED」と表示されます。
サンプルコード
REPORT Z_SAMPLE195_CASE.
" 色名(サンプル用の定数)
CONSTANTS:
LC_RED TYPE C LENGTH 3 VALUE 'RED',
LC_BLUE TYPE C LENGTH 4 VALUE 'BLUE',
LC_YELLOW TYPE C LENGTH 6 VALUE 'YELLOW'.
DATA:
LV_COLOR TYPE STRING, " 判定対象
LV_RESULT TYPE STRING. " 判定結果
" 今回は RED を判定する例
LV_COLOR = LC_RED.
CASE LV_COLOR.
WHEN LC_RED.
LV_RESULT = LC_RED.
WHEN LC_BLUE.
LV_RESULT = LC_BLUE.
WHEN LC_YELLOW.
LV_RESULT = LC_YELLOW.
WHEN OTHERS.
LV_RESULT = 'BLACK'.
ENDCASE.
WRITE: / |CASE-1: { LV_RESULT }|.
結果
計算式
ここでは、四則演算について説明します。
各種計算方法
算術計算をする場合、ABAPでは、以下のような複数の記述にて算術計算ができます。
四則演算は、次のページのように別の書き方も可能です。
サンプルコード
EPORT Z_SAMPLE195_CALCULATE.
DATA:
LV_NUM10 TYPE I VALUE 10,
LV_NUM05 TYPE I VALUE 5,
LV_ADDITION TYPE I,
LV_SUBTRACT TYPE I,
LV_MULTIPLY TYPE I,
LV_DIVIDE TYPE I.
" 加算
LV_ADDITION = LV_NUM10 + LV_NUM05.
" 減算
LV_SUBTRACT = LV_NUM10 - LV_NUM05.
" 乗算
LV_MULTIPLY = LV_NUM10 * LV_NUM05.
" 除算
LV_DIVIDE = LV_NUM10 / LV_NUM05.
WRITE:
/ |ADDITION : { LV_ADDITION }|,
/ |SUBTRACT : { LV_SUBTRACT }|,
/ |MULTIPLY : { LV_MULTIPLY }|,
/ |DIVIDE : { LV_DIVIDE }|.
結果
サンプルコード2
REPORT Z_SAMPLE195_CALCULATE2.
DATA:
LV_NUMBER TYPE P DECIMALS 2 VALUE '1.23',
LV_ABS TYPE P DECIMALS 2,
LV_TRUNC TYPE P DECIMALS 2,
LV_FRAC TYPE P DECIMALS 2.
" 絶対値
LV_ABS = ABS( LV_NUMBER ).
" 整数部分(小数点以下を切り捨て)
LV_TRUNC = TRUNC( LV_NUMBER ).
" 小数部分(整数部分を除いた値)
LV_FRAC = FRAC( LV_NUMBER ).
WRITE:
/ |ABS : { LV_ABS }|,
/ |TRUNC : { LV_TRUNC }|,
/ |FRAC : { LV_FRAC }|.
結果