Beaucoup de réponses semblent se concentrer sur la capacité de tomber à travers comme raison pour exiger l'instruction break
.
Je crois que c'était simplement une erreur, en grande partie parce que quand C a été conçu il n'y avait pas autant d'expérience avec la façon dont ces constructions seraient utilisées.
Peter Van der Linden fait le cas dans son livre "Programmation Expert C":
Nous avons analysé les sources du compilateur C Sun pour voir à quelle fréquence la valeur par défaut chute a été utilisé par. La partie antérieure du compilateur Sun ANSI C comporte 244 instructions de commutation , chacune ayant une moyenne de de sept cas. Fall through se produit dans seulement 3% de tous ces cas.
En d'autres termes, le comportement normal du commutateur est incorrect 97% du temps. Il est non seulement dans un compilateur - au contraire , où tombent à travers a été utilisé dans cette analyse, il a été souvent des situations qui se produisent plus fréquemment dans un compilateur que dans d'autres logiciels, par exemple, lors de la compilation des opérateurs que peut avoir une 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;
}
chute des cas par est si largement reconnu comme un défaut qu'il ya même une convention de commentaire particulier, ci-dessus, qui indique les peluches «c'estEn réalité, l'un de ces 3% de cas où était tombé était souhaité. "
Je pense qu'il était une bonne idée pour C# d'exiger une instruction de saut explicite à la fin de chaque bloc de cas (tout en permettant à plusieurs étiquettes de cas pour être empilés - tant qu'il n'y a qu'un seul bloc de déclarations) . En C# vous pouvez toujours avoir un cas à travers un autre - il vous suffit de rendre la chute explicite en sautant à l'affaire suivante en utilisant un goto
.
Dommage que Java n'ait pas saisi l'occasion de rompre avec la sémantique C.
En effet, je pense qu'ils sont allés pour la simplicité de la mise en œuvre. D'autres langages prenaient en charge des cas plus complexes (plages, valeurs multiples, chaînes de caractères ...) au détriment, peut-être, de l'efficacité. – PhiLho
Java ne voulait probablement pas casser ses habitudes et semer la confusion. Pour un comportement différent, ils devraient utiliser une sémantique différente. Les concepteurs Java ont perdu un certain nombre d'opportunités de se détacher de C, de toute façon. – PhiLho
@PhiLho - Je pense que vous êtes probablement le plus proche de la vérité avec "simplicité de mise en œuvre". –