Qu’est-ce que “Mumble Typing”?

J’ai déjà vu plusieurs mentions de “dactylographie”, comme cette réponse de StackOverflow: une future version de .NET prendra- t-elle en charge les n-uplets en C #?

J’ai cherché le terme sur Google et je ne trouvais pas grand-chose d’explication, mis à part certaines personnes qui espéraient que C # le soutiendrait éventuellement.

Qu’est-ce que Mumble Typing?

Je ne sais pas si quelqu’un de l’équipe de conception C # a proposé ce terme ou s’il est utilisé ailleurs dans l’indussortinge. Nous avons commencé à l’utiliser en travaillant sur des variables locales implicitement typées (c’est-à-dire “var x = any;”) en C # 3.0. Un scénario assez courant consiste à vouloir que le compilateur infère une partie d’un type mais soit explicite à propos d’une autre partie. Par exemple, considérons ce qui suit:

var list = new List() { 10, 20, 30 }; 

Ici, le type de “liste” n’est pas donné, mais l’argument de type de la liste générique est donné. On imagine que cela pourrait être déduit de l’initialiseur:

 var list = new List() { 10, 20, 30 }; 

Ici le ??? signifie “il y a un argument de type qui va ici; compilateur, déterminez ce qu’il doit être à partir du contexte”.

Nous appelons cela “mumble typing” car on imagine avec humour que le code est lu comme “la liste var équivaut à la nouvelle liste de hrmhmrhrm initialisée à dix, vingt, trente.”

Nous n’avons jamais implémenté la méthode Mumble Typing, ce qui est un peu regrettable car cela signifie qu’il est difficile de dresser une liste de types anonymes. Pour ce faire, vous pouvez utiliser l’astuce ” cast by example “.

J’aime ce lien , où l’explication se trouve vers la fin de la page. D’après ce que j’ai compris, l’idée de “typage mumble” est une inférence de type sans qu’il soit nécessaire de spécifier le type entier. C # 4.0 a des types anonymes, mais il existe des limitations, dont certaines sont expliquées dans le lien ci-dessus et ici .

Je pense que le principal problème de C # est toujours que, lorsque vous devez nommer un type, mais que vous n’avez qu’un type anonyme, il n’existe aucune syntaxe permettant de spécifier ce dont vous avez besoin. Par exemple, cela ne fonctionne pas:

 List myList = SomeFunctionThatReturnsThisList(someParameter); var afterTransformation = myList.Select(o => new { x = ox, y = oy }); 

Vous ne pouvez pas spécifier var tant que type dans un générique. C’était un exemple un peu stupide, mais j’espère que cela traduira l’idée qu’il existe des constructions syntaxiques avec des types anonymes qui semblent pouvoir être possibles, mais ne le sont pas.