Apa Itu Logic Error?
Logic error (kesalahan logika) adalah kesalahan dalam penalaran sebuah program yang membuatnya menghasilkan hasil yang salah tanpa crash atau menampilkan pesan error apa pun. Kodenya valid dan setiap baris berjalan, tetapi program tidak melakukan apa yang dimaksud programmer.
Diperbarui 24 September 2026
Tiga nilai ujian, 80, 90, dan 100, punya rata-rata 90. Program ini berjalan tanpa satu keluhan pun dan mencetak angka lain:
Average: 203.33333333333334
Python melakukan persis apa yang tertulis di baris itu. Pembagian dikerjakan sebelum penjumlahan, jadi hanya nilai terakhir yang dibagi 3, dan hasilnya 80 + 90 + 33,33. Programmer-nya bermaksud menulis (scores[0] + scores[1] + scores[2]) / 3. Tambahkan tanda kurungnya, dan program mencetak Average: 90.0.
Kenapa tidak ada pesan error
Komputer memeriksa apakah kode itu valid, bukan apakah kode itu benar. Parser memeriksa tata bahasa, yang menangkap syntax error. Runtime memeriksa setiap operasi, yang menangkap runtime error seperti membagi dengan nol. Menjumlahkan tiga angka lalu membagi salah satunya dengan 3 adalah tata bahasa yang valid dan operasi yang sah, jadi kedua pemeriksaan itu lolos.
Hanya orang yang menulis program itu yang tahu bahwa program itu seharusnya menghitung rata-rata. Niat itu tidak ada di mana pun dalam kode, jadi tidak ada tool yang bisa membandingkan hasilnya dengan niat tersebut. Logic error adalah jarak antara apa yang kamu suruh komputer lakukan dan apa yang sebenarnya kamu inginkan.
Penyebab umum logic error
Sebagian besar logic error berasal dari daftar pola yang pendek.
- Error off-by-one. Sebuah loop berjalan satu kali terlalu banyak atau terlalu sedikit.
range(1, 5)menghasilkan 1, 2, 3, dan 4, karena nilai akhirnya tidak disertakan. Lihat iterasi. - Urutan operator.
a + b / 2hanya membagib, seperti pada rata-rata di atas. - Perbandingan yang salah.
<padahal yang dibutuhkan<=, atauandpadahal yang dibutuhkanor. Kondisi adalah ekspresi boolean, dan satu operator yang salah membalik hasilnya untuk sebagian input. - Kondisi dengan urutan yang salah. Dalam rangkaian
ifdanelif, kondisi true pertama yang menang, jadi pengujian yang luas yang ditaruh di awal menyembunyikan pengujian yang lebih sempit di bawahnya. - Variabel yang salah. Memperbarui
totaldi dalam loop tetapi mencetaksubtotal. - Asumsi tentang angka.
0.1 + 0.2 == 0.3bernilaiFalsedi Python, Java, dan JavaScript, karena bilangan floating point adalah perkiraan.7 // 2hasilnya 3, bukan 3,5.
Berikut kesalahan urutan kondisi. Nilai 95 seharusnya mendapat A:
D
D
F
95 lebih besar dari atau sama dengan 60, jadi cabang pertama yang menang dan elif tidak pernah dicapai. Taruh batas tertinggi di urutan pertama, dan setiap hasilnya menjadi benar.
Jenis-jenis error dalam pemrograman
Error pemrograman biasanya dibagi menjadi tiga jenis berdasarkan kapan error itu muncul dan apa yang melaporkannya.
| Syntax error | Runtime error | Logic error | |
|---|---|---|---|
| Kapan muncul | Sebelum program berjalan | Saat program berjalan | Saat program berjalan, atau tidak pernah disadari |
| Apa yang mendeteksinya | Parser atau compiler | Runtime atau sistem operasi | Seseorang atau sebuah tes |
| Apakah program berjalan? | Tidak | Sampai baris yang gagal | Ya, sampai selesai |
| Pesan error | Ada, dengan nomor baris | Ada, dengan traceback | Tidak ada |
| Contoh Python | if x > 3 tanpa titik dua | 10 / 0 | a + b / 2 untuk rata-rata |
| Cara menemukannya | Baca pesannya | Baca traceback-nya | Bandingkan output dengan jawaban yang diketahui |
Sebagian buku pelajaran mendaftar lebih banyak jenis, dan sebagian besar di antaranya masuk ke dalam tiga jenis ini. Error tipe yang ditolak compiler Java, seperti incompatible types: String cannot be converted to int, ditemukan saat compile time seperti syntax error, dan sebagian buku menyebutnya semantic error. Linker error terjadi di langkah terakhir pembangunan program C atau C++, saat sebuah fungsi sudah dideklarasikan tetapi kodenya tidak ditemukan di mana pun. Error aritmetika, error sumber daya, dan error file, seperti membagi dengan nol, kehabisan memori, atau membuka file yang tidak ada, semuanya adalah runtime error. Istilah "semantic error" juga dipakai sebagian kursus sebagai nama lain untuk logic error, jadi periksa arti mana yang dipakai sebuah buku pelajaran.
Cara menemukan logic error
- Uji dengan jawaban yang sudah kamu ketahui. Hitung hasil yang benar secara manual untuk input kecil, lalu bandingkan. Tiga nilai lebih mudah diperiksa daripada tiga ribu.
- Cetak nilai-nilai di tengah jalan. Mencetak
scoredan cabang yang diambil, atau penghitung loop di setiap putaran, menunjukkan langkah tepat di mana kenyataan menyimpang dari rencanamu. - Jalankan langkah demi langkah dengan debugger. Memasang breakpoint dan menjalankan satu baris setiap kali melakukan hal yang sama tanpa mengubah kodenya.
- Uji batas-batasnya. Coba 0, 1, nilai terbesar, list kosong, dan tepat di angka batasnya (60 dan 90 di contoh penilaian).
- Jelaskan kodenya dengan suara keras. Menjelaskan setiap baris kepada orang lain, atau kepada bebek karet, memaksamu mengatakan apa yang dilakukan baris itu, bukan apa yang kamu kira dilakukannya.
assert mengubah jawaban yang sudah diketahui menjadi pemeriksaan otomatis. Pemeriksaan ini tidak melakukan apa pun saat kondisinya true dan menghentikan program saat kondisinya false:
Traceback (most recent call last):
File "main.py", line 10, in <module>
assert grade(95) == "A", "95 should be an A"
^^^^^^^^^^^^^^^^
AssertionError: 95 should be an A
Tes yang gagal mengubah logic error yang diam menjadi error yang nyaring dengan nomor baris. Itulah seluruh ide di balik unit testing.
Logic error di bahasa lain
Polanya sama di mana-mana, tetapi setiap bahasa punya jebakannya sendiri. Di JavaScript, "5" + 3 menghasilkan string "53", sedangkan "5" - 3 menghasilkan angka 2, jadi nilai yang dibaca dari form sebagai teks bisa dijumlahkan dengan salah tanpa error apa pun. Di C, if (x = 5) memberi nilai 5 ke x dan selalu true. Clang memperingatkannya secara default (using the result of an assignment as a condition without parentheses), tetapi kodenya tetap bisa di-compile dan dijalankan, jadi tanggapi peringatan compiler seserius error.
Lanjut ke mana
Bandingkan halaman ini dengan halaman syntax error dan runtime error untuk melihat bagaimana setiap jenis dilaporkan. Loop adalah tempat error off-by-one bersarang, jadi halaman iterasi dan panduan Python tentang for loop adalah bacaan berikutnya yang bagus. Untuk berlatih menemukan hasil yang salah dalam latihan sungguhan, coba kursus Python.
Pertanyaan yang sering diajukan
Apa bedanya syntax error dan logic error?
Syntax error melanggar tata bahasa bahasa itu, jadi program ditolak sebelum berjalan dan kamu mendapat pesan dengan nomor baris. Logic error mengikuti tata bahasa dengan sempurna dan berjalan sampai selesai, tetapi hasilnya salah, dan tidak ada pesan sama sekali. Kamu menemukan syntax error dengan membaca pesannya; kamu menemukan logic error dengan menguji output-nya.
Apa itu logic error di Python?
range(1, 5) padahal yang kamu mau 1 sampai 5 termasuk 5, a + b / 2 padahal yang kamu mau (a + b) / 2, dan cabang if yang diperiksa dengan urutan yang salah. Python tidak bisa mendeteksinya, karena Python tidak punya cara untuk tahu apa maksudmu.Apa saja 5 jenis error dalam pemrograman?
Daftar lima yang umum adalah syntax error, semantic error (error tipe), linker error, runtime error, dan logic error. Tiga yang pertama ditemukan saat program sedang di-build, runtime error muncul saat program berjalan, dan logic error hanya terlihat sebagai hasil yang salah. Banyak kursus hanya mengajarkan tiga: syntax, runtime, dan logic.
Apakah logic error termasuk bug?
Ya. Bug adalah cacat apa pun yang membuat program berperilaku berbeda dari yang dimaksudkan, dan logic error adalah jenis yang paling umum. Crash dan pesan error juga bug, tetapi keduanya mengumumkan dirinya sendiri, sedangkan logic error harus disadari oleh seseorang atau oleh sebuah tes.
Kenapa logic error sulit ditemukan?
Karena tidak ada yang menunjuk ke sana. Tidak ada nomor baris dan tidak ada pesan, dan hasil yang salah bisa terlihat masuk akal, seperti rata-rata 203 untuk tiga nilai ujian yang tidak diperiksa ulang oleh siapa pun. Logic error ditemukan dengan membandingkan output dengan jawaban yang sudah kamu ketahui, itulah sebabnya tes dengan hasil yang diketahui itu penting.