La using
directive nous donne accès aux types sans utiliser leurs noms complets:
using MyNamespace.Foo.Bar;
L' using
instruction agit comme un sucre syntaxique pour les try
/ finally
blocs qui garantissent que les objets sont éliminés correctement:
using(var x = new MyDisposableClass()) { ... }
Ces deux situations semblent n'avoir rien à voir l'une avec l'autre. Pourquoi utilisent-ils le même mot-clé?
Je doute que quelqu'un puisse jamais confondre les deux cas, mais il semble étrange de ne pas créer un nouveau mot pour une nouvelle fonctionnalité.
En passant, j'ai également lu sur la double utilisation de class
C ++ (une pour déclarer les classes, une pour définir les paramètres du modèle), mais le deuxième cas a finalement obtenu son propre mot-clé typename
, ce qui est plus logique pour moi.
var
étant l'exemple classique où un type dans la portée nommévar
a priorité sur le mot-clé.g++ --std=c++11
, ou de permettre aux fichiers source de spécifier un dialecte (comme dans Haskell (?), Racket, Perl, même Python). Une langue peut également être conçue dans de façon à ce que les mots-clés ne se heurtent jamais syntaxiquement avec les identifiants possibles, sans réserver certains identifiants (bien que cela puisse être difficile pour votre implémentation de langage run-off-the-mill en utilisant un analyseur LALR avec un lexer à l'avant)@using
Les concepteurs de langage essaient généralement de limiter le nombre de mots clés. Lorsqu'un mot clé est réservé, il ne peut pas être utilisé comme identifiant dans le code utilisateur, ce qui est gênant s'il ne s'agit que du mot dont vous avez besoin. C'est également un obstacle lors du portage de code à partir d'autres langages - et Microsoft voulait que les gens portent le code de Java vers C #. C # a plus de mots clés que Java, mais chaque nouveau mot clé le rendrait plus difficile. De plus, les langages .net sont conçus pour interagir avec des API écrites dans différentes langues qui peuvent ne pas avoir les mêmes mots-clés, ce qui entraîne des désagréments si un membre public est également un mot-clé.
Les deux utilisations de
using
sont sans ambiguïté, puisqu'elles apparaissent dans des positions dans la syntaxe, un «utilisation» est un terme approprié dans les deux cas. Il est donc logique de réutiliser le même mot clé. Vous noterez d'autres exemples de réutilisation de mots clés, par exemple:new
dans les contraintes génériquesin
dansforeach
et dans les paramètres de type variantdefault
comme clause dansswitch
et comme opérateur (default(T)
).la source