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 TABLEkullanREAD TABLEile 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_tableburada 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
ASSIGNINGkullan - Gereksiz loop’tan kaçın
- Tek kayıt için
READ TABLEtercih 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/
![]()