iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
自我挑戰組

ABAP 基礎30天學習筆記系列 第 6

Day06_變數與資料型態

  • 分享至 

  • xImage
  •  

原文連結:Working With Basic Data Objects and Data Types

變數、常數與文字資料

最基礎的ABAP Data Object 可以視為會占用記憶體的實體資料,分成三種--變數, 常數與文字資料:

  • 變數(Variable):其值在程式執行時可被變更,由參數名稱(name)進行追縱,參數建立時必產生初始值。
  • 常數(Constants):與變數相似,但為固定值且執行時不可改變,一樣有參數名稱。
  • 文字資料(Literals):為固定值且執行時不可改變其值,沒有參數名稱,故只用來指派給Constants,或者作為Variable的初始值。

以上三種型式的資料都會有具有特定的資料型態(data type),且不會因程式執行而改變型態,接下來會一一介紹。

宣告變數(Variable)

DATA my_var TYPE string VALUE 'Hello World'.

變數透過關鍵字DATA來宣告,可以分成三個部分:

  • DATA:宣告變數名稱,英文字母、數字及下劃線皆可用來命名,不可以數字作為開頭。
  • TYPE:資料型別,如常見的內建型別 i (integer)以及string。
  • VALUE:變數初始值,可選項目。若沒有手動賦予初始值,將自動創建對應該資料型別的值。

資料型別的來源

*Built-in Type 內建型別
DATA my_var TYPE string.

*TYPES 本地自訂型別
TYPES my_type TYPE n length 10. "先建立自訂型別"
DATA my_variable TYPE my_type. "建立變數時使用自訂型別"

*ABAP Dictionary 全域型別
DATA airport TYPE /dmo/airport_id VALUE 'FRA'."從airport_id這張SAP範例報表撈出來的FRA型別"

在ABAP中,資料型別的建立方式可以分成以下三種:

  • Built-in Type:ABAP內建的13種資料型態,包含numeric、char以及二進位數值等。
  • TYPES Statement:ABAP允許在現有型別上建立自訂型別,並依所在位置可重複使用該類型,屬於local的資料型別。
  • ABAP Dictionary:ABAP Dictionary是ABAP特有的資料儲存形式,所儲存的資料型別可供gobal使用,並且帶有如label等包含語意的表頭訊息,用來實作UI時很有用。

宣告常數(Constants)

CONSTANTS my_con01 TYPE i VALUE 123456.
CONSTANTS my_con02 TYPE i VALUE IS INITIAL.

除了開頭是CONSTANTS外,其他結構與變數相同。惟初始值是強制性的,也可用VALUE IS INITIAL由系統直接賦予內定初始值。

文字資料(Literals)

out->write(  '12345' ).    "文字(Type C)"
out->write(  `12345` ).    "字串(Type STRING)"
out->write(  12345 ).    "數值 (Type I)"

為不可變更的匿名參數,基本上可以指派給變數,或在初始指派給常數,可分成:

  • 數值:通常為type I,用來記錄數值資料,若值過大會使用type P且不含小數。
  • 文字:type C,通常用來紀錄用來分類的文字資料,如TW。若含空格將不會被算入,文字包在''單引號內。
  • 字串:type STRING,通常用來記錄含有空白的句子等資料。文字包在``撇號內。

盡量避免:隱性的資料型別轉換

雖然ABAP需要定義資料型別,但當某些資料被賦值成別種類型時,系統仍會嘗試做資料轉換,請盡量避免以免造成以下狀況:

  • 額外耗時:像是將數字的字串賦值給整數等,將造成額外轉換時間。
  • runtime error:常見於不同型別的賦值。
  • 資料遺失:常見於同型別但不同長度的資料相互賦值,在範例中,超過4長度的文字將會移失。

清除資料

CLEAR <variable_name>

CLEAR會清除變數內的值,轉而變成初始值。不過要注意的是,CLEAR不是還原成一開始寫的初始值,而是直接還原成系統內定的型別初始值,如數字型別會變成0,字元型別則會變成空字串。

行內宣告變數

DATA(var01) = `Hellow World`.
DATA(var02) = 17.

除了在初始開頭進行變數宣告,也可以使用DATA()進行行內宣告,這種方式不須在程式開頭即宣告,在想要的地方宣告變數就好,通常為DATA(變數名稱) = 賦予的值,宣告時會依據賦予的值決定資料型態,如想建立文字型別,須要對該值加上``的識別符。另外,由於行內變數是局部變數,作用域會依宣告的地方而決定喔。

以上,明天要進入運算子跟條件判斷囉!


上一篇
Day05_ABAP的演進與語法特色+程式碼註解
下一篇
Day07_運算子 & 字串處理
系列文
ABAP 基礎30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言