Apa itu Panggilan Ekor?

Dalam pemrograman komputer , panggilan ekor adalah situasi spesifik dalam kode sumber program di mana suatu fungsi, subrutin, atau prosedur mengembalikan nilai yang diharapkan dengan memanggil fungsi lain alih-alih hanya melewatkan variabel yang menyimpan nilai kembalian. Nama itu sendiri menunjukkan bahwa fungsi yang dipanggil untuk menghitung nilai yang akan dikembalikan berada di akhir, atau ekor, dari fungsi yang memanggilnya untuk memberikan nilai kembalian. Panggilan ekor menarik bagi beberapa pemrogram karena, dengan optimisasi atau perilaku kompiler tertentu, tidak ada ruang tumpukan tambahan yang digunakan untuk menyimpan lokasi kode dari fungsi utama; fungsi ekor sebagai gantinya digunakan untuk menghasilkan laporan nilai kembalian langsung kembali ke titik panggilan di mana fungsi asli dipanggil. Penggunaan panggilan ekor sangat berguna dalam situasi di mana rekursi digunakan, karena jumlah ruang tumpukan yang digunakan untuk menyimpan alamat pemanggil dalam kasus di mana panggilan rekursif bersarang sangat dalam dapat dengan cepat habis dan menghentikan eksekusi program. Meskipun menggunakan panggilan ekor dapat membantu meningkatkan kecepatan, penggunaan memori, dan efisiensi dalam suatu program, itu juga dapat menyebabkan situasi di mana kode sumber direstrukturisasi untuk menggunakan panggilan dengan cara yang membuat sulit untuk di-debug dan dilacak, terutama dengan kasus-kasus pengulangan.

Pria memegang komputer

Keberadaan panggilan ekor sebagian besar disebabkan oleh cara kerja tumpukan panggilan di sebagian besar program komputer dan arsitektur sistem. Tumpukan, yang seperti tumpukan pelat, adalah struktur data masuk pertama, keluar terakhir . Ketika suatu fungsi, subrutin atau prosedur dipanggil, alamat dari mana panggilan dibuat, disebut bingkai tumpukan, disimpan di tumpukan. Ini berarti sebuah program yang memanggil Fungsi A, yang kemudian memanggil Fungsi B, akan memiliki dua bingkai tumpukan, satu untuk Fungsi B dan satu lagi di bawahnya untuk Fungsi A. Setelah Fungsi B selesai dijalankan, bingkai tumpukannya akan muncul dari atas tumpukan dan eksekusi kembali ke Fungsi A, yang bingkainya muncul dari tumpukan saat selesai, akhirnya mengembalikan kontrol program ke titik dari mana fungsi pertama awalnya dipanggil.

Ketika panggilan ekor digunakan, pernyataan kembali dalam suatu fungsi secara langsung menggunakan nilai kembalian dari fungsi lain sebagai data yang akan dikirim ke kode panggilan. Dalam contoh di atas, jika Fungsi A memanggil Fungsi B secara langsung dengan pernyataan kembali, maka panggilan ekor telah terbentuk. Dalam tumpukan panggilan, alih-alih memiliki bingkai tumpukan untuk fungsi A dan B, Fungsi B akan menerima alamat pengirim dari Fungsi A dan bingkai tumpukan Fungsi A akan muncul dan dibuang, yang berarti Fungsi B akan meneruskan nilai pengembaliannya langsung kembali ke lokasi yang disebut Fungsi A tanpa terlebih dahulu harus mengembalikan kontrol ke Fungsi A. Hal ini meningkatkan kecepatan pemanggilan fungsi serta membantu mengurangi jumlah informasi dalam tumpukan.

Sifat-sifat panggilan ekor dapat menjadikannya pilihan yang sangat menarik untuk fungsi rekursif. Fungsi rekursif adalah fungsi yang memanggil dirinya sendiri berulang kali untuk menghitung nilai, seperti halnya saat melintasi struktur data daftar. Tidak ada bingkai tumpukan tambahan yang dibuat untuk panggilan fungsi bersarang, sehingga tingkat rekursi yang sangat dalam dapat dilakukan dengan aman tanpa ancaman langsung dari tumpukan yang meluap dan kemungkinan penghentian program.