Mustafa HAMIT

ABAP’ta Döngü Kullanımı (LOOP, DO, WHILE)

ABAP’ta veri işleme denince akla ilk gelen yapılardan biri döngülerdir. Özellikle internal table’lar ile çalışırken doğru döngü kullanımı, performansı doğrudan etkiler. Bu yazıda en çok kullanılan döngü türlerini ve aralarındaki farkları ele alıyoruz.


LOOP AT (En Çok Kullanılan)

Internal table üzerinde gezinmek için kullanılır.

Temel Kullanım

LOOP AT lt_table INTO ls_line.
  WRITE: / ls_line-matnr.
ENDLOOP.

ASSIGNING ile Kullanım (Daha Performanslı)

LOOP AT lt_table ASSIGNING FIELD-SYMBOL(<fs>).
  <fs>-matnr = '123'.
ENDLOOP.

Avantajı:

  • Kopyalama yapmaz
  • Direkt veri üzerinde işlem yapılır
  • Büyük tablolarda daha hızlıdır

WHERE ile Filtreleme

LOOP AT lt_table INTO ls_line
     WHERE matnr = '123'.
ENDLOOP.
  • Sadece gerekli kayıtlar üzerinde çalışır
  • Gereksiz loop’u azaltır

DO Döngüsü

Belirli sayıda tekrar için kullanılır.

DO 10 TIMES.
  WRITE: / sy-index.
ENDDO.
  • sy-index → kaçıncı turda olduğunu gösterir

WHILE Döngüsü

Koşul sağlandığı sürece çalışır.

DATA lv_count TYPE i VALUE 1.

WHILE lv_count <= 5.
  WRITE: / lv_count.
  lv_count = lv_count + 1.
ENDWHILE.

LOOP vs READ TABLE

Çok önemli bir fark:

Yanlış kullanım:

LOOP AT lt_table INTO ls_line.
  IF ls_line-matnr = '123'.
    " işlem
  ENDIF.
ENDLOOP.

Daha doğru yaklaşım:

READ TABLE lt_table INTO ls_line
     WITH KEY matnr = '123'.

Tek kayıt arıyorsan LOOP yerine READ TABLE kullanmak çok daha performanslıdır.


Nested LOOP (Performans Tuzağı)

LOOP AT lt_table1 INTO ls1.
  LOOP AT lt_table2 INTO ls2.
  ENDLOOP.
ENDLOOP.

Bu yapı:

  • Büyük veri setlerinde ciddi yavaşlığa neden olur

Alternatif:

  • HASHED TABLE kullan
  • READ TABLE ile eriş

WITH HEADER LINE ile LOOP (Kısa Not)

Eski kodlarda şu kullanım görülebilir:

DATA: lt_table TYPE STANDARD TABLE OF mara WITH HEADER LINE.

LOOP AT lt_table.
  WRITE: / lt_table-matnr.
ENDLOOP.
  • lt_table burada header line olarak kullanılır
  • Modern ABAP’ta önerilmez

Modern Kullanım (Önerilen)

DATA: lt_table TYPE STANDARD TABLE OF mara,
      ls_line  TYPE mara.

LOOP AT lt_table INTO ls_line.
ENDLOOP.

Performans Tavsiyeleri

  • Büyük tablolarda ASSIGNING kullan
  • Gereksiz loop’tan kaçın
  • Tek kayıt için READ TABLE tercih et
  • Nested loop kullanımını minimumda tut

Sonuç

ABAP’ta döngü kullanımı basit görünse de:

  • Yanlış kullanım → ciddi performans problemi
  • Doğru kullanım → hızlı ve temiz kod

Kısaca:

  • Table işlemleri → LOOP AT
  • Tekrar sayısı → DO
  • Koşula bağlı → WHILE

Abap’ta If kullanımı için bu yazıyı inceleyebilirsiniz.

Link : https://www.mustafahamit.com/abap-if-kullanimi-tum-operatorler-ve-kosullar-orneklerle-rehber/

Loading

Bir yanıt yazın