Konstruksi aliran kontrol level yang lebih tinggi cenderung sesuai dengan konsep dalam domain masalah. If / else adalah keputusan berdasarkan beberapa kondisi. Loop mengatakan untuk melakukan beberapa tindakan berulang kali. Bahkan pernyataan break mengatakan "kami melakukan ini berulang kali, tapi sekarang kami harus berhenti".
Pernyataan goto, di sisi lain, cenderung sesuai dengan konsep dalam program yang sedang berjalan, bukan dalam domain masalah. Dikatakan untuk melanjutkan eksekusi pada titik tertentu dalam program . Seseorang yang membaca kode harus menyimpulkan apa artinya sehubungan dengan domain masalah.
Tentu saja semua konstruksi tingkat yang lebih tinggi dapat didefinisikan dalam hal gotos dan cabang kondisional sederhana. Itu tidak berarti bahwa mereka hanya goto yang menyamar. Pikirkan mereka sebagai goto yang dibatasi - dan pembatasanlah yang membuatnya bermanfaat. Pernyataan break diimplementasikan sebagai lompatan ke ujung loop tertutup, tetapi lebih baik dianggap beroperasi pada loop secara keseluruhan.
Semua yang lain dianggap sama, kode yang strukturnya mencerminkan bahwa dari domain masalah cenderung lebih mudah dibaca dan dipelihara.
Tidak ada kasus di mana pernyataan goto mutlak diperlukan (ada teorema untuk efek itu), tetapi ada kasus di mana itu bisa menjadi solusi yang paling buruk. Kasing tersebut bervariasi dari satu bahasa ke bahasa lain, tergantung pada tingkat konstruksi apa yang didukung oleh bahasa tersebut.
Di C, misalnya, saya percaya ada tiga skenario dasar di mana goto sesuai.
- Keluar dari loop bersarang. Ini tidak perlu jika bahasa tersebut memiliki pernyataan istirahat berlabel.
- Bailing keluar dari hamparan kode (biasanya badan fungsi) jika terjadi kesalahan atau peristiwa tak terduga lainnya. Ini tidak perlu jika bahasa tersebut memiliki pengecualian.
- Menerapkan mesin negara hingga eksplisit. Dalam kasus ini (dan, saya pikir, hanya dalam kasus ini) goto berhubungan langsung dengan konsep dalam domain masalah, transisi dari satu keadaan ke keadaan lain yang ditentukan, di mana keadaan saat ini diwakili oleh blok kode mana yang sedang dijalankan .
Di sisi lain, mesin negara hingga eksplisit juga dapat diimplementasikan dengan pernyataan switch di dalam loop. Ini memiliki keuntungan bahwa setiap negara mulai di tempat yang sama dalam kode, yang dapat berguna untuk debugging, misalnya.
Penggunaan utama goto dalam bahasa modern yang cukup (yang mendukung jika / else dan loop) adalah untuk mensimulasikan konstruksi aliran kontrol yang hilang dari bahasa.