De nombreuses réponses semblent se concentrer sur la capacité de tomber à travers comme le raison pour avoir exigé le break
déclaration.
Je pense qu'il s'agissait simplement d'une erreur, due en grande partie au fait que, lorsque C a été conçu, l'expérience de l'utilisation de ces constructions était loin d'être aussi grande.
Peter Van der Linden en parle dans son livre "Expert C Programming" :
Nous avons analysé les sources du compilateur C de Sun pour voir combien de fois la chute par défaut par défaut était utilisé. Le compilateur Sun ANSI C de Sun comporte 244 instructions switch chacune d'entre elles comporte une moyenne de sept cas. Le passage à travers se produit dans seulement 3% de tous ces cas.
En d'autres termes, l'interrupteur normal est mauvais 97% du temps. Ce n'est pas seulement dans un compilateur, au contraire. Au contraire, lorsque le fall through a été utilisé dans cette analyse, c'était souvent pour des situations qui se produisent plus fréquemment dans un compilateur que dans d'autres logiciels, par exemple, lors de la compilation d'opérateurs qui peuvent avoir soit un ou deux opérandes :
switch (operator->num_of_operands) {
case 2: process_operand( operator->operand_2);
/* FALLTHRU */
case 1: process_operand( operator->operand_1);
break;
}
La chute de l'affaire est si largement répandue reconnu comme un défaut qu'il y a même une convention de commentaire spéciale, montrée ci-dessus, qui dit à lint "ceci est vraiment l'un de ces 3% de cas où la chute est souhaitée".
Je pense que c'était une bonne idée pour le C# d'exiger une déclaration de saut explicite à la fin de chaque bloc de cas (tout en permettant toujours d'empiler plusieurs étiquettes de cas - tant qu'il n'y a qu'un seul bloc de déclarations). En C#, il est toujours possible de faire passer un cas à un autre - il suffit de rendre le passage explicite en sautant au cas suivant à l'aide d'une instruction de saut de type goto
.
Il est dommage que Java n'ait pas profité de l'occasion pour s'affranchir de la sémantique du C.