Banyak jawaban tampaknya berfokus pada kemampuan untuk jatuh sebagai alasan untuk membutuhkannyabreak
pernyataan itu.
Saya percaya itu hanya kesalahan, karena sebagian besar karena ketika C dirancang, tidak ada banyak pengalaman dengan bagaimana konstruksi ini akan digunakan.
Peter Van der Linden membuat kasus ini dalam bukunya "Expert C Programming":
Kami menganalisis sumber kompiler Sun C untuk melihat seberapa sering jatuh standar digunakan. Ujung depan kompilator Sun ANSI C memiliki 244 pernyataan switch, yang masing-masing memiliki rata-rata tujuh kasus. Kejatuhan terjadi hanya dalam 3% dari semua kasus ini.
Dengan kata lain, perilaku saklar normal salah 97% dari waktu. Bukan hanya di kompiler - sebaliknya, di mana fall through digunakan dalam analisis ini, itu sering untuk situasi yang terjadi lebih sering di kompiler daripada di perangkat lunak lain, misalnya, ketika mengkompilasi operator yang dapat memiliki satu atau dua operan :
switch (operator->num_of_operands) {
case 2: process_operand( operator->operand_2);
/* FALLTHRU */
case 1: process_operand( operator->operand_1);
break;
}
Kasus jatuh begitu banyak diakui sebagai cacat sehingga bahkan ada konvensi komentar khusus, yang ditunjukkan di atas, yang memberitahu serat "ini benar-benar salah satu dari 3% kasus di mana jatuh diinginkan."
Saya pikir itu ide yang baik untuk C # untuk meminta pernyataan lompatan eksplisit di akhir setiap blok kasus (sementara masih memungkinkan beberapa label kasus ditumpuk - selama hanya ada satu blok pernyataan). Dalam C # Anda masih dapat memiliki satu kasus jatuh ke yang lain - Anda hanya perlu membuat jatuh melalui eksplisit dengan melompat ke kasus berikutnya menggunakangoto
.
Sayang sekali Java tidak mengambil kesempatan untuk istirahat dari semantik C.