ABAP/MOVE-CORRESPONDING
ある構造からある構造へ、同一名称の項目を探し値を代入(MOVE)するABAP命令。
概要 †
オールドタイプのABAPerが大好きな命令だが、SAPが推奨しない命令となった。
理由は、「代入すべき、同一名称を持つ項目を探す」というアクションがパフォーマンスを低下させることと対象が明示的でないことが挙げられる。
「じゃあ、この命令を使えば一行で済むのに、代入の命令を項目の数だけ書き出すのが正しいのか?」という問いがある。
これは一見正しいかのように感じられ、一般的にはソースが長くなればなるほどバグが多くなるため使うのが正しいと思っている人間もいるが、否である。
なぜなら・・・
- 構造Aと構造Bに同一項目名称を、そんなにたくさん用意するか?
Yesの場合、プログラム設計は適切か?多くの場合はNoかと思う。 - 構造Aと構造Bに同一項目名称を複数用意するくらいなら、共通化しないか?
部分的にでも同一の型*1にし、構造A = 構造Bと記述した方が明示的かつ保守性に長ける。
また、前者も重要ではあるが、後者の「明示的でないこと」について、保守性や可読性が低下することがより重要かと考える。
用法 †
確かに、受注から出荷をBAPIで生成するなど先行→後続というデータの流れにおいては利用したくなる気持ちはわかる。
基本的にはfromとtoで共通の構造体を使用することでイコール代入をすれば使わずにすむのだが、共通化したらしたで足を引っ張られる部分はあるし、項目の並び順も考慮しなければならないなどの制約はあるため、圧倒的にコードの総量が減る或いは仕様変更の難易度が変わる等の事情があれば。
サンプル †
MOVE-CORRESPONDING L_WA_FROM TO L_WA_TO.
その他 †
関連する命令は、ADD-CORRESPONDING、DIVIDE-CORRESPONDING、MULTIPLY-CORRESPONDING、SUBTRACT-CORRESPONDINGなど。
明示的でないという一点の理由だけで、あまりCORRESPONDING系の命令は好きじゃない。
コメントはありません。 Comments/ABAP/MOVE-CORRESPONDING?